想用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