Matlab解決線性規划問題


線性規划問題的實例與定義

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM