Ipopt
trunk
|
00001 // Copyright (C) 2004, 2007 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id$ 00006 // 00007 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 00008 00009 #ifndef __IPPDFULLSPACESOLVER_HPP__ 00010 #define __IPPDFULLSPACESOLVER_HPP__ 00011 00012 #include "IpPDSystemSolver.hpp" 00013 #include "IpAugSystemSolver.hpp" 00014 #include "IpPDPerturbationHandler.hpp" 00015 00016 namespace Ipopt 00017 { 00018 00032 class PDFullSpaceSolver: public PDSystemSolver 00033 { 00034 public: 00040 PDFullSpaceSolver(AugSystemSolver& augSysSolver, 00041 PDPerturbationHandler& perturbHandler); 00042 00044 virtual ~PDFullSpaceSolver(); 00046 00047 /* overloaded from AlgorithmStrategyObject */ 00048 bool InitializeImpl(const OptionsList& options, 00049 const std::string& prefix); 00050 00053 virtual bool Solve(Number alpha, 00054 Number beta, 00055 const IteratesVector& rhs, 00056 IteratesVector& res, 00057 bool allow_inexact=false, 00058 bool improve_solution=false); 00059 00062 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00064 00065 private: 00075 PDFullSpaceSolver(); 00077 PDFullSpaceSolver& operator=(const PDFullSpaceSolver&); 00079 00083 SmartPtr<AugSystemSolver> augSysSolver_; 00085 SmartPtr<PDPerturbationHandler> perturbHandler_; 00087 00091 CachedResults<void*> dummy_cache_; 00094 bool augsys_improved_; 00096 00100 Index min_refinement_steps_; 00102 Index max_refinement_steps_; 00105 Number residual_ratio_max_; 00109 Number residual_ratio_singular_; 00112 Number residual_improvement_factor_; 00114 Number neg_curv_test_tol_; 00116 00123 bool SolveOnce(bool resolve_unmodified, 00124 bool pretend_singular, 00125 const SymMatrix& W, 00126 const Matrix& J_c, 00127 const Matrix& J_d, 00128 const Matrix& Px_L, 00129 const Matrix& Px_U, 00130 const Matrix& Pd_L, 00131 const Matrix& Pd_U, 00132 const Vector& z_L, 00133 const Vector& z_U, 00134 const Vector& v_L, 00135 const Vector& v_U, 00136 const Vector& slack_x_L, 00137 const Vector& slack_x_U, 00138 const Vector& slack_s_L, 00139 const Vector& slack_s_U, 00140 const Vector& sigma_x, 00141 const Vector& sigma_s, 00142 Number alpha, 00143 Number beta, 00144 const IteratesVector& rhs, 00145 IteratesVector& res); 00146 00150 void ComputeResiduals(const SymMatrix& W, 00151 const Matrix& J_c, 00152 const Matrix& J_d, 00153 const Matrix& Px_L, 00154 const Matrix& Px_U, 00155 const Matrix& Pd_L, 00156 const Matrix& Pd_U, 00157 const Vector& z_L, 00158 const Vector& z_U, 00159 const Vector& v_L, 00160 const Vector& v_U, 00161 const Vector& slack_x_L, 00162 const Vector& slack_x_U, 00163 const Vector& slack_s_L, 00164 const Vector& slack_s_U, 00165 const Vector& sigma_x, 00166 const Vector& sigma_s, 00167 Number alpha, 00168 Number beta, 00169 const IteratesVector& rhs, 00170 const IteratesVector& res, 00171 IteratesVector& resid); 00172 00176 Number ComputeResidualRatio(const IteratesVector& rhs, 00177 const IteratesVector& res, 00178 const IteratesVector& resid); 00179 00183 void SinvBlrmZPTdBr(Number alpha, const Vector& S, 00184 const Vector& R, const Vector& Z, 00185 const Matrix& P, const Vector&g, Vector& X); 00187 }; 00188 00189 } // namespace Ipopt 00190 00191 #endif