Matlab 線性規划問題模型代碼


線性規划問題的基本內容

線性規划解決的是自變量在一定的線性約束條件下,使得線性目標函數求得最大值或者最小值的問題。

\[\min z=\sum_{j=1}^{n} f_{j} x_{j} \]

\[\text { s.t. }\left\{\begin{array}{ll}{\sum_{j=1}^{n} a_{i j} x_{j} \leqslant b_{i}} & {(i=1,2, \cdots, m)} \\ {\sum_{j=1}^{n} a_{k j}^{\mathrm{eq}} x_{j} \leqslant b_{k}^{\mathrm{eq}}} & {(k=1,2, \cdots, h)} \\ {\mathrm{lb}_{j} \leqslant x_{j} \leqslant \mathrm{ub}_{j}} & {(j=1,2, \cdots, n)}\end{array}\right. \]

其中

價值系數向量為

\[\mathbf{F}=\left(f_{1}, f_{2}, \cdots, f_{n}\right)^{\mathrm{T}} \]

決策變量向量為

\[\mathbf{X}=\left(x_{1}, x_{2}, \cdots, x_{n}\right)^{\mathrm{T}} \]

不等式約束系數矩陣為

\[\mathbf{A}=\left(\begin{array}{ccc}{a_{11}} & {\cdots} & {a_{1 n}} \\ {\vdots} & {\ddots} & {\vdots} \\ {a_{m 1}} & {\cdots} & {a_{m n}}\end{array}\right) \]

不等式右端常數向量為

\[\mathbf{B}=\left(b_{1}, b_{2}, \cdots, b_{n}\right)^{\mathrm{T}} \]

等式約束系數矩陣為

\[\mathbf{A}_{eq} = \left(\begin{array}{ccc}{a_{11}^{\mathrm{cq}}} & {\cdots} & {a_{1 n}^{\mathrm{cq}}} \\ {\vdots} & {\ddots} & {\vdots} \\ {a_{\mathrm{h1}}^{\mathrm{eq}}} & {\cdots} & {a_{\mathrm{hn}}^{\mathrm{eq}}}\end{array}\right) \]

等式右端常數向量為

\[\mathbf{B}_{\mathrm{eq}}=\left(b_{1}^{\mathrm{eq}}, b_{2}^{\mathrm{eq}}, \cdots, b_{\mathrm{h}}^{\mathrm{eq}}\right)^{\mathrm{T}} \]

決策變量下界向量為

\[\mathbf{L B}=\left(\mathrm{lb}_{1}, \mathrm{lb}_{2}, \cdots, \mathrm{lb}_{n}\right)^{\mathrm{T}} \]

決策變量上界變量為

\[\mathbf{UB}=\left(\mathrm{ub}_{1}, \mathrm{ub}_{2}, \cdots, \mathrm{ub}_{n}\right)^{\mathrm{T}} \]

當目標函數為最小值時,上述問題可以寫成如下形式:

\[\min z=\boldsymbol{F}^{\mathrm{T}} \boldsymbol{X} \]

\[\text { s.t. }\left\{\begin{array}{l}{\mathbf{A}\mathbf{X} \leqslant \mathbf{B}} \\ {\mathbf{A}_{\mathrm{eq}} \mathbf{X}=\mathbf{B}_{\mathrm{eq}}} \\ {\mathbf{LB} \leqslant \mathbf{X} \leqslant \mathbf{UB}}\end{array}\right. \]

當目標函數為最大值時,上述問題可以寫成如下形式:

\[\max z=\boldsymbol{-F}^{\mathrm{T}} \boldsymbol{X} \]

\[\text { s.t. }\left\{\begin{array}{l}{\mathbf{A}\mathbf{X} \leqslant \mathbf{B}} \\ {\mathbf{A}_{\mathrm{eq}} \mathbf{X}=\mathbf{B}_{\mathrm{eq}}} \\ {\mathbf{LB} \leqslant \mathbf{X} \leqslant \mathbf{UB}}\end{array}\right. \]


Matlab模型代碼

調用形式

    [X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = linprog(F,A,B,Aeq,Beq,LB,UB) % 目標函數為最小值
    [X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = linprog(-F,A,B,Aeq,Beq,LB,UB) % 目標函數為最大值

輸入變量

  • F 為目標函數中的價值系數向量

  • A 為不等式約束系數矩陣(注意默認不等式方向為小於等於,若為大於等於,需要將其取相反數)

  • B 為不等式右端常數向量(注意默認不等式方向為小於等於,若為大於等於,需要將其取相反數)

  • Aeq 為等式約束系數矩陣

  • Beq 為等式右端常數向量

  • LB 為決策變量下界向量

  • UB為決策變量上界向量

在調用時,輸入參數不存在時,可以將其輸入用 [] 空矩陣表示。

輸出變量

  • X 為最優解
  • FVAL 為最優目標值
  • EXITFLAG 為運行結束標志,當等於1時,表示程序收斂於解 X;當等於0時,表示程序運行次數到達最大;當小於0時,說明情況較多
  • OUTPUT 為程序迭代次數
  • LAMBDA 為解X相關的Largrange乘子和影子價格

案例演示

目標函數與約束條件

\[\min z=2 x_{1}+3 x_{2}+x_{3} \]

\[\left\{\begin{array}{l}{x_{1}+4 x_{2}+2 x_{3} \geq 8} \\ {3 x_{1}+2 x_{2} \geq 6} \\ {x_{1}, x_{2}, x_{3} \geq 0}\end{array}\right. \]

Matlab程序

F= [2;3;1];
A = [1,4,2;3,2,0];
B = [8;6];
LB = zeros(3,1);
[X,FVAL] = linprog(F,-A,-B,[],[],LB,[])

運行結果

Optimization terminated.

X =

    0.8066
    1.7900
    0.0166


FVAL =

    7.0000


免責聲明!

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



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