✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
本文目录
- 什么是线性整数规划问题
- 如何使用 MATLAB 解决线性整数规划问题
- 附加题
什么是线性整数规划问题
整数规划问题是指在一组线性不等式约束条件下,求解一个线性目标函数的最大值或最小值的问题,且目标函数和约束条件中的变量含有整数。
如何使用 MATLAB 解决线性整数规划问题
常见的线性整数规划问题通常类似于以下形式:
min
Z
=
8
x
1
+
x
2
\begin{equation} \min \quad Z=8 x_{1} + x_{2} \end{equation}
minZ=8x1+x2
s.t.
{
x
2
is an integer
x
1
+
2
x
2
≥
−
14
−
4
x
1
−
x
2
≤
−
33
2
x
1
+
x
2
≤
20
\begin{equation} \text { s.t. } \left\{ \begin{array}{c} x_{2} \text{ is an integer} \\ x_{1}+2x_{2} \geq -14 \\ -4x_{1}-x_{2} \leq -33 \\ 2x_{1}+x_{2} \leq 20 \end{array} \right. \end{equation}
s.t. ⎩
⎨
⎧x2 is an integerx1+2x2≥−14−4x1−x2≤−332x1+x2≤20
其中,公式1为目标函数,公式2为约束条件。
为了便于求解,我们可以将公式1和公式2分别写成矩阵形式:
min
Z
=
[
8
1
]
⋅
[
x
1
x
2
]
\begin{equation} \min \quad Z=\begin{bmatrix} 8 & 1 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \end{bmatrix} \end{equation}
minZ=[81]⋅[x1x2]
s.t.
{
x
2
is an integer
[
−
1
−
2
−
4
−
1
2
1
]
⋅
[
x
1
x
2
]
≤
[
14
−
33
20
]
\begin{equation} \text { s.t. } \left\{ \begin{array}{c} x_{2} \text{ is an integer} \\ \begin{bmatrix} -1 & -2 \\ -4 & -1 \\ 2 & 1 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \end{bmatrix} \leq \begin{bmatrix} 14 \\ -33 \\ 20 \end{bmatrix} \end{array} \right. \end{equation}
s.t. ⎩
⎨
⎧x2 is an integer
−1−42−2−11
⋅[x1x2]≤
14−3320
这种形式便是 MATLAB 的线性整数规划的标准形式:
min x f T x subject to { x(intcon) are integers A ⋅ x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b . \min _{x} f^{T} x \text { subject to } \left\{ \begin{array}{c} \text {x(intcon) are integers} \\ A \cdot x \leq b \\ { Aeq } \cdot x={ beq } \\ l b \leq x \leq u b. \end{array} \right. xminfTx subject to ⎩ ⎨ ⎧x(intcon) are integersA⋅x≤bAeq⋅x=beqlb≤x≤ub.
可以调用 intlinprog
函数来求解,其语法为:
[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
其中,f
为目标函数,intcon
为整数变量的下标,A
为约束条件的系数矩阵,b
为约束条件的右端项,Aeq
为等式约束条件的系数矩阵,beq
为等式约束条件的右端项,lb
为变量的下界,ub
为变量的上界。
本题便可使用如下代码求解:
f = [8 1];
intcon = 2;
A = [-1 -2; -4 -1; 2 1];
b = [14; -33; 20];
[x,fval] = intlinprog(f,intcon,A,b);
结果为:
x =
6.5000
7.0000
fval =
59.0000
附加题
让我们运用上文的方法求解以下问题:
min
Z
=
2
x
1
+
3
x
2
+
4
x
3
\begin{equation} \min \quad Z=2 x_{1}+3 x_{2}+4 x_{3} \end{equation}
minZ=2x1+3x2+4x3
s.t.
{
x
2
is an integer
x
3
is an integer
x
1
+
2
x
2
+
3
x
3
≥
1
−
x
1
−
x
2
−
x
3
≤
−
1
2
x
1
+
x
2
+
x
3
≤
2
\begin{equation} \text { s.t. } \left\{ \begin{array}{c} x_{2} \text{ is an integer} \\ x_{3} \text{ is an integer} \\ x_{1}+2x_{2}+3x_{3} \geq 1 \\ -x_{1}-x_{2}-x_{3} \leq -1 \\ 2x_{1}+x_{2}+x_{3} \leq 2 \end{array} \right. \end{equation}
s.t. ⎩
⎨
⎧x2 is an integerx3 is an integerx1+2x2+3x3≥1−x1−x2−x3≤−12x1+x2+x3≤2
首先转化为标准形式:
min
Z
=
[
2
3
4
]
⋅
[
x
1
x
2
x
3
]
\begin{equation} \min \quad Z=\begin{bmatrix} 2 & 3 & 4 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \end{bmatrix} \end{equation}
minZ=[234]⋅
x1x2x3
s.t.
{
x
2
is an integer
x
3
is an integer
[
−
1
−
2
−
3
−
1
−
1
−
1
2
1
1
]
⋅
[
x
1
x
2
x
3
]
≤
[
−
1
−
1
2
]
\begin{equation} \text { s.t. } \left\{ \begin{array}{c} x_{2} \text{ is an integer} \\ x_{3} \text{ is an integer} \\ \begin{bmatrix} -1 & -2 & -3 \\ -1 & -1 & -1 \\ 2 & 1 & 1 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \end{bmatrix} \leq \begin{bmatrix} -1 \\ -1 \\ 2 \end{bmatrix} \end{array} \right. \end{equation}
s.t. ⎩
⎨
⎧x2 is an integerx3 is an integer
−1−12−2−11−3−11
⋅
x1x2x3
≤
−1−12
然后使用 intlinprog
函数求解:
f = [2 3 4];
intcon = [2 3];
A = [-1 -2 -3; -1 -1 -1; 2 1 1];
b = [-1; -1; 2];
[x,fval] = intlinprog(f,intcon,A,b);
最终结果:
x =
1.0000
0
0
fval =
2.0000