C++ 为什么我只得到LP的整数解?

C++ 为什么我只得到LP的整数解?,c++,integer,boolean,cplex,C++,Integer,Boolean,Cplex,我有一个整数规划模型,我想用CPLEX解决它的线性松弛问题。最初,我将变量定义为: BoolVarMatrix X(env,I); for(IloInt i = 0; i < I; i++){ X[i] = IloBoolVarArray(env, J); } IloBoolVarArray y(env,J); BoolVarMatrix X(env,I); 对于(IloInt i=0;i

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

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

IloBoolVarArray y(env,J);
BoolVarMatrix X(env,I);
对于(IloInt i=0;i

但是现在我应该把它们放松到
0的范围,很可能你放松的LP也有一个整数的最优解。验证这一点的一种快速方法是添加绑定剪切,以强制它假定一些分数值


修改X1的lb和ub:Take
0也许约束系数矩阵A(AX=b)是单模的。

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

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

IloCplex cplex(env); 
cplex.extract(LpRelax); 
cplex.solve();
如果你仍然得到积分解,你的问题可能是积分。我的意思是,你们的系数网有特殊的性质,比如完全的单模性,和积分RHS一起产生一个积分解

希望能有所帮助:-)

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

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