Originally posted by: nikextens
Hello everyone,
I am trying to identify redundant constraints in my LP. According to CPLEX manual (c++ concert) 'basicPresolve' is capable of doing that. Unfortunately the results which I get seem wrong. For debugging I created a little LP (see below); the function returns only zeros which means that none of the constraints is redundant. Does anyone have experience with using 'basicPresolve'? I attached my c++ code below. Any help is appreciated!
min 2x + 5y
x>=0
y>=0
x+y >=5
x+y>=3
x+y>=10000
IloEnv my_env = IloEnv();
IloModel my_model(my_env);
IloCplex my_cplex(my_env);
IloNumVarArray my_optvar = IloNumVarArray(my_env, 2, 0, IloInfinity);
IloRangeArray range_array;
range_array = IloRangeArray(my_env);
IloBoolArray redundant;
redundant = IloBoolArray(my_env);
IloNumVarArray vars;
vars = IloNumVarArray(my_env);
IloNumArray redlb;
IloNumArray redub;
redlb = IloNumArray(my_env);
redub = IloNumArray(my_env);
my_model.add(IloMinimize(my_env, 2*my_optvar[0] + 5*my_optvar[1]));
my_model.add(my_optvar[0] >= 0);
my_model.add(my_optvar[1] >= 0);
IloRange range1(my_env,0, my_optvar[0] + my_optvar[1] - 5,IloInfinity);
my_model.add(range1);
range_array.add(range1);
IloRange range2(my_env,0, my_optvar[0] + my_optvar[1] - 3,IloInfinity);
my_model.add(range2);
range_array.add(range2);
IloRange range3(my_env,0, my_optvar[0] + my_optvar[1] - 10000,IloInfinity);
my_model.add(range3);
range_array.add(range3);
vars.add(my_optvar[0]);
vars.add(my_optvar[1]);
my_cplex.basicPresolve(vars,redlb,redub,range_array,redundant);
for (unsigned iter = 0; iter < redundant.getSize(); iter++)
{ cout << "iter "<< iter<< ": "<< redundant[iter]<< endl;
}
#CPLEXOptimizers#DecisionOptimization