00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IPALGBUILDER_HPP__
00010 #define __IPALGBUILDER_HPP__
00011
00012 #include "IpIpoptAlg.hpp"
00013 #include "IpReferenced.hpp"
00014 #include "IpAugSystemSolver.hpp"
00015 #include "IpPDSystemSolver.hpp"
00016
00017 namespace Ipopt
00018 {
00019
00020
00021 class IterationOutput;
00022 class HessianUpdater;
00023 class ConvergenceCheck;
00024 class SearchDirectionCalculator;
00025 class EqMultiplierCalculator;
00026 class IterateInitializer;
00027 class LineSearch;
00028 class MuUpdate;
00029
00049 class AlgorithmBuilder : public ReferencedObject
00050 {
00051 public:
00055 AlgorithmBuilder(SmartPtr<AugSystemSolver> custom_solver=NULL);
00056
00058 virtual ~AlgorithmBuilder()
00059 {}
00060
00062
00066 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00068
00079
00084 virtual SmartPtr<SymLinearSolver>
00085 SymLinearSolverFactory(const Journalist& jnlst,
00086 const OptionsList& options,
00087 const std::string& prefix);
00088
00094 SmartPtr<SymLinearSolver> GetSymLinearSolver(const Journalist& jnlst,
00095 const OptionsList& options,
00096 const std::string& prefix);
00097
00105 virtual SmartPtr<AugSystemSolver>
00106 AugSystemSolverFactory(const Journalist& jnlst,
00107 const OptionsList& options,
00108 const std::string& prefix);
00109
00115 SmartPtr<AugSystemSolver> GetAugSystemSolver(const Journalist& jnlst,
00116 const OptionsList& options,
00117 const std::string& prefix);
00118
00128 virtual SmartPtr<PDSystemSolver>
00129 PDSystemSolverFactory(const Journalist& jnlst,
00130 const OptionsList& options,
00131 const std::string& prefix);
00132
00138 SmartPtr<PDSystemSolver> GetPDSystemSolver(const Journalist& jnlst,
00139 const OptionsList& options,
00140 const std::string& prefix);
00142
00149 virtual void BuildIpoptObjects(const Journalist& jnlst,
00150 const OptionsList& options,
00151 const std::string& prefix,
00152 const SmartPtr<NLP>& nlp,
00153 SmartPtr<IpoptNLP>& ip_nlp,
00154 SmartPtr<IpoptData>& ip_data,
00155 SmartPtr<IpoptCalculatedQuantities>& ip_cq);
00156
00173 virtual SmartPtr<IpoptAlgorithm> BuildBasicAlgorithm(const Journalist& jnlst,
00174 const OptionsList& options,
00175 const std::string& prefix);
00176
00183 virtual SmartPtr<IterationOutput>
00184 BuildIterationOutput(const Journalist& jnlst,
00185 const OptionsList& options,
00186 const std::string& prefix);
00187
00194 virtual SmartPtr<HessianUpdater>
00195 BuildHessianUpdater(const Journalist& jnlst,
00196 const OptionsList& options,
00197 const std::string& prefix);
00198
00205 virtual SmartPtr<ConvergenceCheck>
00206 BuildConvergenceCheck(const Journalist& jnlst,
00207 const OptionsList& options,
00208 const std::string& prefix);
00209
00223 virtual SmartPtr<SearchDirectionCalculator>
00224 BuildSearchDirectionCalculator(const Journalist& jnlst,
00225 const OptionsList& options,
00226 const std::string& prefix);
00227
00239 virtual SmartPtr<EqMultiplierCalculator>
00240 BuildEqMultiplierCalculator(const Journalist& jnlst,
00241 const OptionsList& options,
00242 const std::string& prefix);
00243
00256 virtual SmartPtr<IterateInitializer>
00257 BuildIterateInitializer(const Journalist& jnlst,
00258 const OptionsList& options,
00259 const std::string& prefix);
00260
00281 virtual SmartPtr<LineSearch> BuildLineSearch(const Journalist& jnlst,
00282 const OptionsList& options,
00283 const std::string& prefix);
00284
00301 virtual SmartPtr<MuUpdate> BuildMuUpdate(const Journalist& jnlst,
00302 const OptionsList& options,
00303 const std::string& prefix);
00305
00306 private:
00316
00317
00319 AlgorithmBuilder(const AlgorithmBuilder&);
00320
00322 void operator=(const AlgorithmBuilder&);
00324
00333 SmartPtr<IterationOutput> IterOutput_;
00334 SmartPtr<HessianUpdater> HessUpdater_;
00335 SmartPtr<ConvergenceCheck> ConvCheck_;
00336 SmartPtr<SearchDirectionCalculator> SearchDirCalc_;
00337 SmartPtr<EqMultiplierCalculator> EqMultCalculator_;
00338 SmartPtr<IterateInitializer> IterInitializer_;
00339 SmartPtr<LineSearch> LineSearch_;
00340 SmartPtr<MuUpdate> MuUpdate_;
00342
00348 SmartPtr<SymLinearSolver> SymSolver_;
00349 SmartPtr<AugSystemSolver> AugSolver_;
00350 SmartPtr<PDSystemSolver> PDSolver_;
00352
00355 SmartPtr<AugSystemSolver> custom_solver_;
00356
00357 };
00358 }
00359
00360 #endif