Scipy最大化线性编程不起作用

时间:2015-08-20 04:40:52

标签: python numpy scipy linear-programming linear

我有以下内容:

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

这是错误的答案!我的代码是错的,还是我发现了错误?

编辑: 要验证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

1 个答案:

答案 0 :(得分:2)

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