Scipy最大化线性规划不起作用



我有以下内容:

ball = scipy.optimize.linprog(array([0,0,1]), A, b)

,

A = 
array([[-1.0,  0.0,  1.0],
   [ 1.0,  0.0,  1.0],
   [ 0.0, -1.0,  1.0],
   [ 0.0,  1.0,  1.0]], dtype=float128)
b = array([ 0.0,  1.0,  0.0,  1.0], dtype=float128)

我们可以用手最大化它来得到答案x = [0.5, 0.5, 0.5]。然而scipy给了我

  status: 0
   slack: array([ 0.,  1.,  0.,  1.])
 success: True
     fun: -0.0
       x: array([ 0.,  0.,  0.])
 message: 'Optimization terminated successfully.'
     nit: 0

这是一个完全错误的答案!是我的代码错了,还是我发现了一个bug?

编辑:要验证scipy给出的解不是最优解,请执行

np.all(np.dot(A, np.array([0.5,0.5,0.5])) <= b)

看我的解是否满足约束条件。然后注意

np.dot(np.array([0,0,1]), np.array([0.5,0.5,0.5])) > np.dot(np.array([0,0,1]), np.array([0,0,0]))

看到它至少是一个更好的解决方案。事实上,这是最优解。

编辑2:scipy.__version__ = 0.16.0

根据文档,linprog找到最小值,而您提出的解决方案是最大值。

最新更新