00001 // Copyright (C) 2004, 2010 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: IpIpoptApplication.hpp 1692 2010-06-21 19:10:07Z andreasw $ 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 00073 virtual ApplicationReturnStatus Initialize(std::string params_file = "ipopt.opt"); 00074 virtual ApplicationReturnStatus Initialize(std::istream& is); 00075 00079 virtual ApplicationReturnStatus OptimizeTNLP(const SmartPtr<TNLP>& tnlp); 00080 00082 virtual ApplicationReturnStatus OptimizeNLP(const SmartPtr<NLP>& nlp); 00083 00085 virtual ApplicationReturnStatus OptimizeNLP(const SmartPtr<NLP>& nlp, SmartPtr<AlgorithmBuilder>& alg_builder); 00086 00092 virtual ApplicationReturnStatus ReOptimizeTNLP(const SmartPtr<TNLP>& tnlp); 00093 00099 virtual ApplicationReturnStatus ReOptimizeNLP(const SmartPtr<NLP>& nlp); 00101 00104 virtual bool OpenOutputFile(std::string file_name, EJournalLevel print_level); 00105 00109 virtual SmartPtr<Journalist> Jnlst() 00110 { 00111 return jnlst_; 00112 } 00113 00116 virtual SmartPtr<RegisteredOptions> RegOptions() 00117 { 00118 return reg_options_; 00119 } 00120 00122 virtual SmartPtr<OptionsList> Options() 00123 { 00124 return options_; 00125 } 00126 00128 virtual SmartPtr<const OptionsList> Options() const 00129 { 00130 return ConstPtr(options_); 00131 } 00132 00135 virtual SmartPtr<SolveStatistics> Statistics(); 00136 00138 virtual SmartPtr<IpoptNLP> IpoptNLPObject(); 00139 00141 SmartPtr<IpoptData> IpoptDataObject(); 00142 00144 virtual SmartPtr<IpoptCalculatedQuantities> IpoptCQObject(); 00145 00147 SmartPtr<IpoptAlgorithm> AlgorithmObject(); 00149 00154 void PrintCopyrightMessage(); 00155 00158 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00160 00162 static void 00163 RegisterAllIpoptOptions(const SmartPtr<RegisteredOptions>& roptions); 00164 00165 private: 00175 // IpoptApplication(); 00176 00178 IpoptApplication(const IpoptApplication&); 00179 00181 void operator=(const IpoptApplication&); 00183 00186 ApplicationReturnStatus call_optimize(); 00187 00191 bool read_params_dat_; 00193 00195 SmartPtr<Journalist> jnlst_; 00196 00198 SmartPtr<RegisteredOptions> reg_options_; 00199 00201 SmartPtr<OptionsList> options_; 00202 00205 SmartPtr<SolveStatistics> statistics_; 00206 00209 SmartPtr<IpoptAlgorithm> alg_; 00210 00213 SmartPtr<IpoptNLP> ip_nlp_; 00214 00218 SmartPtr<IpoptData> ip_data_; 00219 00223 SmartPtr<IpoptCalculatedQuantities> ip_cq_; 00224 00227 SmartPtr<NLP> nlp_adapter_; 00228 00232 bool inexact_algorithm_; 00235 bool replace_bounds_; 00238 bool skip_finalize_solution_call_; 00240 }; 00241 00242 } // namespace Ipopt 00243 00244 extern "C" IPOPT_EXPORT(class Ipopt::IpoptApplication *) IpoptApplicationFactory(); 00245 00246 #endif