BonIpoptSolver.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef IpoptSolver_HPP
00011 #define IpoptSolver_HPP
00012 #include "BonTNLPSolver.hpp"
00013 #include "IpIpoptApplication.hpp"
00014
00015
00016 namespace Bonmin
00017 {
00018 class IpoptSolver: public TNLPSolver
00019 {
00020 public:
00021 class UnsolvedIpoptError: public TNLPSolver::UnsolvedError
00022 {
00023 public:
00024 UnsolvedIpoptError(int errorNum,
00025 Ipopt::SmartPtr<TMINLP2TNLP> problem,
00026 std::string name):
00027 TNLPSolver::UnsolvedError(errorNum, problem, name)
00028 {}
00029 virtual const std::string& errorName() const;
00030
00031 virtual const std::string& solverName() const;
00032 virtual ~UnsolvedIpoptError()
00033 {}
00034 private:
00035 static std::string errorNames [17];
00036 static std::string solverName_;
00037 };
00038
00039 virtual UnsolvedError * newUnsolvedError(int num,
00040 Ipopt::SmartPtr<TMINLP2TNLP> problem,
00041 std::string name)
00042 {
00043 return new UnsolvedIpoptError(num, problem, name);
00044 }
00045
00046
00047
00049 IpoptSolver(bool createEmpty = false);
00050
00052 IpoptSolver(Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions,
00053 Ipopt::SmartPtr<Ipopt::OptionsList> options,
00054 Ipopt::SmartPtr<Ipopt::Journalist> journalist,
00055 const std::string & prefix);
00056
00058 IpoptSolver(Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions,
00059 Ipopt::SmartPtr<Ipopt::OptionsList> options,
00060 Ipopt::SmartPtr<Ipopt::Journalist> journalist);
00061
00063 IpoptSolver(const IpoptSolver &other);
00064
00066 virtual Ipopt::SmartPtr<TNLPSolver> clone();
00067
00069 virtual ~IpoptSolver();
00070
00073 virtual bool Initialize(std::string params_file);
00074
00077 virtual bool Initialize(std::istream& is);
00078
00081
00082 virtual TNLPSolver::ReturnStatus OptimizeTNLP(const Ipopt::SmartPtr<Ipopt::TNLP> & tnlp);
00083
00085 virtual TNLPSolver::ReturnStatus ReOptimizeTNLP(const Ipopt::SmartPtr<Ipopt::TNLP> & tnlp);
00086
00088 virtual bool setWarmStart(const CoinWarmStart * warm,
00089 Ipopt::SmartPtr<TMINLP2TNLP> tnlp);
00090
00092 virtual CoinWarmStart * getUsedWarmStart(Ipopt::SmartPtr<TMINLP2TNLP> tnlp) const;
00093
00094
00096 virtual CoinWarmStart * getWarmStart(Ipopt::SmartPtr<Bonmin::TMINLP2TNLP> tnlp) const;
00097
00098 virtual CoinWarmStart * getEmptyWarmStart() const;
00099
00101 virtual bool warmStartIsValid(const CoinWarmStart * ws) const;
00102
00104 virtual void enableWarmStart();
00105
00107 virtual void disableWarmStart();
00108
00110
00112 virtual double CPUTime();
00113
00115 virtual int IterationCount();
00116
00118 virtual void setOutputToDefault();
00120 virtual void forceSolverOutput(int log_level);
00121
00123 virtual std::string & solverName()
00124 {
00125 return solverName_;
00126 }
00127
00129 static void RegisterOptions(Ipopt::SmartPtr<Bonmin::RegisteredOptions> roptions)
00130 {
00131 Ipopt::IpoptApplication::RegisterAllIpoptOptions(GetRawPtr(roptions));
00132 }
00133
00134
00135
00137 Ipopt::ApplicationReturnStatus getOptStatus() const
00138 {
00139 return optimizationStatus_;
00140 }
00141
00142 Ipopt::IpoptApplication& getIpoptApp()
00143 {
00144 return *app_;
00145 }
00146
00147 virtual int errorCode() const
00148 {
00149 return (int) optimizationStatus_;
00150 }
00151 private:
00153 void setMinlpDefaults(Ipopt::SmartPtr< Ipopt::OptionsList> Options);
00154
00156 TNLPSolver::ReturnStatus solverReturnStatus(Ipopt::ApplicationReturnStatus optimization_status) const;
00157
00159 Ipopt::SmartPtr<Ipopt::IpoptApplication> app_;
00161 Ipopt::ApplicationReturnStatus optimizationStatus_;
00163
00164
00166 bool problemHadZeroDimension_;
00167
00175 int warmStartStrategy_;
00176
00178 bool enable_warm_start_;
00179
00182 bool optimized_before_;
00183
00184 static std::string solverName_;
00185 };
00186 }
00187 #endif
00188