我是一个新手程序员,尝试使用Python解决数学优化问题。这个问题的思路是在满足一些约束条件的情况下最小化函数的值。这似乎非常简单,但由于某些原因,我得到的结果明显不能满足约束条件。
所涉及的函数如下(我没有足够的声望点来发布LaTeX方程的图像):
f(a,b,c,d) = 2*a + 3*b + c + 2*d
具有以下约束条件:
- a+b=2 - c+d=8 - a+c=3 - b+d=7
我在Python中使用了scipy.optimize.minimize来尝试解决它,以下是我的代码:
所涉及的函数如下(我没有足够的声望点来发布LaTeX方程的图像):
f(a,b,c,d) = 2*a + 3*b + c + 2*d
具有以下约束条件:
- a+b=2 - c+d=8 - a+c=3 - b+d=7
我在Python中使用了scipy.optimize.minimize来尝试解决它,以下是我的代码:
import numpy as np
import scipy
from scipy.optimize import minimize as min
def f(x):
return 2*x[0] + 3*x[1] + x[2] + 2*x[3]
cons = ({'type' : 'eq','fun': lambda x: np.array([x[0]+x[1]-2])},
{'type' : 'eq','fun': lambda x: np.array([x[2]+x[3]-8])},
{'type':'eq' , 'fun': lambda x: np.array([x[0]+x[2]-3])},
{'type':'eq' , 'fun': lambda x: np.array([x[1]+x[3]-7])},
{'type':'ineq' , 'fun': lambda x: np.array([x[0]])},
{'type':'ineq' , 'fun': lambda x: np.array([x[1]])},
{'type':'ineq' , 'fun': lambda x: np.array([x[2]])},
{'type':'ineq' , 'fun': lambda x: np.array([x[3]])},
{'type':'ineq' , 'fun':f})
u = min(f,[1.5,0.5,1.5,6.5],constraints=cons,method='Nelder-Mead',options={'Disp':True,'maxiter':2})
print(u)
print(f(u.x))
它给了我一些 a、b、c、d 的值,但这些值并不满足相等关系。我尝试更改优化方法,但没有帮助。
如有建议请不吝赐教,感谢阅读!
19
,这与您使用SLSQP
方法得到的初始条件的值相同。可能是因为您已经获得了最优值,所以返回了原始值。 - Cleb