2017-07-31 193 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,無)(非負)...