2015-08-20 57 views
1

我有以下幾點: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 

這是簡單的錯誤答案!我的代碼錯了,還是發現了一個錯誤?

編輯: 要驗證通過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

+0

如果我嘗試運行它,我得到一個錯誤:'方法='simplex'的linprog的輸入無效。 A_ub中的列數必須等於c'的大小。 Py3.4,scipy 0.15.1 – fjarri

+0

對不起,忘了'-1'。它現在會工作。以上是我更復雜的代碼MWE,因此錯誤。 –

+0

根據文檔,'linprog'找到最小值,而在問題的最後部分,您承認您的解決方案會產生更大的值。 – fjarri

回答

2

根據該文檔,linprog找到最低,而你提出的解決方案是最大的。

+2

果然,將第一個參數替換爲負數,最小化爲最大化,與OP的答案匹配。 – Paul