Matlab 整數線性規划問題模型代碼


整數線性規划問題的基本內容

整數線性規划解決的是自變量在一定的線性約束條件下,使得線性目標函數求得最大值或者最小值的問題。其中自變量只能取整數。特別地,當自變量只能取0或者1時,稱之為 0-1 整數規划問題。

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

\[\min z=\mathbf{F}^{T}\mathbf{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}} \\\mathbf{X} \text{取整數} \end{array}\right. \]

其中

\(F\)線性目標函數系數向量

\(\mathbf{X}\) 為決策變量向量

\(\mathbf{A}\) 為線性不等式系數矩陣

\(\mathbf{B}\) 為線性不等式右端常數向量

\(\mathbf{A}_\mathrm{eq}\) 為線性等式系數矩陣

\(\mathbf{B}_\mathrm{eq}\) 為線性等式右端常數向量

\(\mathbf{L B}\) 為決策變量下界向量

\(\mathbf{U B}\) 為決策變量上界向量


Matlab模型代碼

調用形式

[X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = intlinprog(F,intcon,A,B,Aeq,Beq,LB,UB) % 統一形式

輸入變量

  • F為目標函數系數向量
  • intcon為整數變量的地址
  • A 為不等式約束系數矩陣(注意默認不等式方向為小於等於,若為大於等於,需要將其取相反數)
  • B 為不等式右端常數向量(注意默認不等式方向為小於等於,若為大於等於,需要將其取相反數)
  • Aeq 為等式約束系數矩陣
  • Beq 為等式右端常數向量
  • LB 為決策變量下界向量
  • UB為決策變量上界向量

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

輸出變量

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

案例演示

目標函數與約束條件

\[\min z=-3 x_{1}-2 x_{2}-x_{3}$$ $$\text { s. t. }\left\{\begin{array}{l}{x_{1}+x_{2}+x_{3} \leq 7} \\ {4 x_{1}+2 x_{2}+x_{3}=12} \\ {x_{1}, x_{2} \geqslant 0} \\ {x_{3}=0\text{ or }1}\end{array}\right. \]

Matlab程序

clc,clear
f = [-3;-2;-1];
intcon = 3; % 整數變量的地址
A = ones(1,3);
B = 7;
Aeq = [4,2,1];
Beq = 12;
LB = zeros(3,1);
UB = [inf;inf;1]; % 只有x(3)取0或者1
[x,fval]= intlinprog(f,intcon,A,B,Aeq,Beq,LB,UB)

運行結果

x =

         0
    5.5000
    1.0000


fval =

  -12.0000


免責聲明!

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



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