5.2.1. 混合整数线性规划建模¶
混合整数线性规划(Mixed Integer Linear Program,MILP)问题可以用以下数学形式表示:
\[\begin{split}\begin{matrix}
\min &-c^f &+& c^Tx \\
\mbox{s.t.} &l^r &\leq& Ax &\leq& u^r, \\
& l^c &\leq &x &\leq &u^c, \\
& & 部分 & x_k \in \mathbb{Z}
\end{matrix}\end{split}\]
- 其中
\(x \in \mathbb{R}^{n}\) 是决策变量,
\(l^c \in \mathbb{R}^{n}\) 和 \(u^c \in \mathbb{R}^{n}\) 分别为 \(x\) 的下界和上界,
\(c^f \in \mathbb{R}\) 是目标函数中的常量,
\(c \in \mathbb{R}^{n}\) 是目标函数中的系数向量,
\(A \in \mathbb{R}^{m \times n}\) 是约束矩阵,
\(l^r \in \mathbb{R}^{m}\) 和 \(u^r \in \mathbb{R}^{m}\) 分别为是约束的下界和上界,
\(部分 x_k \in \mathbb{Z}\) 是指 \(x\) 变量中部分元素为整数的约束。
使用 MindOpt 的步骤为:
创建优化模型;
输入优化问题并设置算法参数;
求解优化问题并获取解。
Note
MindOpt 仅存储约束矩阵 \(A\) 中的 非零元;因此,在建模时只需要输入 非零元 在约束矩阵中的 行列位置 (row/column index) 以及对应的 非零数值 (nonzero value)。
5.2.1.1. 混合整数线性规划问题示例¶
在下文中,我们将考虑下列混合整数线性规划问题:
\[\begin{split}\begin{matrix} \min & 1 x_0 & + & 2 x_1 & + & 1 x_2 & + & 1 x_3 \\
\mbox{s.t.} & 1 x_0 & + & 1 x_1 & + & 2 x_2 & + & 3 x_3 & \geq & 1 \\
& 1 x_0 & & & - & 1 x_2 & + & 6 x_3 & = & 1
\end{matrix}\end{split}\]
\[\begin{split}\begin{matrix} 0 & \leq & x_0 & \leq & 10 \\
0 & \leq & x_1 & \leq & \infty \\
0 & \leq & x_2 & \leq & \infty \\
0 & \leq & x_3 & \leq & \infty \\
& & x_0、x_1、x_2 \in \mathbb{Z}
\end{matrix}\end{split}\]
我们将展示如何使用 MindOpt 建模和求解这个优化问题。混合整数线性规划与线性规划的区别在于,添加变量时将属性设为整数或者0-1二进制。
我们将分别给出不同编程语言下的示例,来展示如何使用 MindOpt 建模和求解这个优化问题。