TypeError:“ float”对象不可下标scipy最小化

时间:2018-11-07 16:54:40

标签: python optimization scipy

我正在尝试使用如下所示的约束和界限来使函数最小化,但是运行它后却出现错误:

TypeError: 'float' object is not subscriptable.

你能告诉我如何避免吗?

我也不确定我是否可以很好地使用主程序 作为一个整体。

import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt
import sympy as sp
from scipy.integrate import quad
import math


# obj funtion
def f(x):
    l = sp.Symbol('l')
    Ep = 45000
    Gc = 1
    F = 1080
    ep = x[0]
    ec = x[1]
    return (((F ** 2 * (l - x)) / (Ep * ec * l * (ec + ep) ** 2)) + (F ** 2) / (2 * (ec + 2 * ec) * Gc * l)) / 100


mainf = quad(f, 0, 1800)


# constrain 1 - mass

def constrain1(x):
    pc = 4.5 * 10 ** (-5)
    pp = 2.1 * 10 ** (-3)
    V = 3.1 * 10 ** 7
    ep = x[0]
    ec = x[1]
    return ((((pp * V * ((2 * ep + ec) / 50) * ep) / (ec + 2 * ep)) + (
            (pc * V * ((2 * ep + ec) / 50) * ec) / (ec + 2 * ep))) / 1000) - 4.5


def constrain2(x):
    ep = x[0]
    ec = x[1]
    return (3.13107 * 10 ** 3) * ep * np.sqrt(ep / ec) - 1080


# initial guesses
x_init = [2, 50]

# bounds

b1 = (0, 3)
b2 = (30, 70)
bnds = (b1, b2)
con1 = {'type': 'ineq', 'fun': constrain1}
con2 = {'type': 'ineq', 'fun': constrain2}
cons = [con1, con2]

sol = minimize(mainf,x0=x_init,method='SLSQP',bounds=bnds,constraints=cons)

0 个答案:

没有答案