SolutionILP solveILP(const ILPModel& m, bool verbose, double gap, double timeLimit, int numberOfThreads, int) { IloEnv env; SolutionILP solution; try { IloModel model(env); IloObjective obj(env); IloNumVarArray var(env); IloRangeArray con(env); generateProblem(m, model, var, con); IloCplex cplex(model); cplex.setParam(IloCplex::Threads, numberOfThreads); if (!verbose) cplex.setOut(env.getNullStream()); if (gap != 0.0) cplex.setParam(IloCplex::EpGap, gap); if (timeLimit != 0.0) cplex.setParam(IloCplex::TiLim, timeLimit); cplex.solve(); switch (cplex.getStatus()) { case IloAlgorithm::Optimal: solution.status = ILP_OPTIMAL; break; case IloAlgorithm::Feasible: solution.status = ILP_FEASIBLE; break; case IloAlgorithm::Infeasible: solution.status = ILP_INFEASIBLE; break; case IloAlgorithm::Unbounded: solution.status = ILP_UNBOUNDED; break; default: solution.status = ILP_UNKNOWN; } if (solution.status == ILP_OPTIMAL || solution.status == ILP_FEASIBLE) { IloNumArray sol(env); cplex.getValues(sol, var); solution.criterion = cplex.getObjValue(); for (long v = 0; v < sol.getSize(); ++v) solution.solution.push_back(sol[v]); } solution.bound = cplex.getBestObjValue(); // Can throw IloException! env.end(); } catch (IloException& e) { env.end(); throw ILPSolverException(caller(), e.getMessage()); } catch (...) { env.end(); throw_with_nested(ILPSolverException(caller(), "Error during solving the ILP problem!")); } return solution; }
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(int , const char * []){ IloEnv env; try { IloModel model(env); IloIntVar Belgium(env, 0, 3), Denmark(env, 0, 3), France(env, 0, 3), Germany(env, 0, 3), Luxembourg(env, 0, 3), Netherlands(env, 0, 3); model.add(Belgium != France); model.add(Belgium != Germany); model.add(Belgium != Netherlands); model.add(Belgium != Luxembourg); model.add(Denmark == Germany); model.add(France != Germany); model.add(France != Luxembourg); model.add(Germany != Luxembourg); model.add(Germany != Netherlands); IloCP cp(model); cp.setParameter(IloCP::LogVerbosity, IloCP::Quiet); if (cp.solve()){ cp.out() << std::endl << cp.getStatus() << " Solution" << std::endl; cp.out() << "Belgium: " << Names[cp.getValue(Belgium)] << std::endl; cp.out() << "Denmark: " << Names[cp.getValue(Denmark)] << std::endl; cp.out() << "France: " << Names[cp.getValue(France)] << std::endl; cp.out() << "Germany: " << Names[cp.getValue(Germany)] << std::endl; cp.out() << "Luxembourg: " << Names[cp.getValue(Luxembourg)] << std::endl; cp.out() << "Netherlands: " << Names[cp.getValue(Netherlands)] << std::endl; } } catch (IloException& ex) { env.out() << "Error: " << ex << std::endl; } env.end(); return 0; }
int main (void) { IloEnv env; try { IloModel model(env); IloNumVarArray var(env); IloRangeArray con(env); populatebyrow (model, var, con); IloCplex cplex(model); cplex.solve(); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; IloNumArray vals(env); cplex.getValues(vals, var); env.out() << "Values = " << vals << endl; cplex.getSlacks(vals, con); env.out() << "Slacks = " << vals << endl; cplex.exportModel("mipex1.lp"); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int solveSE(const Problem<double>& P,Solution<double,double> &s,const std::vector<int>& config) { try { IloNum start,time_exec; const int n = P.nbTask; // create cplex model IloEnv env; IloModel model(env); IloNumVarMatrix x(env,n),y(env,n),b(env,n), w(env,n); IloNumVarArray t(env, 2*n, 0, P.D, ILOFLOAT); createModel(P,env,model,t,x,y,b,w,config); IloCplex cplex(model); setCplexParam(cplex,env,time_limit); start = cplex.getCplexTime(); IloInt cpt=0; cplex.use(getFirstSolInfo(env,cpt,start)); // solve ! if (cplex.solve()) { time_exec=cplex.getCplexTime()-start; std::cout << "Final status: \t"<< cplex.getStatus() << " en " << time_exec << std::endl; std:: cout << "Final objective: " << cplex.getObjValue() <<"\nFinal gap: \t" << cplex.getMIPRelativeGap() << std::endl; modelToSol(P,s,cplex,t,x,y,b); env.end(); return 0; } else if (cplex.getStatus()==IloAlgorithm::Infeasible){ time_exec=cplex.getCplexTime()-start; std::cout << "status: "<< cplex.getStatus() << " en " << time_exec << std::endl; } env.end(); return 1; } catch (IloException &e) { std::cout << "Iloexception in solve" << e << std::endl; e.end(); return 1; } catch (...){ std::cout << "Error unknown\n"; return 1; } }
int LPsolveSE(const Problem<double>& P,const std::vector<int>& config,int time_limite) { try{ IloNum start,time_exec; const int nbTask = P.nbTask; const int E=2*nbTask; IloEnv env; IloModel model(env); IloNumVarMatrix x(env,nbTask),y(env,nbTask); IloNumVarMatrix b(env,nbTask), w(env,nbTask); IloNumVarArray t(env, E, 0, P.D, ILOFLOAT); // create cplex model createModel(P,env,model,t,x,y,b,w,config); for (int i=0;i<nbTask;++i){ for (int e=0;e<E;++e){ model.add(IloConversion(env,x[i][e],ILOFLOAT)); model.add(IloConversion(env,y[i][e],ILOFLOAT)); } } IloCplex cplex(model); setCplexParam(cplex,env,time_limite); start= cplex.getCplexTime(); // solve ! if (cplex.solve()) { time_exec=cplex.getCplexTime()-start; std::cout << "Final status: \t"<< cplex.getStatus() << std::endl; std::cout << "Final time: \t"<< time_exec << std::endl; std:: cout << "Final objective: " << cplex.getObjValue() <<"\nFinal gap: \t" << cplex.getMIPRelativeGap()<< std::endl; env.end(); return 0; } else if (cplex.getStatus()==IloAlgorithm::Infeasible){ time_exec=cplex.getCplexTime()-start; std::cout << "status: "<< cplex.getStatus() << " en " << time_exec << std::endl; } env.end(); return 1; } catch (IloException &e){ std::cout << "Iloexception in solve" << e << std::endl; e.end(); return 1; } }
ILOSTLBEGIN int main() { IloEnv env; try { IloModel model(env, "chvatal"); IloNumVarArray x(env, 12, 0.0, 50.0); model.add(IloMinimize(env, x[0] + x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + 2*x[10] + 2*x[11] )); model.add( -x[7]-x[8]-x[9] == -1); model.add( x[0] +x[5] +x[7] == 4); model.add( x[1] +x[3] +x[6] +x[8] == 1); model.add( x[2] +x[4] +x[9] == 1); model.add( -x[5]-x[6] -x[10]+x[11] == -2); model.add( -x[3]-x[4] +x[10] == -2); model.add(-x[0]-x[1]-x[2] -x[11] == -1); IloCplex cplex(model); cplex.setParam(IloCplex::Param::Simplex::Display, 2); cplex.setParam(IloCplex::Param::RootAlgorithm, IloCplex::Network); cplex.solve(); cplex.out() << "After network optimization, objective is " << cplex.getObjValue() << endl; model.add(2*x[10] + 5*x[11] == 2); model.add( x[0] + x[2] + x[5] == 3); cplex.setParam(IloCplex::Param::RootAlgorithm, IloCplex::Dual); cplex.solve(); IloNumArray vals(env); cplex.getValues(vals, x); cplex.out() << "Solution status " << cplex.getStatus() << endl; cplex.out() << "Objective value " << cplex.getObjValue() << endl; cplex.out() << "Solution is: " << vals << endl; cplex.exportModel("lpex3.lp"); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main(int, const char * []) { IloEnv env; try { IloIntVarArray x(env); for (IloInt i = 0; i < 10; i++) { char name[6]; sprintf(name, "X%ld", i); x.add(IloIntVar(env, 0, 100 - 2*(i / 2), name)); } IloModel mdl(env); mdl.add(IloAllDiff(env, x)); mdl.add(x); IloIntVarChooser varChooser = ChooseSmallestCentroid(env); IloIntValueChooser valChooser = ChooseSmallestDistanceFromCentroid(env); IloSearchPhase sp1(env, x, varChooser, valChooser); IloIntVarEval varEval = Centroid(env); IloIntValueEval valEval = DistanceFromCentroid(env); IloSearchPhase sp2(env, x, IloSelectSmallest(varEval), IloSelectSmallest(valEval)); // sp2 can have ties as two variable or values could evaluate // to the same values. sp3 shows how to break these ties // choosing, for equivalent centroid and distance-to-centroid // evaluations, the lowest indexed variable in x and the // lowest value. IloVarSelectorArray selVar(env); selVar.add(IloSelectSmallest(varEval)); selVar.add(IloSelectSmallest(IloVarIndex(env, x))); // break ties on index IloValueSelectorArray selValue(env); selValue.add(IloSelectSmallest(valEval)); selValue.add(IloSelectSmallest(IloValue(env))); // break ties on smallest IloSearchPhase sp3(env, x, selVar, selValue); IloCP cp(mdl); cp.setParameter(IloCP::Workers, 1); cp.setParameter(IloCP::SearchType, IloCP::DepthFirst); cp.setParameter(IloCP::LogPeriod, 1); cp.out() << "Choosers" << std::endl; cp.solve(sp1); cp.out() << cp.domain(x) << std::endl; cp.out() << "Evaluators" << std::endl; cp.solve(sp2); cp.out() << cp.domain(x) << std::endl; cp.out() << "Evaluators (with tie-break)" << std::endl; cp.solve(sp3); cp.out() << cp.domain(x) << std::endl; cp.end(); } catch (IloException & ex) { env.out() << "Caught: " << ex << std::endl; } env.end(); return 0; }
string solverIdentification() { IloEnv env; IloCplex cplex(env); string identification = "Cplex "+string(cplex.getVersion()); env.end(); return identification; }
int main(int argc, const char* argv[]){ IloEnv env; try { const char* filename = "../../../examples/data/sched_conflict.data"; IloInt failLimit = 10000; if (argc > 1) filename = argv[1]; if (argc > 2) failLimit = atoi(argv[2]); IloConstraintArray allCts(env); IloConstraintArray capacityCts(env); IloConstraintArray precedenceCts(env); IloModel model = ReadModel(env, filename, capacityCts, precedenceCts); allCts.add(capacityCts); allCts.add(precedenceCts); IloCP cp(model); cp.setParameter(IloCP::FailLimit, failLimit); cp.setParameter(IloCP::CumulFunctionInferenceLevel, IloCP::Extended); cp.setParameter(IloCP::ConflictRefinerOnVariables, IloCP::On); cp.out() << "Instance \t: " << filename << std::endl; if (cp.solve()) { // A solution was found cp.out() << "Solution found with makespan : " << cp.getObjValue() << std::endl; } else { IloInt status = cp.getInfo(IloCP::FailStatus); if (status != IloCP::SearchHasFailedNormally) { // No solution found but problem was not proved infeasible cp.out() << "No solution found but problem was not proved infeasible." << std::endl; } else { // Run conflict refiner only if problem was proved infeasible cp.out() << "Infeasible problem, running conflict refiner ..." << std::endl; cp.out() << std::endl; cp.out() << "SCENARIO 1: Basic conflict refiner:" << std::endl; cp.out() << std::endl; runBasicConflictRefiner(cp); cp.setParameter(IloCP::LogVerbosity, IloCP::Quiet); cp.out() << "SCENARIO 2: Conflict refiner with preference on resource capacity constraints:" << std::endl; cp.out() << std::endl; runConflictRefinerWithPreferences(cp, capacityCts, precedenceCts); cp.out() << "SCENARIO 3: Conflict refiner with preference on precedence constraints:" << std::endl; cp.out() << std::endl; runConflictRefinerWithPreferences(cp, precedenceCts, capacityCts); cp.out() << "SCENARIO 4: Conflict partition:" << std::endl; cp.out() << std::endl; runConflictRefinerPartition(cp, allCts); cp.out() << "SCENARIO 5: All conflicts:" << std::endl; cp.out() << std::endl; runConflictRefinerAllConflicts(cp, allCts); } } } catch (IloException& ex) { env.out() << "Caught: " << ex << std::endl; } env.end(); return 0; }
void Instance::ComputeCPLEXRevenue() { IloEnv env; IloInt i, j; IloModel model(env); IloInt nbImpressions = num_impressions_; IloInt nbAdvertisers = num_advertisers_; NumVarMatrix x(env, nbImpressions); for(i = 0; i < nbImpressions; i++) { x[i] = IloNumVarArray(env, nbAdvertisers, 0.0, 1.0, ILOFLOAT); } // Add impression constraints. for(i = 0; i < nbImpressions; i++) { model.add(IloSum(x[i]) <= 1.0); } // Add weighted contraint. for(j = 0; j < nbAdvertisers; j++) { IloExpr curr_adv_constraint(env); for (__gnu_cxx::hash_map<int, long double>::iterator iter = bids_matrix_[j].begin(); iter != bids_matrix_[j].end(); ++iter) { curr_adv_constraint += ((double) iter->second) * ((double) weights_[j]) * x[iter->first][j]; } model.add(curr_adv_constraint <= ((double) budgets_[j])); } IloExpr obj_exp(env); for(i = 0; i < nbImpressions; i++) { for(j = 0; j < nbAdvertisers; j++) { obj_exp += ((double) transpose_bids_matrix_[i][j]) * x[i][j]; } } model.add(IloMaximize(env, obj_exp)); obj_exp.end(); IloCplex cplex(env); cplex.setOut(env.getNullStream()); cplex.extract(model); // Optimize the problem and obtain solution. if ( !cplex.solve() ) { env.error() << "Failed to optimize LP" << endl; throw(-1); } cplex.exportModel("/Users/ciocan/Documents/Google/data/example.lp"); cout << "CPLEX opt is " << cplex.getObjValue() << "\n"; env.end(); }
ILOSTLBEGIN //typedef IloArray<IloNumArray> TwoDMatrix; int main(int argc, char **argv) { IloEnv env; try { IloNumVar X(env, 0, IloInfinity, ILOFLOAT); IloNum X_val; IloNumVar Y(env, 0, 10, ILOINT); IloNum Y_val; IloModel model(env); IloExpr Obj(env); Obj = 5*X - 3*Y; model.add(IloMinimize(env,Obj)); // IloMinimize is used for minimization problems //Alternatively, model.add(IloMinimize(env,Obj)); can be replaced by the following three lines. //This is useful while iterating in Decomposition Techniques where the objective function is redefined at each iteration //IloObjective Objective = IloMinimize(env); //model.add(Objective); //Objective.setExpr(Obj); Obj.end(); model.add(X + 2*Y >= 10); model.add(2*X - Y >= 0); model.add(X - 3*Y >= -13); // Optimize IloCplex cplex(model); //cplex.setOut(env.getNullStream()); // This is to supress the output of Branch & Bound Tree on screen //cplex.setWarning(env.getNullStream()); //This is to supress warning messages on screen cplex.solve();//solving the MODEL if (cplex.getStatus() == IloAlgorithm::Infeasible) // if the problem is infeasible { env.out() << "Problem Infeasible" << endl; } X_val = cplex.getValue(X); Y_val = cplex.getValue(Y); // Print results cout<< "Objective Value = " << cplex.getObjValue() << endl; cout<<"X = "<<X_val<<endl; cout<<"Y = "<<Y_val<<endl; } catch(IloException &e) { env.out() << "ERROR: " << e << endl; } catch(...) { env.out() << "Unknown exception" << endl; } env.end(); return 0; }
int main(int, const char * []) { IloEnv env; try { IloInt i,j; IloModel model(env); IloNumExpr cost(env); IloIntervalVarArray allTasks(env); IloIntervalVarArray joeTasks(env); IloIntervalVarArray jimTasks(env); IloIntArray joeLocations(env); IloIntArray jimLocations(env); MakeHouse(model, cost, allTasks, joeTasks, jimTasks, joeLocations, jimLocations, 0, 0, 120, 100.0); MakeHouse(model, cost, allTasks, joeTasks, jimTasks, joeLocations, jimLocations, 1, 0, 212, 100.0); MakeHouse(model, cost, allTasks, joeTasks, jimTasks, joeLocations, jimLocations, 2, 151, 304, 100.0); MakeHouse(model, cost, allTasks, joeTasks, jimTasks, joeLocations, jimLocations, 3, 59, 181, 200.0); MakeHouse(model, cost, allTasks, joeTasks, jimTasks, joeLocations, jimLocations, 4, 243, 425, 100.0); IloTransitionDistance tt(env, 5); for (i=0; i<5; ++i) for (j=0; j<5; ++j) tt.setValue(i, j, IloAbs(i-j)); IloIntervalSequenceVar joe(env, joeTasks, joeLocations, "Joe"); IloIntervalSequenceVar jim(env, jimTasks, jimLocations, "Jim"); model.add(IloNoOverlap(env, joe, tt)); model.add(IloNoOverlap(env, jim, tt)); model.add(IloMinimize(env, cost)); /* EXTRACTING THE MODEL AND SOLVING. */ IloCP cp(model); if (cp.solve()) { cp.out() << "Solution with objective " << cp.getObjValue() << ":" << std::endl; for (i=0; i<allTasks.getSize(); ++i) { cp.out() << cp.domain(allTasks[i]) << std::endl; } } else { cp.out() << "No solution found. " << std::endl; } } catch (IloException& ex) { env.out() << "Error: " << ex << std::endl; } env.end(); return 0; }
int main (int argc, char **argv) { char const *vmconfig = NULL; // Check command line length (exactly two arguments are required). if ( argc != 3 ) { usage (argv[0]); return -1; } // Pick up VMC from command line. vmconfig = argv[1]; // Solve the model. int exitcode = 0; IloEnv env; try { // Create and read the model. IloModel model(env); IloCplex cplex(model); cplex.importModel(model, argv[2]); // Load the virtual machine configuration. // This will force solve() to use parallel distributed MIP. cplex.readVMConfig(vmconfig); // Solve the problem and display some results. if ( cplex.solve() ) env.out() << "Solution value = " << cplex.getObjValue() << endl; else env.out() << "No solution" << endl; env.out() << "Solution status = " << cplex.getStatus() << endl; // Cleanup. cplex.end(); model.end(); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; exitcode = -1; } catch (...) { cerr << "Unknown exception caught" << endl; exitcode = -1; } env.end(); return exitcode; } // END main
int main(int argc, const char *argv[]){ IloEnv env; try { IloModel model(env); IloInt nbTransmitters = GetTransmitterIndex(nbCell, 0); IloIntVarArray freq(env, nbTransmitters, 0, nbAvailFreq - 1); freq.setNames("freq"); for (IloInt cell = 0; cell < nbCell; cell++) for (IloInt channel1 = 0; channel1 < nbChannel[cell]; channel1++) for (IloInt channel2= channel1+1; channel2 < nbChannel[cell]; channel2++) model.add(IloAbs( freq[GetTransmitterIndex(cell, channel1)] - freq[GetTransmitterIndex(cell, channel2)] ) >= 16); for (IloInt cell1 = 0; cell1 < nbCell; cell1++) for (IloInt cell2 = cell1+1; cell2 < nbCell; cell2++) if (dist[cell1][cell2] > 0) for (IloInt channel1 = 0; channel1 < nbChannel[cell1]; channel1++) for (IloInt channel2 = 0; channel2 < nbChannel[cell2]; channel2++) model.add(IloAbs( freq[GetTransmitterIndex(cell1, channel1)] - freq[GetTransmitterIndex(cell2, channel2)] ) >= dist[cell1][cell2]); // Minimizing the total number of frequencies IloIntExpr nbFreq = IloCountDifferent(freq); model.add(IloMinimize(env, nbFreq)); IloCP cp(model); cp.setParameter(IloCP::CountDifferentInferenceLevel, IloCP::Extended); cp.setParameter(IloCP::FailLimit, 40000); cp.setParameter(IloCP::LogPeriod, 100000); if (cp.solve()) { for (IloInt cell = 0; cell < nbCell; cell++) { for (IloInt channel = 0; channel < nbChannel[cell]; channel++) cp.out() << cp.getValue(freq[GetTransmitterIndex(cell, channel)]) << " " ; cp.out() << std::endl; } cp.out() << "Total # of sites " << nbTransmitters << std::endl; cp.out() << "Total # of frequencies " << cp.getValue(nbFreq) << std::endl; } else cp.out() << "No solution found." << std::endl; cp.end(); } catch (IloException & ex) { env.out() << "Caught: " << ex << std::endl; } env.end(); return 0; }
int main (int argc, char **argv) { IloEnv env; try { IloModel model(env, "example"); IloNumVarArray var(env); IloRangeArray rng(env); populatebycolumn (model, var, rng); IloCplex cplex(model); IloCplex::BasisStatusArray cstat(env), rstat(env); cstat.add(IloCplex::AtUpper); cstat.add(IloCplex::Basic); cstat.add(IloCplex::Basic); rstat.add(IloCplex::AtLower); rstat.add(IloCplex::AtLower); cplex.setBasisStatuses(cstat, var, rstat, rng); cplex.solve(); cplex.out() << "Solution status = " << cplex.getStatus() << endl; cplex.out() << "Solution value = " << cplex.getObjValue() << endl; cplex.out() << "Iteration count = " << cplex.getNiterations() << endl; IloNumArray vals(env); cplex.getValues(vals, var); env.out() << "Values = " << vals << endl; cplex.getSlacks(vals, rng); env.out() << "Slacks = " << vals << endl; cplex.getDuals(vals, rng); env.out() << "Duals = " << vals << endl; cplex.getReducedCosts(vals, var); env.out() << "Reduced Costs = " << vals << endl; cplex.exportModel("lpex6.lp"); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main() { IloEnv env; try { IloModel model(env); setData(env); IloNumVarArray inside(env, nbProds); IloNumVarArray outside(env, nbProds); IloObjective obj = IloAdd(model, IloMinimize(env)); // Must meet demand for each product for(IloInt p = 0; p < nbProds; p++) { IloRange demRange = IloAdd(model, IloRange (env, demand[p], demand[p])); inside[p] = IloNumVar(obj(insideCost[p]) + demRange(1)); outside[p] = IloNumVar(obj(outsideCost[p]) + demRange(1)); } // Must respect capacity constraint for each resource for(IloInt r = 0; r < nbResources; r++) model.add(IloScalProd(consumption[r], inside) <= capacity[r]); IloCplex cplex(env); cplex.extract(model); cplex.solve(); if (cplex.getStatus() != IloAlgorithm::Optimal) cout << "No optimal solution" << endl; cout << "Solution status: " << cplex.getStatus() << endl; displayResults(cplex, inside, outside); cout << "----------------------------------------" << endl; } catch (IloException& ex) { cerr << "Error: " << ex << endl; } catch (...) { cerr << "Error" << endl; } env.end(); return 0; }
int main (int argc, char **argv) { IloEnv env; try { IloModel model(env); IloNumVarArray var(env); IloRangeArray con(env); IloRange add_con(env, 0.0, IloInfinity); populatebyrow (model, var, con); IloCplex cplex(model); // When a non-convex objective function is present, CPLEX will // raise an exception unless the parameter // IloCplex::Param::OptimalityTarget is set to accept first-order optimal // solutions cplex.setParam(IloCplex::Param::OptimalityTarget, IloCplex::SolutionFirstOrder); // CPLEX may converge to either local optimum solveanddisplay(env, cplex, var, con); // Add a constraint that cuts off the solution at (-1, 1) add_con.setExpr(var[0]); model.add(add_con); solveanddisplay(env, cplex, var, con); // Change the bounds of the newly added constraint to cut off // the solution at (1, 1) add_con.setBounds(-IloInfinity, 0.0); solveanddisplay(env, cplex, var, con); cplex.exportModel("indefqpex1.lp"); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main (int argc, char **argv) { IloEnv env; try { IloModel model(env); IloCplex cplex(env); if ( argc != 2 ) { usage (argv[0]); throw(-1); } IloObjective obj; IloNumVarArray var(env); IloRangeArray rng(env); IloSOS1Array sos1(env); IloSOS2Array sos2(env); IloRangeArray lazy(env); IloRangeArray cuts(env); cplex.importModel(model, argv[1], obj, var, rng, sos1, sos2, lazy, cuts); cplex.extract(model); if ( lazy.getSize() > 0 ) cplex.addLazyConstraints (lazy); if ( cuts.getSize() > 0 ) cplex.addUserCuts (cuts); cplex.solve(); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; IloNumArray vals(env); cplex.getValues(vals, var); env.out() << "Values = " << vals << endl; } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main (int argc, char **argv) { IloEnv env; try { IloModel model(env); IloCplex cplex(env); if ( argc != 2 ) { usage (argv[0]); throw(-1); } IloObjective obj; IloNumVarArray var(env); IloRangeArray rng(env); cplex.importModel(model, argv[1], obj, var, rng); cplex.use(Rounddown(env, var)); cplex.extract(model); // Check model is all binary except for objective constant variable if ( cplex.getNbinVars() < cplex.getNcols() - 1 ) { cerr << "Problem contains non-binary variables, exiting." << endl; throw (-1); } cplex.setParam(IloCplex::Param::MIP::Strategy::Search, IloCplex::Traditional); cplex.solve(); IloNumArray vals(env); cplex.getValues(vals, var); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; env.out() << "Values = " << vals << endl; } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main(int argc, char** argv) { IloEnv env; try { IloModel m(env); IloCplex cplex(env); IloObjective obj; IloNumVarArray vars(env); IloRangeArray rngs(env); const char* datadir = (argc >= 2) ? argv[1] : "../../../examples/data"; char *fname = new char[strlen(datadir) + 1 + strlen("noswot.mps") + 1]; sprintf(fname, "%s/noswot.mps", datadir); env.out() << "reading " << fname << endl; cplex.importModel(m, fname, obj, vars, rngs); delete[] fname; env.out() << "extracting model ..." << endl; cplex.extract(m); IloRangeArray cuts(env); makeCuts(cuts, vars); // Use addUserCuts when the added constraints strengthen the // formulation. Use addLazyConstraints when the added constraints // remove part of the feasible region. Use addCuts when you are // not certain. cplex.addUserCuts(cuts); cuts.endElements(); cuts.end(); cplex.setParam(IloCplex::Param::MIP::Interval, 1000); env.out() << "solving model ...\n"; cplex.solve(); env.out() << "solution status is " << cplex.getStatus() << endl; env.out() << "solution value is " << cplex.getObjValue() << endl; } catch (IloException& ex) { cerr << "Error: " << ex << endl; } env.end(); return 0; }
int main (int argc, char **argv) { IloEnv env; try { IloModel model(env); IloCplex cplex(env); if ( argc != 2 ) { usage (argv[0]); throw(-1); } IloObjective obj; IloNumVarArray var(env); IloRangeArray rng(env); cplex.importModel(model, argv[1], obj, var, rng); cplex.extract(model); cplex.setParam(IloCplex::Param::MIP::Strategy::Search, IloCplex::Traditional); IloCplex::Goal iiSumGoal = IloCplex::Apply(cplex, MyBranchGoal(env, var), IISumEvaluator()); IloCplex::Goal depthGoal = IloCplex::Apply(cplex, iiSumGoal, DepthEvaluator()); cplex.solve(depthGoal); IloNumArray vals(env); cplex.getValues(vals, var); cout << "Solution status = " << cplex.getStatus() << endl; cout << "Solution value = " << cplex.getObjValue() << endl; cout << "Values = " << vals << endl; } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } env.end(); return 0; }
int main (int argc, char **argv) { IloEnv env; try { IloModel model(env); IloNumVarArray var(env); IloRangeArray con(env); populatebyrow (model, var, con); IloCplex cplex(model); // Optimize the problem and obtain solution. if ( !cplex.solve() ) { env.error() << "Failed to optimize LP" << endl; throw(-1); } IloNumArray vals(env); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; cplex.getValues(vals, var); env.out() << "Values = " << vals << endl; cplex.getSlacks(vals, con); env.out() << "Slacks = " << vals << endl; cplex.getDuals(vals, con); env.out() << "Duals = " << vals << endl; cplex.getReducedCosts(vals, var); env.out() << "Reduced Costs = " << vals << endl; cplex.exportModel("qpex1.lp"); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main(int argc, char** argv) { IloEnv env; try { IloModel m(env); IloCplex cplex(env); IloObjective obj; IloNumVarArray var(env); IloRangeArray con(env); const char* datadir = (argc >= 2) ? argv[1] : "../../../examples/data"; char *fname = new char[strlen(datadir) + 1 + strlen("noswot.mps") + 1]; sprintf(fname, "%s/noswot.mps", datadir); env.out() << "reading " << fname << endl; cplex.importModel(m, fname, obj, var, con); delete[] fname; env.out() << "constructing cut callback ..." << endl; IloExprArray lhs(env); IloNumArray rhs(env); makeCuts(var, lhs, rhs); cplex.use(CtCallback(env, lhs, rhs, cplex.getParam( IloCplex::Param::Simplex::Tolerances::Feasibility))); env.out() << "extracting model ..." << endl; cplex.extract(m); cplex.setParam(IloCplex::Param::MIP::Interval, 1000); cplex.setParam(IloCplex::Param::MIP::Strategy::Search, IloCplex::Traditional); env.out() << "solving model ...\n"; cplex.solve(); env.out() << "solution status is " << cplex.getStatus() << endl; env.out() << "solution value is " << cplex.getObjValue() << endl; } catch (IloException& ex) { cerr << "Error: " << ex << endl; } env.end(); return 0; }
int main (void) { IloEnv env; try { IloModel model(env); IloNumVarArray var(env); IloRangeArray con(env); populatebyrow (model, var, con); IloCplex cplex(model); IloNumVarArray ordvar(env, 2); IloNumArray ordpri(env, 2); ordvar[0] = var[1]; ordvar[1] = var[3]; ordpri[0] = 8.0; ordpri[1] = 7.0; cplex.setPriorities (ordvar, ordpri); cplex.setDirection(var[1], IloCplex::BranchUp); cplex.setDirection(var[3], IloCplex::BranchDown); cplex.solve(); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; IloNumArray vals(env); cplex.getValues(vals, var); env.out() << "Values = " << vals << endl; cplex.getSlacks(vals, con); env.out() << "Slacks = " << vals << endl; cplex.exportModel("mipex3.lp"); cplex.writeOrder("mipex3.ord"); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main (int argc, char **argv) { IloEnv env; try { IloModel model(env); IloCplex cplex(env); if ( argc != 2 ) { usage (argv[0]); throw(-1); } IloObjective obj; IloNumVarArray var(env); IloRangeArray rng(env); IloSOS1Array sos1(env); IloSOS2Array sos2(env); cplex.importModel(model, argv[1], obj, var, rng, sos1, sos2); cplex.use(SOSbranch(env, sos1)); cplex.setParam(IloCplex::Param::MIP::Strategy::Search, IloCplex::Traditional); cplex.extract(model); cplex.solve(); IloNumArray vals(env); cplex.getValues(vals, var); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; env.out() << "Values = " << vals << endl; } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main (int argc, char **argv) { IloEnv env; try { IloModel model(env, "example"); IloNumVarArray var(env); IloRangeArray rng(env); populatebycolumn (model, var, rng); IloCplex cplex(model); cplex.setOut(env.getNullStream()); cplex.setParam(IloCplex::Param::RootAlgorithm, IloCplex::Primal); cplex.use(MyCallback(env)); cplex.solve(); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; IloNumArray vals(env); cplex.getValues(vals, var); env.out() << "Values = " << vals << endl; cplex.getSlacks(vals, rng); env.out() << "Slacks = " << vals << endl; cplex.getDuals(vals, rng); env.out() << "Duals = " << vals << endl; cplex.getReducedCosts(vals, var); env.out() << "Reduced Costs = " << vals << endl; cplex.exportModel("lpex4.lp"); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; } // END main
int main (void) { IloEnv env; try { IloModel model(env); // declaration du nodel IloNumVarArray var(env); // liste des variables de decision IloRangeArray con(env); // liste des contraintes a ajouter a notre probleme IloNumVarArray duals(env); populatebyrow (model, var, con); // remplir les variables avec les valeurs adequat IloCplex cplex(model); cplex.solve(); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; IloNumArray vals(env); cplex.getValues(vals, var); env.out() << "Values = " << vals << endl; cplex.getSlacks(vals, con); env.out() << "Slacks = " << vals << endl; model.add(var[0] == 0); cplex.solve(); cplex.getValues(vals, var); env.out() << "Solution status = " << cplex.getStatus() << endl; env.out() << "Solution value = " << cplex.getObjValue() << endl; env.out() << "Values = " << vals << endl; //cplex.exportModel("pl.lp"); } catch (IloException& e) { cerr << "Concert exception caught: " << e << endl; } catch (...) { cerr << "Unknown exception caught" << endl; } env.end(); return 0; }
int CProblem::setModel() { //time_t start, end; numvar = 1+n; // lambda + all c; IloEnv env; try { IloModel model(env); IloCplex cplex(env); /*Variables*/ IloNumVar lambda(env, "lambda"); IloNumVarArray c(env, n);// for (unsigned int u=0; u<n; u++) { std::stringstream ss; ss << u; std::string str = "c" + ss.str(); c[u]=IloNumVar(env, str.c_str()); } IloArray<IloIntVarArray> z(env,n); for (unsigned int u=0; u<n; u++) { z[u]= IloIntVarArray(env, n); for (unsigned int v=0; v<n; v++) { std::stringstream ss; ss << u; ss << v; std::string str = "z" + ss.str(); z[u][v] = IloIntVar(env, 0, 1, str.c_str()); } } /* Constant M*/ int M=n*max_d; UB = M; /* Objective*/ model.add(IloMinimize(env, lambda)); //model.add(IloMinimize(env, IloSum(c))); /*Constrains*/ model.add(lambda - UB <= 0); /* d=function of the distance */ IloArray<IloNumArray> Par_d(env,n); for (unsigned int u=0; u<n; u++) { Par_d[u]=IloNumArray(env,n); for (unsigned int v=0; v<n; v++) { Par_d[u][v]=d[u][v]; } } for (unsigned u=0; u<n; u++) { for (unsigned v=0; v<u; v++) { model.add(c[v]-c[u]+M* z[u][v] >= Par_d[u][v] ); model.add(c[u]-c[v]+M*(1-z[u][v]) >= Par_d[u][v]); numvar++; // + z[u][v] } } /* for (unsigned i=0; i<sqrt(n)-1; i=i+1) { for (unsigned j=0; j<sqrt(n)-1; j=j+1) { //square lattice model.add (c[i*sqrt(n)+j] +c[i*sqrt(n)+j+1] + c[(i+1)*sqrt(n)+j] +c[(i+1)*sqrt(n)+j+1]>= 16-4*sqrt(2)); // Bedingung fuer Quadratischen Gridgraph und d(x) = 3-x // // triangular lattice // model.add (c[i*5+j]+c[i*5+j+1] + // c[(i+1)+j] >= 4); // Bedingung fuer Quadratischen Gridgraph und d(x) = 3-x // model.add (c[i*sqrt(n)+j]+c[i*sqrt(n)+j+1] + // c[(i+1)*sqrt(n)+j]+c[(i+1)*sqrt(n)+j+1] >= 22 - 4*sqrt(2)); // Bedingung fuer Quadratischen Gridgraph und d(x) = 4-x } } */ /* for (unsigned i=0; i<sqrt(n)-2; i+=3) { for (unsigned j=0; j<sqrt(n)-2; j+=3) { // model.add (c[i*sqrt(n)+j] + c[i*sqrt(n)+j+1] + c[i*sqrt(n)+j+2] + // c[(i+1)*sqrt(n)+j]+ c[(i+1)*sqrt(n)+j+1]+ c[(i+1)*sqrt(n)+j+2] + // c[(i+2)*sqrt(n)+j]+ c[(i+2)*sqrt(n)+j+1]+ c[(i+2)*sqrt(n)+j+2] // >= 60-17*sqrt(2)-3*sqrt(5)); // Bedingung fuer Quadratischen Gridgraph und d(x) = 3-x // model.add (c[i*sqrt(n)+j] + c[i*sqrt(n)+j+1] + c[i*sqrt(n)+j+2] + // c[(i+1)*sqrt(n)+j]+ c[(i+1)*sqrt(n)+j+1]+ c[(i+1)*sqrt(n)+j+2] + // c[(i+2)*sqrt(n)+j]+ c[(i+2)*sqrt(n)+j+1]+ c[(i+2)*sqrt(n)+j+2] // >= 82-8*sqrt(2)-2*sqrt(5)); // Bedingung fuer Quadratischen Gridgraph und d(x) = 4-x } } */ for (unsigned int v=0; v<n; v++) { IloExpr expr; model.add (c[v] <= lambda); model.add (c[v] >= 0); expr.end(); } std::cout << "Number of variables " << numvar << "\n"; /* solve the Model*/ cplex.extract(model); cplex.exportModel("L-Labeling.lp"); /* start = clock(); int solveError = cplex.solve(); end = clock (); */ IloTimer timer(env); timer.start(); int solveError = cplex.solve(); timer.stop(); if ( !solveError ) { std::cout << "STATUS : "<< cplex.getStatus() << "\n"; env.error() << "Failed to optimize LP \n"; exit(1); } //Info.time = (double)(end-start)/(double)CLOCKS_PER_SEC; Info.time = timer.getTime(); std::cout << "STATUS : "<< cplex.getStatus() << "\n"; /* get the solution*/ env.out() << "Solution status = " << cplex.getStatus() << "\n"; numconst = cplex.getNrows(); env.out() << " Number of constraints = " << numconst << "\n"; lambda_G_d=cplex.getObjValue(); env.out() << "Solution value = " << lambda_G_d << "\n"; for (unsigned int u=0; u<n; u++) { C.push_back(cplex.getValue(c[u])); std::cout << "c(" << u << ")=" << C[u]<< " "; } std::cout <<"\n"; /* for (unsigned int u=0; u<n; u++) { for (unsigned int v=0; v<u; v++) { std::cout<< "z[" << u <<"][" << v << "]="<< cplex.getValue( z[u][v]) << " "; Z.push_back(cplex.getValue( z[u][v])); } std::cout << "\n"; } std::cout <<"\n"; */ } // end try catch (IloException& e) { std::cerr << "Concert exception caught: " << e << std::endl; } catch (...) { std::cerr << "Unknown exception caught" << std::endl; } env.end(); return 0; }
int compute_evc_bound_using_sukp(Dataset &dataset, const std::unordered_set<const std::set<int>*> &collection, const stats_config &stats_conf, std::pair<int,int> &result) { std::ifstream dataset_s(dataset.get_path()); if(! dataset_s.good()) { std::cerr << "ERROR: cannot open dataset file" << std::endl; dataset_s.close(); std::exit(EXIT_FAILURE); } if (collection.empty()) { result.first = 0; result.second = 0; return 1; } // The following is called U in the pseudocode std::unordered_set<int> items; int collection_size = 0; for (const std::set<int> *itemset : collection) { items.insert(itemset->begin(), itemset->end()); ++collection_size; } // The following is called L in the pseudocode std::map<int, int, bool (*)(int,int)> intersection_sizes_counts(reverse_int_comp); // The following is called D_C in the pseudocode std::set<std::set<int> > intersections; std::string line; int size = 0; while (std::getline(dataset_s, line)) { ++size; const std::set<int> tau = string2itemset(line); std::vector<int> intersection_v(tau.size()); std::vector<int>::iterator it; it = std::set_intersection( tau.begin(), tau.end(), items.begin(), items.end(), intersection_v.begin()); if (it != intersection_v.begin() && it - intersection_v.begin() != items.size()) { std::set<int> intersection(intersection_v.begin(), it); std::pair<std::set<std::set<int> >::iterator, bool> insertion_pair = intersections.insert(intersection); if (insertion_pair.second) { // intersection was not already in intersections std::map<int, int, bool (*)(int,int)>::iterator intersection_it = intersection_sizes_counts.find(intersection.size()); if (intersection_it == intersection_sizes_counts.end()) { // we've never seen an intersection of this size int prev_value = 0; // We add an element with key equal to the intersection size, and value equal to the value of the element with key immediately larger thn this one, or 0 if there is no such element. if (! intersection_sizes_counts.empty()) { auto longer_intersection_it = intersection_sizes_counts.lower_bound(intersection.size()); if (longer_intersection_it != intersection_sizes_counts.begin()) { --longer_intersection_it; prev_value = longer_intersection_it->second; } } intersection_it = (intersection_sizes_counts.emplace(intersection.size(), prev_value)).first; } // Exploit the sorted nature (in decreasing order) of the map for (; intersection_it != intersection_sizes_counts.end(); ++intersection_it) { intersection_sizes_counts[intersection_it->first] += 1; } } } } dataset_s.close(); dataset.set_size(size); // Set size in the database object // We do not need a counter 'i' like in the pseudocode, we can use an // iterator that exploits the sorted nature of the map std::map<int, int, bool (*)(int,int)>::iterator it = intersection_sizes_counts.begin(); IloEnv env; IloModel model(env); if (get_CPLEX_model(model, env, items, collection, it->first, stats_conf.use_antichain) == -1) { std::cerr << "ERROR: something went wrong while building the CPLEX model" << std::endl; env.end(); std::exit(EXIT_FAILURE); } IloCplex cplex(model); // Set parameters, like max runtime and tolerance gaps set_CPLEX_params(cplex); // Redirect output to null stream cplex.setOut(env.getNullStream()); // Iterate over the possible lengths while (true) { // The following is q in the pseudocode double profit = get_SUKP_profit(cplex); if (profit == -1.0) { std::cerr << "ERROR: something went wrong while solving the SUKP" << std::endl; env.end(); std::exit(EXIT_FAILURE); } // This is b in the pseudocode int bound = ((int) floor(log2(profit))) + 1; if (bound <= it->second) { result.first = bound; result.second = -1; env.end(); return 1; } else { ++it; if (it != intersection_sizes_counts.end()) { if (it->first == 1) { result.first = 1; result.second = -1; env.end(); return 1; } set_capacity(model, it->first); } else { env.end(); break; } } } --it; // XXX TODO The following needs to be checked a bit: it may not be the best. result.first = (int) floor(fmin(it->second, log2(collection_size))); result.second = -1; env.end(); return 1; }