線性規劃問題
在一組線性限制條件下的限制下,求一線性目标函數最大或最小的問題。
線性規劃标準型
-
數學标準型:
可行解:滿足限制條件的解矩陣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的線性規劃标準函數的形式,标準形式裡面隻有小于等于号,如果程式出現大于号一定要進行變換!!!