scipy.optimize.minimize返回不满足问题约束的解决方案。为什么?

时间:2018-12-24 19:40:55

标签: python scipy constraints nonlinear-optimization

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)

1 个答案:

答案 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)