我有一个整数编程模型,我想用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);
但它仍然给我一个整数解决方案。我该怎么做呢?
答案 0 :(得分:1)
很有可能你的轻松LP也有一个整数的最佳解决方案。一种快速验证方法是添加绑定剪切以强制它采用某些小数值。
修改X1的lb和ub:取0 <= x1 <= 1
并使它(比如说)0.01 <= x1 <= 0.99
然后解决LP。对原始配方中二进制的所有变量执行此操作。
换句话说,让IloNumVarArray
的 ub 和 lb 为小数,如果在最优解中得到小数值,就知道你了已经放松了。
答案 1 :(得分:1)
您无需将二进制变量转换为ILOFLOAT。定义一个新的模型实例,如LPRelax,并使用IloConversion,如下所示:
$.getScript(chrome.extension.getURL('script.js'), function () {
console.log("Script loaded")
});
如果您仍然可以获得完整的解决方案,那么您的问题可能是完整的。我的意思是你的coefficinet具有特殊属性,如TOTALY UNIMODULARITY,以及整体RHS产生一个完整的解决方案。
希望它可以提供帮助: - )。
答案 2 :(得分:0)
也许你的约束系数矩阵A(AX = b)是单模的。