線性規劃問題
在一組線性約束條件下的限制下,求一線性目標函式最大或最小的問題。
線性規劃標準型
-
數學標準型:
可行解:滿足約束條件的解矩陣x=[x1,x2,x3,..,xn]。
最優解:是目標函式達到最大值或者最小值的可行解。
可行域:所有可行解構成的集合稱為問題的可行解,記為R。
-
matlab標準型:
- f,x,b,beq,lb,ub為列向量
- f稱為價值向量
- b稱為資源向量
- A,Aeq為矩陣
Matlab線性規劃函式——linprog
>> help linprog
linprog - Solve linear programming problems
This MATLAB function solves min f'*x such that A*x ≤ b.
x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq,lb,ub,options)
x = linprog(problem)
[x,fval] = linprog(___)
[x,fval,exitflag,output] = linprog(___)
[x,fval,exitflag,output,lambda] = linprog(___)
另請參閱 intlinprog, mpsread, optimoptions, quadprog
linprog 的參考頁
- x:返回決策向量的取值
- fval返回目標函式的最優解
- f為價值向量
- A和b對應線性不等式約束
- Aeq和beq對應線性等式約束
- lb和ub分別對應決策向量的下界向量和上界向量
- options是控制引數
例題講解
-
題目分析:
這裡求解的最優解是最大值,而matlab裡面的標準函式是求最小值為最優解,因此需要對題目進行變形。另外,對最優解的約束同樣需要進行整理稱為matlab的使用形式。整理結果如下:
-
Matlab****程式實現
f=[-2;-3;5]; a=[-2,5,-1;1,3,1]; b=[-10;12]; aeq=[1,1,1]; beq=7; [x,y]=linprog(f,a,b,aeq,beq,zeros(3,1)); x,y=-y %由於之前將求max最優解變形稱為了min,這裡的y要求相反的值
輸出結果:
x=3x1 6.4286 0.5714 0 y=14.5714
-
題目分析
這個題目裡面求的最優解為最小值,因此不需要進行轉換,只需要對約束條件進行轉換即可。在約束條件中,只有線性不等式約束以及決策向量下界向量,沒有線性等式約束。轉換結果如下:
-
程式實現
f=[2;3;1]; %價值向量是列向量 a=[1,4,2;3,2,0]; b=[8;6]; aeq=[]; beq=[]; [x,y]=linprog(f,-a,-b,aeq,beq,zeros(3,1)) %一定要注意這裡的符號
-
特別說明:一定要記住matlab的線性規劃標準函式的形式,標準形式裡面只有小於等於號,如果程式出現大於號一定要進行變換!!!