int main (void) { IloEnv env; int retval = -1; try { // Create the model. IloModel model(env); IloCplex cplex(env); IloObjective obj(env); IloNumVarArray vars(env); IloRangeArray rngs(env); IloIntArray cone(env); createmodel(model, obj, vars, rngs, cone); // Extract model. cplex.extract(model); // Solve the problem. If we cannot find an _optimal_ solution then // there is no point in checking the KKT conditions and we throw an // exception. cplex.setParam(IloCplex::Param::Barrier::QCPConvergeTol, CONVTOL); if ( !cplex.solve() || cplex.getStatus() != IloAlgorithm::Optimal ) throw string("Failed to solve problem to optimality"); // Test the KKT conditions on the solution. if ( !checkkkt (cplex, obj, vars, rngs, cone, TESTTOL) ) { env.error() << "Testing of KKT conditions failed." << endl; } else { env.out() << "Solution status: " << cplex.getStatus() << endl; env.out() << "KKT conditions are satisfied." << endl; retval = 0; } env.end(); } catch (IloException &e) { cerr << "IloException: " << e << endl; if (env.getImpl()) env.end(); ::abort(); } catch (string& e) { cerr << e << endl; if (env.getImpl()) env.end(); ::abort(); } return retval; }
int main (void) { CPXENVptr env; CPXLPptr lp = NULL; int *cone = NULL; int status; CPXCHANNELptr resc, warnc, errc, logc; int retval = -1; /* Initialize CPLEX and get a reference to the output channels. * If any of this fails immediately terminate the program. */ env = CPXopenCPLEX (&status); if ( env == NULL || status != 0 ) abort (); status = CPXgetchannels (env, &resc, &warnc, &errc, &logc); if ( status != 0 ) abort (); /* CPLEX is fully setup. Enable output. */ status = CPXsetintparam (env, CPXPARAM_ScreenOutput, CPX_ON); if ( status != 0 ) goto TERMINATE; /* Create model. */ lp = CPXcreateprob (env, &status, "xsocpex1"); if ( lp == NULL || status != 0 ) goto TERMINATE; if ( !createmodel (env, lp, &cone) ) goto TERMINATE; /* Solve the problem to optimality. */ CPXmsg (logc, "Optimizing ...\n"); status = CPXsetdblparam (env, CPXPARAM_Barrier_QCPConvergeTol, CONVTOL); if ( status != 0 ) goto TERMINATE; if ( (status = CPXhybbaropt (env, lp, CPX_ALG_NONE)) != 0 ) goto TERMINATE; if ( CPXgetstat (env, lp) != CPX_STAT_OPTIMAL ) { CPXmsg (errc, "Cannot test KKT conditions on non-optimal solution.\n"); goto TERMINATE; } /* Now test KKT conditions on the result. */ if ( !checkkkt (env, lp, cone, TESTTOL) ) { CPXmsg (logc, "Testing of KKT conditions failed.\n"); CPXmsg (errc, "Testing of KKT conditions failed.\n"); goto TERMINATE; } CPXmsg (resc, "KKT conditions are satisfied.\n"); retval = 0; TERMINATE: free (cone); if ( lp != NULL ) CPXfreeprob (env, &lp); CPXcloseCPLEX (&env); return retval; }