線性規劃問題的例項與定義
某機床廠生產甲、乙兩種機床,每臺銷售後的利潤分別為 4000 元與 3000 元。 生產甲機床需用 A、 B機器加工,加工時間分別為每臺 2 小時和 1 小時;生產乙機床需用A 、B、C三種機器加工,加工時間為每臺各一小時。若每天可用於加工的機器時 數分別為 A機器 10 小時、B 機器 8 小時和C 機器 7 小時。問該廠應生產甲、乙機床各幾臺,才能使總利潤最大?
上述問題的數學模型:設該廠生產x1臺甲機床和x2乙機床時總利潤z最大,則 x1,x2應滿足
\[\max z=4000x_1+3000x_2\\
s.t.=
\begin{cases}
2x_1+x_2\le10,\\
x_1+x_2\le8,\\
x_2\le7,\\
x_1,x_2\ge0.
\end{cases}
\]
其中:變數x1,x2稱為決策變數。max表示式稱為問題的目標函式,下面的不等式是問題的約束條件,記為s.t.(即subject to)。由於上面的目標函式及約束條件均為線性函式,故稱為線性規劃問題。
總之,線性規劃問題是在一組線性約束條件的限制下,求一線性目標函式最大或最小的問題。
線性規劃的Matlab標準形式及軟體求解
線性規劃的目標函式可以是求最大值也可以是求最小值,約束條件的不等號可以是小於等於也可以是大於等於。為了避免這種形式多樣性帶來的不便,Matc lab中規定線性規劃的標準形式為
\[\min f^Tx\\
s.t.=\begin{cases}
A\sdot x\le b,\\
Aeq\sdot x=beq,\\
lb\le x\le ub.\\
\end{cases}
\]
其中:f,x,b,beq,lb,ub為列向量,A,Aeq為矩陣。
呼叫形式
[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub) %求最小值
[x,fval]=linprog(-f,A,b,Aeq,beq,lb,ub)%求最大值
輸入變數
- f為目標函式中的價值係數向量(注意如果要去求最大值,則全部加負號求最小值)
- A為不等式約束係數矩陣
- b為不等式右端常數向量
- Aeq為等式約束係數矩陣
- beq為等式右端常數向量
- lb 為決策變數下界向量
- ub為決策變數上界向量
在呼叫時,輸入引數不存在時,可以將其輸入用[]
空矩陣表示
輸出變數
- x為最優解
- fval為最優目標值
具體例項
- 目標函式與約束條件
\[\max z=2x_1+3x_2-5x_3\\
s.t.=\begin{cases}x_1+x_2+x_3=7,\\2x_1-5x_2+x_3\ge10,\\x_1+3x_2+x_3\le12,\\x_1,x_2,x_3\ge0.
\end{cases}
\]
- Matlab程式
f=[2;3;-5];
A=[1,1,1];
b=7;
A=[-2,5,-1;1,3,1];
b=[-10;12];
Aeq=[1,1,1];
beq=7;
lb=zeros(3,1);%建立一個3X1的零矩陣 lb=[0,0,0]也可以
[x,y]=linprog(-f,A,b,Aeq,beq,lb,[]);
x,y=-y
- 執行結果
Optimal solution found.
x =
6.4286
0.5714
0
y =
14.5714