00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IPALGSTRATEGY_HPP__
00010 #define __IPALGSTRATEGY_HPP__
00011
00012 #include "IpOptionsList.hpp"
00013 #include "IpJournalist.hpp"
00014 #include "IpIpoptCalculatedQuantities.hpp"
00015 #include "IpIpoptNLP.hpp"
00016 #include "IpIpoptData.hpp"
00017
00018 namespace Ipopt
00019 {
00020
00035 class AlgorithmStrategyObject : public ReferencedObject
00036 {
00037 public:
00041 AlgorithmStrategyObject()
00042 :
00043 initialize_called_(false)
00044 {}
00045
00047 virtual ~AlgorithmStrategyObject()
00048 {}
00050
00066 bool Initialize(const Journalist& jnlst,
00067 IpoptNLP& ip_nlp,
00068 IpoptData& ip_data,
00069 IpoptCalculatedQuantities& ip_cq,
00070 const OptionsList& options,
00071 const std::string& prefix)
00072 {
00073 initialize_called_ = true;
00074
00075 jnlst_ = &jnlst;
00076 ip_nlp_ = &ip_nlp;
00077 ip_data_ = &ip_data;
00078 ip_cq_ = &ip_cq;
00079
00080 bool retval = InitializeImpl(options, prefix);
00081 if (!retval) {
00082 initialize_called_ = false;
00083 }
00084
00085 return retval;
00086 }
00087
00092 bool ReducedInitialize(const Journalist& jnlst,
00093 const OptionsList& options,
00094 const std::string& prefix)
00095 {
00096 initialize_called_ = true;
00097
00098 jnlst_ = &jnlst;
00099 ip_nlp_ = NULL;
00100 ip_data_ = NULL;
00101 ip_cq_ = NULL;
00102
00103 bool retval = InitializeImpl(options, prefix);
00104 if (!retval) {
00105 initialize_called_ = false;
00106 }
00107
00108 return retval;
00109 }
00110
00111 protected:
00114 virtual bool InitializeImpl(const OptionsList& options,
00115 const std::string& prefix)=0;
00116
00120 const Journalist& Jnlst() const
00121 {
00122 DBG_ASSERT(initialize_called_);
00123 return *jnlst_;
00124 }
00125 IpoptNLP& IpNLP() const
00126 {
00127 DBG_ASSERT(initialize_called_);
00128 DBG_ASSERT(IsValid(ip_nlp_));
00129 return *ip_nlp_;
00130 }
00131 IpoptData& IpData() const
00132 {
00133 DBG_ASSERT(initialize_called_);
00134 DBG_ASSERT(IsValid(ip_data_));
00135 return *ip_data_;
00136 }
00137 IpoptCalculatedQuantities& IpCq() const
00138 {
00139 DBG_ASSERT(initialize_called_);
00140 DBG_ASSERT(IsValid(ip_cq_));
00141 return *ip_cq_;
00142 }
00143 bool HaveIpData() const
00144 {
00145 return IsValid(ip_data_);
00146 }
00148
00149 private:
00159
00160
00161
00163 AlgorithmStrategyObject(const AlgorithmStrategyObject&);
00164
00166 void operator=(const AlgorithmStrategyObject&);
00168
00172 SmartPtr<const Journalist> jnlst_;
00173 SmartPtr<IpoptNLP> ip_nlp_;
00174 SmartPtr<IpoptData> ip_data_;
00175 SmartPtr<IpoptCalculatedQuantities> ip_cq_;
00177
00180 bool initialize_called_;
00181 };
00182
00183 }
00184
00185 #endif