from scipy.optimize import minimize
import numpy as np
#目标函数:
def func(args):
T,X=args
m = 0
i = 1
while i <= 6:
m = m + (-9.52E+5) * (1 - x[0]) ** i + (14.76E+19) * x[0] * (1 - x[0]) ** (i - 1)
def fun1():
(333E+15) + m + (85.49E+17)*x[1]
return fun1()
#约束条件
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',constraints=cons)
#求解#
res = minimize(func(args), x0, method='SLSQP', constraints=cons)
print(res.fun)
print(res.success)
print(res.x)
你的目标函数可能有点问题,按照这个模板自己改下吧,模板的目标函数是1/x0 + x1
from scipy.optimize import minimize
import numpy as np
# 目标函数:
def func():
def fun1(x):
# m = 0
# i = 1
# while i <= 6:
# m = m + x[0] * x[1]
# m = m + (-9.52E+5) * (1 - x[0]) ** i + (14.76E+19) * x[0] * (1 - x[0]) ** (i - 1)
# i = i + 1
# return (333E+15) + m + (85.49E+17) * x[1]
return 1/x[0] + x[1]
return fun1
# 约束条件
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})
return cons
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(), x0, method='SLSQP', constraints=cons)
print(res.fun)
print(res.success)
print(res.x)
很明显,你func里的x是一个数组,而你给它的并不是,我假设给一个,你参考一下:
from scipy.optimize import minimize
import numpy as np
#目标函数:
def func(args):
T,x=args #这里的X应该是小写
m = 0
i = 1
while i <= 6:
m = m + (-9.52E+5) * (1 - x[0]) ** i + (14.76E+19) * x[0] * (1 - x[0]) ** (i - 1)
def fun1():
(333E+15) + m + (85.49E+17)*x[1]
return fun1()
#约束条件
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,[1, 2]) # 注意这里的X应该是一个数组
args1=(0,1,0,1,)
cons = con(args1)
x0= np.array((0.5, 0.5)) #设置初始值
res=minimize(func(args),x0,method='SLSQP',constraints=cons)
#求解#
res = minimize(func(args), x0, method='SLSQP', constraints=cons)
print(res.fun)
print(res.success)
print(res.x)
运行即可,数据很大,消耗时间。
如有帮助,请采纳,多谢!
你本身函数存在一定的问题,
1、func ,X就是x?,但是你后面X直接给了int类型,这就导致x[0]报错
2、你的con函数没有返回值,那cons就是None
函数方程和约束条件发下