非线性规划求解遇到了困难

想用scipy库进行非线性规划求解,但是会报错m函数里面的x没有被定义,试了好多次不知道应该怎么处理,劳烦各位解惑。我是参考这个例子做的https://blog.csdn.net/weixin_45508265/article/details/112978943


from scipy.optimize import minimize
import numpy as np
#目标函数:

def func(args):
    T,X=args
    for i in range(X+1):
        m=-(9.52E+15)*T/X*(1-x[0])**i + (14.76E+19)*x[0]*(1-x[0])**(1-i)
    v = lambda x: (333E+15) + m + (85.49E+17)*x[1]
    return v

#约束条件
def con(args):
    x0min,x0max,x1min,x1max = args
    cons = ({'type':'ineq','fun':lambda x:1-x0max},\
           {'type':'ineq','fun':lambda x:x0min},\
           {'type': 'ineq', 'fun': lambda x: 1- x1max},\
           {'type':'ineq','fun':lambda x:x1min})

if __name__ == "__main__":
    args=(T,X)= (10,5)
    args1=(0,1,0,1,)
    cons = con(args1)
    x0= np.array((0.5, 0.5)) #设置初始值
    res=minimize(func(args),x0,method='SLSQP')
    print(res)

我觉得是约束条件里的匿名函数有问题,你应该看一下lambda怎么用,如果不会搞lambda的话,建议还是老老实实 用def定义函数吧

第9行的 x 是什么 不建议你用lambda

minimize() 函数是 SciPy.optimize 模块中求解多变量优化问题的通用方法,可以调用多种算法,支持约束优化和无约束优化。
建议你参考例程:Python小白的数学建模课-12.非线性规划
https://blog.csdn.net/youcans/article/details/118396836