2016-10-03 98 views
1

我想用許多變量和線性規劃解決許多變量的問題。我有一組變量X它們是在0.5和3之間的實數,我必須解決以下等式:求解具有多個變量和不等式約束條件的多個方程

346 <= x0*C0 + x1*C1 + x2*C2 +......xN*CN <= 468 
25 <= x0*p0 + x1*p1 + x2*p2 +......xN*pN <= 33 
12 <= x0*c0 + x1*c1 + x2*c2 +......xN*cN <= 17 
22 <= x0*f0 + x1*f1 + x2*f2 +......xN*fN <= 30 

數C0 ... CN,P0 ...對-N,C0 ... CN ,f0 ... fN已經發給我了。我想通過以下方式來解決這個問題:

import numpy as np 
from scipy.optimize import linprog 
from numpy.linalg import solve 
A_ub = np.array([ 
    [34, 56, 32, 21, 24, 16, 19, 22, 30, 27, 40, 33], 
    [2, 3, 2, 1.5, 3, 4, 1, 2, 2.5, 1, 1.2, 1.3], 
    [1, 2, 3, 1.2, 2, 3, 0.6, 1, 1, 1.2, 1.1, 0.8], 
    [0.5, 2, 2, 1, 3, 4, 1, 1, 1, 0.5, 0.3, 1.2], 
    [-34, -56, -32, -21, -24, -16, -19, -22, -30, -27, -40, -33], 
    [-2, -3, -2, -1.5, -3, -4, -1, -2, -2.5, -1, -1.2, -1.3], 
    [-1, -2, -3, -1.2, -2, -3, -0.6, -1, -1, -1.2, -1.1, -0.8], 
    [-0.5, -2, -2, -1, -3, -4, -1, -1, -1, -0.5, -0.3, -1.2]]) 
b_ub = np.array([468, 33, 17, 30, -346, -25, -12, -22]) 
c = np.array([34, 56, 32, 21, 24, 16, 19, 22, 30, 27, 40, 33]) 
res = linprog(c, A_eq=None, b_eq=None, A_ub=A_ub, b_ub=b_ub, bounds=(0.5, 3)) 

解釋方程A_ub的第一行是一樣的b_ub,因爲我們正試圖最大化方程以及確保其中的給定邊界限制即468和346,這意味着我想要儘可能接近上限。

我把A_ub [-34, -56, -32, -21, -24, -16, -19, -22, -30, -27, -40, -33]和-346中b_ub與邏輯:

-346 > -(x0*C0 + x1*C1 + x2*C2 +......xN*CN)這將求解方程下界的問題。我也和其他人一樣。

但我覺得我的做法是錯誤的,因爲我得到的答案0.425res.funnanres.x

的上限x爲3的值和下限爲0.5

怎麼辦我如上所示定義問題,以便在記住上限的同時獲得接近468的最大值?如何使用scipy定義下界?我第一次從事線性編程工作,所以我可能錯過了可以幫助我的想法。

我也對任何其他解決方案開放。

+0

在優化模型中,您不能有嚴格的不等式(>),只有≥(出於理論和實際的原因)。否則,您可以輕鬆將這些不等式添加到模型中。你需要做兩兩配對,即'-x0 * C0 + x1 * C1≤0','-x1 * C1 + x2 * C2≤0'等。 –

+0

感謝Erwin Kalvelagen,我怎樣才能建立上述方程(PS我道歉,如果這聽起來很簡單,我剛剛開始scipy的機器學習和線性編程) –

+0

要實現'-x0 * C0 + x1 * C1≤0'將一行添加到'A_ub'。它只有兩個非零元素:'x0'列中的'-C0'和'x1'列中的'C1'。然後將一個元素添加到值爲0的'b_ub'中。 –

回答

3

這個不等式系統是不可行的:沒有滿足所有約束條件的解決方案。你可以看到,從res

 fun: 0.42500000000000243 
message: 'Optimization failed. Unable to find a feasible starting point.' 
    nit: 28 
    status: 2 
success: False 
     x: nan 

我相信這是一個正確的結果(我驗證了這一點與其他LP系統)。

注意:如果將界限更改爲(0,3),您將得到一個可行的解決方案。

+0

謝謝你,你是對的 –

相關問題