一、整数规划介绍
1.1 整数规划的定义
若规划模型的所有决策变量只能取整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。
1.2 整数规划的分类
整数规划模型大致可分为两类:
(1)变量全限制为整数时,称纯(完全)整数规划。
(2)变量部分限制为整数时,称混合整数规划。
1.3 求解方法分类
- 分支定界法——可求纯或混合整数线性规划。
- 割平面法——可求纯或混合整数线性规划。
- 隐枚举法——求解0-1整数规划
- 过滤隐枚举法
- 分枝隐枚举法
- 匈牙利法——解决指派问题
- 蒙特卡洛法——求解各类规划问题
1.4 整数规划的数学模型
min x f T x \underset{x}{\min}\boldsymbol{f}^T\boldsymbol{x} xminfTx
s
.
t
.
{
x
(
i
n
t
c
o
n
)
A
⋅
x
⩽
b
A
e
q
⋅
x
=
b
e
q
l
b
⩽
x
⩽
u
b
s.t.\left\{ \begin{array}{c} \boldsymbol{x}\left( intcon \right)\\ \boldsymbol{A}\cdot \boldsymbol{x}\leqslant \boldsymbol{b}\\ Aeq\cdot \boldsymbol{x}=beq\\ lb\leqslant \boldsymbol{x}\leqslant ub\\ \end{array} \right.
s.t.⎩
⎨
⎧x(intcon)A⋅x⩽bAeq⋅x=beqlb⩽x⩽ub
式中:
f
\boldsymbol{f}
f,
x
\boldsymbol{x}
x,
b
\boldsymbol{b}
b,beq,lb,ub为列向量;
A
\boldsymbol{A}
A,Aeq为矩阵。
二、案例分析
Matlab求解混合整数线性规划的命令为
[x,fval]=intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)这里是引用
例1:利用matlab求解该整数线性规划模型。
max
z
=
100
x
1
+
60
x
2
\max z=100x_1+60x_2
maxz=100x1+60x2
s
.
t
.
{
5
x
1
+
2
x
2
⩽
270
4
x
1
+
3
x
1
⩽
250
3
x
1
+
4
x
2
⩽
200
x
2
=
4
x
1
x
1
,
x
2
为非负整数
s.t.\left\{ \begin{array}{c} 5x_1+2x_2\leqslant 270\\ 4x_1+3x_1\leqslant 250\\ 3x_1+4x_2\leqslant 200\\ x_2=4x_1\\ x_1,x_2\text{为非负整数}\\ \end{array} \right.
s.t.⎩
⎨
⎧5x1+2x2⩽2704x1+3x1⩽2503x1+4x2⩽200x2=4x1x1,x2为非负整数
MATLAB代码:
clc,clear
f=[-100;-60];
intcon=[1,2];
A=[5,2;4,3;3,4];
b=[270;250;200];
aeq=[-4,1];
beq=0;
lb=[0;0];
ub=[inf;inf];
[x,fval]=intlinprog(f,intcon,A,b,aeq,beq,lb,ub)
disp("x1值:" + x(1))
disp("x2值:" + x(2))
disp("最大值:" + (-fval))
求解结果:
例2:利用matlab求解下列混合整数规划问题。
min
z
=
−
3
x
1
−
2
x
2
−
x
3
\min z=-3x_1-2x_2-x_3
minz=−3x1−2x2−x3
s
.
t
.
{
x
1
+
x
2
+
x
3
⩽
7
4
x
1
+
2
x
2
+
x
3
=
12
x
1
,
x
2
≫
0
x
1
=
0
或
1
s.t.\left\{ \begin{array}{c} x_1+x_2+x_3\leqslant 7\\ 4x_1+2x_2+x_3=12\\ x_1,x_2\gg 0\\ x_1=0\text{或}1\\ \end{array} \right.
s.t.⎩
⎨
⎧x1+x2+x3⩽74x1+2x2+x3=12x1,x2≫0x1=0或1
MATLAB代码:
clc,clear
f=[-3;-2;-1];
intcon=3;%只有第3个变量为整数变量
A=ones(1,3);
b=7;
aeq=[4,2,1];
beq=12;
lb=zeros(3,1);
ub=[inf;inf;1];
[x,fval]=intlinprog(f,intcon,A,b,aeq,beq,lb,ub)
求解结果: