00001 // Copyright (C) 2004, 2010 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id: IpIpoptApplication.hpp 2617 2015-11-26 16:00:20Z stefan $ 00006 // 00007 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 00008 00009 #ifndef __IPIPOPTAPPLICATION_HPP__ 00010 #define __IPIPOPTAPPLICATION_HPP__ 00011 00012 #ifndef IPOPT_EXPORT 00013 #ifdef _MSC_VER 00014 #ifdef IPOPT_DLL 00015 #define IPOPT_EXPORT(type) __declspec(dllexport) type __cdecl 00016 #else 00017 #define IPOPT_EXPORT(type) type __cdecl 00018 #endif 00019 #else 00020 #define IPOPT_EXPORT(type) type 00021 #endif 00022 #endif 00023 00024 #include <iostream> 00025 00026 #include "IpJournalist.hpp" 00027 #include "IpTNLP.hpp" 00028 #include "IpNLP.hpp" 00029 /* Return codes for the Optimize call for an application */ 00030 #include "IpReturnCodes.hpp" 00031 00032 namespace Ipopt 00033 { 00034 DECLARE_STD_EXCEPTION(IPOPT_APPLICATION_ERROR); 00035 00036 /* forward declarations */ 00037 class IpoptAlgorithm; 00038 class IpoptNLP; 00039 class IpoptData; 00040 class IpoptCalculatedQuantities; 00041 class AlgorithmBuilder; 00042 class RegisteredOptions; 00043 class OptionsList; 00044 class SolveStatistics; 00045 00047 class IpoptApplication : public ReferencedObject 00048 { 00049 public: 00050 IpoptApplication(bool create_console_out = true, 00051 bool create_empty = false); 00052 00055 IpoptApplication(SmartPtr<RegisteredOptions> reg_options, 00056 SmartPtr<OptionsList> options, 00057 SmartPtr<Journalist> jnlst); 00058 00059 virtual ~IpoptApplication(); 00060 00064 virtual SmartPtr<IpoptApplication> clone(); 00065 00075 virtual ApplicationReturnStatus Initialize(std::istream& is, bool allow_clobber = false); 00087 virtual ApplicationReturnStatus Initialize(std::string params_file, bool allow_clobber = false); 00099 virtual ApplicationReturnStatus Initialize(const char* params_file, bool allow_clobber = false) 00100 { 00101 return Initialize(std::string(params_file), allow_clobber); 00102 } 00112 virtual ApplicationReturnStatus Initialize(bool allow_clobber = false); 00113 00117 virtual ApplicationReturnStatus OptimizeTNLP(const SmartPtr<TNLP>& tnlp); 00118 00120 virtual ApplicationReturnStatus OptimizeNLP(const SmartPtr<NLP>& nlp); 00121 00123 virtual ApplicationReturnStatus OptimizeNLP(const SmartPtr<NLP>& nlp, SmartPtr<AlgorithmBuilder>& alg_builder); 00124 00130 virtual ApplicationReturnStatus ReOptimizeTNLP(const SmartPtr<TNLP>& tnlp); 00131 00137 virtual ApplicationReturnStatus ReOptimizeNLP(const SmartPtr<NLP>& nlp); 00139 00142 virtual bool OpenOutputFile(std::string file_name, EJournalLevel print_level); 00143 00147 virtual SmartPtr<Journalist> Jnlst() 00148 { 00149 return jnlst_; 00150 } 00151 00154 virtual SmartPtr<RegisteredOptions> RegOptions() 00155 { 00156 return reg_options_; 00157 } 00158 00160 virtual SmartPtr<OptionsList> Options() 00161 { 00162 return options_; 00163 } 00164 00166 virtual SmartPtr<const OptionsList> Options() const 00167 { 00168 return ConstPtr(options_); 00169 } 00170 00173 virtual SmartPtr<SolveStatistics> Statistics(); 00174 00176 virtual SmartPtr<IpoptNLP> IpoptNLPObject(); 00177 00179 SmartPtr<IpoptData> IpoptDataObject(); 00180 00182 virtual SmartPtr<IpoptCalculatedQuantities> IpoptCQObject(); 00183 00185 SmartPtr<IpoptAlgorithm> AlgorithmObject(); 00187 00192 void PrintCopyrightMessage(); 00193 00201 void RethrowNonIpoptException(bool dorethrow) 00202 { 00203 rethrow_nonipoptexception_ = dorethrow; 00204 } 00205 00208 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00210 00212 static void 00213 RegisterAllIpoptOptions(const SmartPtr<RegisteredOptions>& roptions); 00214 00215 private: 00225 // IpoptApplication(); 00226 00228 IpoptApplication(const IpoptApplication&); 00229 00231 void operator=(const IpoptApplication&); 00233 00236 ApplicationReturnStatus call_optimize(); 00237 00241 bool read_params_dat_; 00242 00244 bool rethrow_nonipoptexception_; 00246 00248 SmartPtr<Journalist> jnlst_; 00249 00251 SmartPtr<RegisteredOptions> reg_options_; 00252 00254 SmartPtr<OptionsList> options_; 00255 00258 SmartPtr<SolveStatistics> statistics_; 00259 00262 SmartPtr<IpoptAlgorithm> alg_; 00263 00266 SmartPtr<IpoptNLP> ip_nlp_; 00267 00271 SmartPtr<IpoptData> ip_data_; 00272 00276 SmartPtr<IpoptCalculatedQuantities> ip_cq_; 00277 00280 SmartPtr<NLP> nlp_adapter_; 00281 00285 bool inexact_algorithm_; 00288 bool replace_bounds_; 00290 }; 00291 00292 } // namespace Ipopt 00293 00294 extern "C" IPOPT_EXPORT(class Ipopt::IpoptApplication *) IpoptApplicationFactory(); 00295 00296 #endif