
整數線性規划問題的基本內容
整數線性規划解決的是自變量在一定的線性約束條件下,使得線性目標函數求得最大值或者最小值的問題。其中自變量只能取整數。特別地,當自變量只能取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
