2015-10-01 26 views
0

我試圖使用scipy.optimize.linprog,它不適用於我的情況。我一定在做錯事 - 請幫我找到它。scipy.optimize.linprog不適合我:我做錯了什麼?

這裏是投入和預期的解決方案和測試,預期的解決方案是可行的

import numpy, scipy.optimize 
print "A", A_ub 
print "b", b_ub 
print "c", c 
print "x_expected", x_expected 
print "expected optimum", numpy.dot(c, x_expected) 
print "feasibility test", numpy.dot(A_ub, x_expected) <= b_ub 

這將打印

A [[-1. -0. 0. 1.] 
    [-0. -1. 1. 1.] 
    [-1. -0. -0. -1.] 
    [-0. -1. -1. -1.]] 
b [ 2. 1. -2. -1.] 
c [ 1. 1. 0. 0.] 
x_expected [ 0 0 -1 2] 
expected optimum 0.0 
feasibility test [ True True True True] 

當我打電話linprog我得到一個可行的解決方案,但似乎不要像我期望的那樣最佳。

r = scipy.optimize.linprog(c, A_ub, b_ub) 
x_derived = r.x 
print "x_derived", x_derived 
print "derived optimum", numpy.dot(c, x_derived) 
print "derived feasibility", numpy.dot(A_ub, x_derived) <= b_ub 

這將打印

x_derived [ 1. 0. 0. 1.] 
derived optimum 1.0 
derived feasibility [ True True True True] 

有什麼錯我的理由,我應該得到預期的解決方案(或更好的,如果有一個),而不是一個我得到什麼?如果我沒有錯,我該如何讓linprog爲我找到它?謝謝!

+0

你想在這裏最大化或最小化? – cel

+0

我想盡量減少numpy.dot(c,x)。 –

回答

1

Linprog在默認情況下假設通常的線性規劃下界x >= 0,這是您的「預期」解決方案不能滿足的。請參閱bounds關鍵字參數來更改邊界。