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
如果我嘗試運行它,我得到一個錯誤:'方法='simplex'的linprog的輸入無效。 A_ub中的列數必須等於c'的大小。 Py3.4,scipy 0.15.1 – fjarri
對不起,忘了'-1'。它現在會工作。以上是我更復雜的代碼MWE,因此錯誤。 –
根據文檔,'linprog'找到最小值,而在問題的最後部分,您承認您的解決方案會產生更大的值。 – fjarri