MCPcopy Create free account
hub / github.com/OpenMS/OpenMS / solve

Method solve

src/openms/source/DATASTRUCTURES/LPWrapper.cpp:521–636  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

519 Int LPWrapper::solve(SolverParam& /*solver_param*/, const Size verbose_level)
520#else
521 Int LPWrapper::solve(SolverParam& solver_param, const Size /*verbose_level*/)
522#endif
523 {
524 OPENMS_LOG_INFO << "Using solver '" << (solver_ == LPWrapper::SOLVER_GLPK ? "glpk" : "coinor") << "' ...\n";
525#if COINOR_SOLVER == 1
526//Removed ifdef and OsiOslSolverInterface because Windows couldn't find it/both flags failed. For linux on the other hand the flags worked. But as far as I know we prefer CLP as solver anyway so no need to look for different solvers.
527//#ifdef COIN_HAS_CLP
528 OsiClpSolverInterface solver;
529//#elif COIN_HAS_OSL
530// OsiOslSolverInterface solver;
531//#endif
532 solver.loadFromCoinModel(*model_);
533 /* Now let MIP calculate a solution */
534 // Pass to solver
535 CbcModel model(solver);
536 model.setObjSense(model_->optimizationDirection()); // -1 = maximize, 1=minimize
537 model.solver()->setHintParam(OsiDoReducePrint, true, OsiHintTry);
538
539 // Output details
540 model.messageHandler()->setLogLevel(verbose_level > 1 ? 2 : 0);
541 model.solver()->messageHandler()->setLogLevel(verbose_level > 1 ? 1 : 0);
542
543 //CglProbing generator1;
544 //generator1.setUsingObjective(true);
545 CglGomory generator2;
546 generator2.setLimit(300);
547 CglKnapsackCover generator3;
548 CglOddHole generator4;
549 generator4.setMinimumViolation(0.005);
550 generator4.setMinimumViolationPer(0.00002);
551 generator4.setMaximumEntries(200);
552 CglClique generator5;
553 generator5.setStarCliqueReport(false);
554 generator5.setRowCliqueReport(false);
555 //CglFlowCover flowGen;
556 CglMixedIntegerRounding mixedGen;
557
558 // Add in generators (you should prefer the ones used often and disable the others as they increase solution time)
559 //model.addCutGenerator(&generator1,-1,"Probing");
560 model.addCutGenerator(&generator2, -1, "Gomory");
561 model.addCutGenerator(&generator3, -1, "Knapsack");
562 //model.addCutGenerator(&generator4,-1,"OddHole"); // segfaults
563 model.addCutGenerator(&generator5, -10, "Clique");
564 //model.addCutGenerator(&flowGen,-1,"FlowCover");
565 model.addCutGenerator(&mixedGen, -1, "MixedIntegerRounding");
566
567 // Heuristics
568 CbcRounding heuristic1(model);
569 model.addHeuristic(&heuristic1);
570 CbcHeuristicLocal heuristic2(model);
571 model.addHeuristic(&heuristic2);
572
573 // set maximum allowed CPU time before forced stop (dangerous!)
574 //model.setDblParam(CbcModel::CbcMaximumSeconds,60.0*1);
575
576 // Do initial solve to continuous
577 model.initialSolve();
578

Callers

nothing calls this directly

Calls 2

setLogLevelMethod · 0.80
push_backMethod · 0.45

Tested by

no test coverage detected