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)
答案 0 :(得分:0)
ineq是> = 0的不等式。我假设(基于我所看到的示例)它是<= 0不等式。的确,下面的代码在纠正了这种误解之后会产生正确的答案。
将numpy导入为np 从scipy导入优化
def f(x): 返回[x [0]-3)** 2 +(x [1]-2)** 2
def con(x): 返回4-sum(x)
x0 = np.array([0,0]) res = optimize.minimize(f,x0,method =“ SLSQP”,constraints = {“ fun”:con,“ type”:“ ineq”},options = {'disp':True}) 打印(res) 打印(sum(res.x)-4)