为什么我只得到LP的整数解
Why do I only get integer solutions to my LP?
我有一个整数规划模型,我想用CPLEX求解它的线性松弛。最初,我将变量定义为:
BoolVarMatrix X(env,I);
for(IloInt i = 0; i < I; i++){
X[i] = IloBoolVarArray(env, J);
}
IloBoolVarArray y(env,J);
但现在我应该将它们放松到0<=x<=1
、0<=Y<=1
的范围。为了做到这一点,我将定义更改为:
NumVarMatrix X(env,I, 0, 1);
for(IloInt i = 0; i < I; i++){
X[i] = IloNumVarArray(env, J, 0, 1);
}
IloNumVarArray y(env,J, 0, 1);
但它仍然给了我一个整数解。我该怎么办?
很可能您的松弛LP也有一个整数的最优解。验证这一点的一种快速方法是添加绑定剪切,迫使其采用一些分数值。
修改X1的lb和ub:取0 <= x1 <= 1
,使其成为(比如)0.01 <= x1 <= 0.99
,现在求解LP。对原始公式中的所有二进制变量执行此操作。
换句话说,使IloNumVarArray
的ub和lb是分数的,如果你在最优解中得到分数值,你就知道你做了正确的松弛。
您不需要将二进制变量转换为ILOFLOAT。定义一个新的模型实例,如LPRelax,并使用IloConversion如下:
IloModel LpRelax(env);
LpRelax.add(model);
LpRelax.add(IloConversion(env, vars, ILOFLOAT));
IloCplex cplex(env);
cplex.extract(LpRelax);
cplex.solve();
如果你仍然得到积分解,那么你的问题可能是积分。我的意思是,你的系数网有特殊的性质,比如TOTALY UNIMODULARITY,和积分RHS一起产生积分解。
希望它能有所帮助:-)。
也许约束系数矩阵A(AX=b)是单模的。
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 内联程序集printf将整数解释为地址
- 是否基于数组B整数打印数组A中的整数
- 为什么我只得到LP的整数解