2017-07-31 196 views
1

我正在用Python 2.7.12和Numpy 1.11.0尝试以下代码。即使存在解决方案,scipy.optimize.linprog也找不到解决方案

import numpy as np 
from scipy.optimize import linprog 

A = np.matrix([[1,0,0,1], [0, 1, 0 ,1], [0, 1, 1, 0]]) 
c = np.zeros(A.shape[1]) 
res = linprog(c,A_eq = A, b_eq = [0,1,-1], options=dict(bland=True)) 
print (res.x) 
print (A.dot([0, 1, -2, 0])) 

的上述输出是

nan 
[[ 0 1 -1]] 

所以scipy.optimize.linprog甚至没有找到一个解决方案,当一个由A_eq的点乘法的输出与[0,1存在作为明显,-2,0]。

一个类似的问题被问到here,我尝试了在那里建议的解决方案(即添加options = dict(bland = True)或更新容差值)。我仍然得到与上面一样的错误输出。 这种行为的原因是什么?谢谢。

+0

[scipy.optimize.linprog尽管存在可行的答案仍然无法找到可行的起点](https:// stackoverflow.com/questions/29941958/scipy-optimize-linprog-unable-to-find-a-feasible-starting-point-despite-a-feasib) –

+0

嗨,乔纳斯,感谢您的评论。虽然我已经看过这个问题,并尝试了在那里建议的解决方案(即添加options = dict(bland = True)或更新容差值)。我仍然得到与问题中发布的错误输出相同的结果。 – Hummels420

回答

1

我的OP和解决方案被明确添加的范围如下:

res = linprog(c, A_eq = A, b_eq = [0,1,-1], bounds=(None, None)) 

我是在默认情况下,linprog假定在解决方案,但实际上默认的边界是没有界限(的印象0,无),即非负值。

这在docs中提到:

界限:序列,可选

(最小,最大)对在X的每个元素,限定于该参数的界限。如果在该方向没有界限,则使用“无”作为最小或最大值中的一个。默认情况下,边界是(0,无)(非负)...