EnginePtr getNLPEngine(EnvPtr env, ProblemPtr p) { EngineFactory *efac = new EngineFactory(env); EnginePtr e = EnginePtr(); // NULL bool cont=false; p->calculateSize(); if (p->isLinear()) { e = efac->getLPEngine(); if (e) { delete efac; return e; } else { cont = true; } } if (true==cont || p->isQP()) { e = efac->getQPEngine(); if (e) { delete efac; return e; } else { cont = true; } } e = efac->getNLPEngine(); assert (e || (!"No engine available for this problem.")); delete efac; return e; }
PresolverPtr presolve(EnvPtr env, ProblemPtr p, size_t ndefs, HandlerVector &handlers) { PresolverPtr pres = PresolverPtr(); // NULL const std::string me("qg: "); p->calculateSize(); if (env->getOptions()->findBool("presolve")->getValue() == true) { LinearHandlerPtr lhandler = (LinearHandlerPtr) new LinearHandler(env, p); handlers.push_back(lhandler); if (p->isQP() || p->isQuadratic() || p->isLinear() || true==env->getOptions()->findBool("use_native_cgraph")->getValue()) { lhandler->setPreOptPurgeVars(true); lhandler->setPreOptPurgeCons(true); lhandler->setPreOptCoeffImp(true); } else { lhandler->setPreOptPurgeVars(false); lhandler->setPreOptPurgeCons(false); lhandler->setPreOptCoeffImp(false); } if (ndefs>0) { lhandler->setPreOptDualFix(false); } else { lhandler->setPreOptDualFix(true); } if (!p->isLinear() && true==env->getOptions()->findBool("use_native_cgraph")->getValue() && true==env->getOptions()->findBool("nl_presolve")->getValue() ) { NlPresHandlerPtr nlhand = (NlPresHandlerPtr) new NlPresHandler(env, p); handlers.push_back(nlhand); } // write the names. env->getLogger()->msgStream(LogExtraInfo) << me << "handlers used in presolve:" << std::endl; for (HandlerIterator h = handlers.begin(); h != handlers.end(); ++h) { env->getLogger()->msgStream(LogExtraInfo) << me << (*h)->getName() << std::endl; } } pres = (PresolverPtr) new Presolver(p, env, handlers); pres->standardize(); if (env->getOptions()->findBool("presolve")->getValue() == true) { pres->solve(); } return pres; }