首页 > 解决方案 > 如何将整数切割添加到 MILP 约束以找到替代的最佳解决方案?

问题描述

我正在用 MATLAB 中的二进制变量解决 MILP 优化问题,我想通过排除以前的解决方案来找到多个最佳解决方案。因此,我知道我必须在我的模型中包含以下整数切割作为约束:

总和 {y_j : y'_j = 1} + 总和 {(1-y_j) : y'_j = 0} <= M - 1

其中,y_j 是我的二进制变量向量。M 是二进制变量的总数(j 循环从 1 到 M),y'_j 是我的二进制变量在先前解决方案中的值。

在 MILP 框架中,通过以下形式的矩阵 A 包含约束:A* x <= b,其中 x 是二进制变量的向量,b 是已知系数的 RHS。

然后,我的问题是我无法将上述约束“翻译”成这种 MILP 格式。

非常感谢您的帮助,

乔治

标签: matlabmathematical-optimizationalgebramixed-integer-programming

解决方案


  1. 创建一个全为零的行
  2. 如果 y*[j]=1(y[j] 的最优值)则在 y[j] 对应的列中放一个 1.0
  3. 如果 y*[j]=0,则在对应列中填入 -1.0
  4. 将 rhs 设置为 y*[j]=1 的数量减一。

推荐阅读