5.6.1. 混合整数二次约束规划建模

混合整数二次约束规划(Mixed Integer Quadratically Constrainted Program,MIQCP)问题可以用以下数学形式表示:

\[\begin{split}\begin{matrix} \min & & \frac{1}{2}x^T Q_0 x &+& c^Tx &-& c^f \\ \mbox{s.t.} & & \frac{1} {2} x ^ T Q_i x & +&a_i ^\top x & \leq &u_i ^ r, & \quad i = 1, 2, \cdots, m \\ &&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}\) 是目标函数中线性项的系数向量,

  • \(Q_0 \in \mathbb{R}^{n\times n}\) 是目标函数中二次项的系数矩阵,

  • \(\{a_i \in \mathbb{R}^{n}\mid i=1,2,\cdots,m\}\) 是约束中线性项的系数向量,

  • \(\{Q_i \in \mathbb{R}^{n\times n}\mid i=1,2,\cdots,m\}\) 是约束中二次项的系数矩阵,

  • \(u^r \in \mathbb{R}^{m}\) 是约束的上界,

  • \(部分 x_k \in \mathbb{Z}\) 是指 \(x\) 变量中部分元素为整数的约束。

备注

目前 MindOpt 支持求解 的混合整数二次约束规划问题。具体来说:

  • 目标函数中的二次项矩阵 \(Q_0\) 必须是 半正定 的。

  • 每一个二次约束都必须定义一个 凸可行域MindOpt 会在以下几种情况中自动识别其凸性:

    1. 对于形式为 \(x^\top Q_i x + a_i^\top x \leq u_i^r\) 的约束,其矩阵 \(Q_i\) 必须是 半正定 的。

    2. 对于形式为 \(x^\top Q_i x + a_i^\top x \geq l_i^r\) 的约束,其矩阵 \(Q_i\) 必须是 半负定 的。

    3. 对于形式为 \(x^\top Q_i x + a_i^\top x \leq y^2\) 的约束,其矩阵 \(Q_i\) 必须是 半正定 的,并且 y 必须是非负变量(当 \(Q_i = I\) 为单位矩阵时,约束类型为二阶锥约束)。

    4. 对于形式为 \(x^\top Q_i x + a_i^\top x \leq yz\) 的约束,其矩阵 \(Q_i\) 必须是 半正定 的,并且 y 和 z 必须都是非负变量(当 \(Q_i = I\) 为单位矩阵时,约束类型为旋转二阶锥约束)。

使用 MindOpt 的步骤为:

  1. 创建优化模型;

  2. 输入优化问题并设置算法参数;

  3. 求解优化问题并获取解。

备注

MindOpt 仅存储中的问题系数中的 非零元;因此,使用时只需要输入 非零元 在约束矩阵中的 行列位置 (row/column index) 以及对应的 非零数值 (nonzero value)

5.6.1.1. MIQCP题示例

在下文中,我们将考虑两个混合整数二次目标(约束)规划问题:

5.6.1.1.1. MIQCP示例1

\[\begin{split}\begin{matrix} \min & & 1 x_0 & + & 1 x_1 & + & 1 x_2 & + & 1 x_3 \\ & + & \frac{1}{2}x_0^2 & + & \frac{1}{2}x_1^2 & + & \frac{1}{2} x_2^2 & + & \frac{1}{2} x_3^2 & + & \frac{1}{2} x_0 x_1 \\ \mbox{s.t.} & & 1 x_0 & + & 1 x_1 & + & 2 x_2 & + & 3 x_3 \\ & - & \frac{1}{2}x_0^2 & - & \frac{1}{2}x_1^2 & - & \frac{1}{2} x_2^2 & - & \frac{1}{2} x_3^2 & - & \frac{1}{2} x_0 x_1 & \geq & 1 \\ & & 1 x_0 & & & - & 1 x_2 & + & 6 x_3 & + & \frac{1}{2} x_1^2 & \leq & 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 \in \mathbb{Z} \end{matrix}\end{split}\]

5.6.1.1.2. MIQCP示例2

\[\begin{split}\begin{matrix} \min & 1 x_0 & + & 2 x_1 & + & 1 x_2 & + & 1 x_3 & + & 0.5 x_4 & \\ \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 \\ & & & 1 x_1^2 & + & 1 x_2^2 & & & - & 1 x_4^2 & \leq & 0 \\ \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 \\ 0 & \leq & x_4 & \leq & \infty \\ & & x_0、x_1、x_2 \in \mathbb{Z} \end{matrix}\end{split}\]

我们将展示如何使用 MindOpt 建模和求解这个优化问题。 对于目标函数与二次约束中的二次项系数矩阵 \(Q_0\)\(\{Q_i \mid i=1,2,\cdots,m\}\) ,为了保证对称性,用户只需输入其下三角的部分。

我们将分别给出不同编程语言下的示例,来展示如何使用 MindOpt 建模和求解这个优化问题。