Matlab解決線性規劃問題

Theoyu²發表於2020-06-26

線性規劃問題的例項與定義

某機床廠生產甲、乙兩種機床,每臺銷售後的利潤分別為 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

相關文章