1

我有一个整数规划模型,我想用 CPLEX 解决它的线性松弛问题。最初,我将变量定义为:

BoolVarMatrix X(env,I);
for(IloInt i = 0; i < I; i++){
  X[i] = IloBoolVarArray(env, J);
}

IloBoolVarArray y(env,J);

但现在我应该将它们放宽到 , 的范围0<=x<=10<=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);

但它仍然给了我一个整数解决方案。我应该怎么做呢?

4

3 回答 3

1

您的宽松 LP 很可能也有一个整数的最优解。验证这一点的一种快速方法是添加绑定切割以强制它采用一些小数值。

修改 X1 的 lb 和 ub: Take 0 <= x1 <= 1and make it (say)0.01 <= x1 <= 0.99现在求解 LP。对原始公式中的所有二元变量执行此操作。

换句话说,将ublb设为小数,如果您在最优解中IloNumVarArray得到小数值,您就知道您已经正确地进行了松弛。

于 2012-03-04T07:04:21.340 回答
1

您不需要将二进制变量转换为 ILOFLOAT。定义一个新的模型实例,如 LPRelax,并使用 IloConversion,如下所示:

IloModel LpRelax(env); 
LpRelax.add(model); 
LpRelax.add(IloConversion(env, vars, ILOFLOAT));

IloCplex cplex(env); 
cplex.extract(LpRelax); 
cplex.solve();

如果您仍然得到积分解决方案,那么您的问题可能是积分问题。我的意思是您的 coefficinet 具有特殊属性,例如完全单模性,与积分 RHS 一起产生积分解决方案。

希望它可以帮助:-)。

于 2016-11-27T23:06:44.780 回答
0

也许您的约束系数矩阵 A (AX=b) 是单模的。

于 2012-08-06T05:38:57.067 回答