scipy.optimize.minimize 产生不满足约束的解决方案,但报告说优化成功终止。
目标是 (x[0] - 3)**2 + (x[1] - 2)**2
约束为 x[0]+x[1]<=4
正确的解决方案应该是 [2.5, 1.5]
函数的答案是 [3,2]
我尝试了不同的优化方法。没有尝试任何方法。尝试了语法的变体。
这是代码(看起来超级简单):
import numpy as np
from scipy import optimize
def f(x):
return (x[0] - 3)**2 + (x[1] - 2)**2
def con(x):
return sum(x)-4
x0 = np.array([0, 0])
res=optimize.minimize(f, x0, method="SLSQP",constraints={"fun": con, "type": "ineq"}, options={'disp':True})
print(res)
print(sum(res.x)-4)