Originally posted by: glebB
Currently doing as follows, using CPXgetsolnpoolnumsolns():
/* Converting the status. */
switch(cplexStatus) {
case CPXMIP_OPTIMAL:
s = Status::OPT;
wrap_assert(CPXgetsolnpoolnumsolns(env, lp), "Optimality reported but pool empty?", false);
break;
case CPXMIP_INFEASIBLE:
s = Status::UNSAT;
break;
// case CPXMIP_OPTIMAL_INFEAS:
case CPXMIP_INForUNBD:
s = Status::UNSATorUNBND;
break;
case CPXMIP_SOL_LIM:
case CPXMIP_NODE_LIM_FEAS:
case CPXMIP_TIME_LIM_FEAS:
case CPXMIP_FAIL_FEAS:
case CPXMIP_MEM_LIM_FEAS:
case CPXMIP_ABORT_FEAS:
case CPXMIP_FAIL_FEAS_NO_TREE:
s = Status::SAT;
wrap_assert(CPXgetsolnpoolnumsolns(env, lp), "Feasibility reported but pool empty?", false);
break;
case CPXMIP_UNBOUNDED:
s = Status::UNBND;
break;
// case CPXMIP_ABORT_INFEAS:
case CPXMIP_FAIL_INFEAS:
s = Status::ERROR;
break;
default:
// case CPXMIP_OPTIMAL_TOL:
// case CPXMIP_ABORT_RELAXATION_UNBOUNDED:
if (CPXgetsolnpoolnumsolns (env, lp))
s = Status::SAT;
else
s = Status::UNKNOWN;
}
Another question, is there any primal bound? Sometimes it is possible to obtain such a bound even without having any primal solution.
#CPLEXOptimizers#DecisionOptimization