matlab - 如何将整数切割添加到 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 格式。
非常感谢您的帮助,
乔治
解决方案
- 创建一个全为零的行
- 如果 y*[j]=1(y[j] 的最优值)则在 y[j] 对应的列中放一个 1.0
- 如果 y*[j]=0,则在对应列中填入 -1.0
- 将 rhs 设置为 y*[j]=1 的数量减一。
推荐阅读
- c# - 如何修复 Selenium 中的“无法滚动到视图中”错误?
- ubuntu - Lubuntu 上没有显示网络接口
- c# - 使用 C# Windows 窗体在 Visual Studio 中创建新页面
- reactjs - 为什么 create-react-app 需要 root 帐户来创建项目
- c++ - 为什么 g++ 会生成巨大的错误日志?
- ios - 如何在 IOS 12 中用新收到的通知(包含相同的通知 ID)替换推送通知
- java - 当我尝试通过广播连接到互联网时,应用程序停止工作
- java - Butterknife 中的 @OnClick 方法使用 java.lang.BootstrapMethodError 使应用程序崩溃
- linux - 无法在 Red Hat 中安装 openJDK 8
- docker - docker build with jenkins 问题