Ipopt Documentation  
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
IpInexactPDSolver.hpp
Go to the documentation of this file.
1 // Copyright (C) 2008 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // Authors: Andreas Waechter IBM 2008-09-09
6 
7 #ifndef __IPINEXACTPDSOLVER_HPP__
8 #define __IPINEXACTPDSOLVER_HPP__
9 
10 #include "IpAlgStrategy.hpp"
11 #include "IpAugSystemSolver.hpp"
13 #include "IpInexactCq.hpp"
14 
15 namespace Ipopt
16 {
17 
24 {
25 public:
32  AugSystemSolver& augSysSolver,
33  PDPerturbationHandler& perturbHandler
34  );
35 
37  virtual ~InexactPDSolver();
39 
40  bool InitializeImpl(
41  const OptionsList& options,
42  const std::string& prefix
43  );
44 
47  virtual bool Solve(
48  const IteratesVector& rhs,
49  IteratesVector& sol
50  );
51 
52  static void RegisterOptions(
54  );
55 
56 private:
71  const InexactPDSolver&
72  );
74 
77  {
78  InexactData& inexact_data = static_cast<InexactData&>(IpData().AdditionalData());
79  DBG_ASSERT(dynamic_cast<InexactData*>(&IpData().AdditionalData()));
80  return inexact_data;
81  }
82 
85  {
86  InexactCq& inexact_cq = static_cast<InexactCq&>(IpCq().AdditionalCq());
87  DBG_ASSERT(dynamic_cast<InexactCq*>(&IpCq().AdditionalCq()));
88  return inexact_cq;
89  }
90 
98 
102  void ComputeResiduals(
103  const SymMatrix& W,
104  const Matrix& J_c,
105  const Matrix& J_d,
106  const Matrix& Pd_L,
107  const Matrix& Pd_U,
108  const Vector& v_L,
109  const Vector& v_U,
110  const Vector& slack_s_L,
111  const Vector& slack_s_U,
112  const Vector& sigma_s,
113  const IteratesVector& rhs,
114  const IteratesVector& res,
115  IteratesVector& resid
116  );
117 
123  bool HessianRequiresChange();
124 
143 
148 
150 };
151 
152 } // namespace Ipopt
153 
154 #endif
bool HessianRequiresChange()
Method for checking if the Hessian matrix has to be modified.
bool InitializeImpl(const OptionsList &options, const std::string &prefix)
Implementation of the initialization method that has to be overloaded by for each derived class...
bool is_pardiso_
flag indicating if we are dealing with the Pardiso solver (temporary)
This is the implementation of the Primal-Dual System, allowing the usage of an inexact linear solver...
Specialized CompoundVector class specifically for the algorithm iterates.
InexactPDSolver()
Default Constructor.
This is the base class for all algorithm strategy objects.
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
double Number
Type of all numbers.
Definition: IpTypes.hpp:15
Vector Base Class.
Definition: IpVector.hpp:47
Class for handling the perturbation factors delta_x, delta_s, delta_c, and delta_d in the primal dual...
bool modify_hessian_with_slacks_
flag indicating if the Hessian for the (s,s) part should be modified with the slacks instead of the i...
SmartPtr< AugSystemSolver > augSysSolver_
Pointer to the Solver for the augmented system.
This is the base class for all derived symmetric matrix types.
Definition: IpSymMatrix.hpp:20
virtual ~InexactPDSolver()
Destructor.
Number tcc_theta_mu_exponent_
mu exponent when multiplied to theta in the tangential component condition
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:171
This class stores a list of user set options.
Base class for Solver for the augmented system.
Matrix Base Class.
Definition: IpMatrix.hpp:27
IpoptAdditionalData & AdditionalData()
Get access to additional data object.
InexactCq & InexCq()
Method to easily access Inexact calculated quantities.
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:17
#define DBG_ASSERT(test)
Definition: IpDebug.hpp:28
Class for all Chen-Goldfarb penalty method specific calculated quantities.
Definition: IpInexactCq.hpp:20
Class to organize all the additional data required by the Chen-Goldfarb penalty function algorithm...
SmartPtr< PDPerturbationHandler > perturbHandler_
Pointer to the Perturbation Handler.
InexactData & InexData()
Method to easily access Inexact data.
InexactPDSolver & operator=(const InexactPDSolver &)
Overloaded Assignment Operator.
virtual bool Solve(const IteratesVector &rhs, IteratesVector &sol)
Solve the primal dual system, given one right hand side.
Number tcc_theta_
theta factor in the tangential component condition
IpoptCalculatedQuantities & IpCq() const
Number tcc_psi_
Psi factor in the tangential component condition.
void ComputeResiduals(const SymMatrix &W, const Matrix &J_c, const Matrix &J_d, const Matrix &Pd_L, const Matrix &Pd_U, const Vector &v_L, const Vector &v_U, const Vector &slack_s_L, const Vector &slack_s_U, const Vector &sigma_s, const IteratesVector &rhs, const IteratesVector &res, IteratesVector &resid)
Internal function for computing the residual (resid) given the right hand side (rhs) and the solution...
Index inexact_regularization_ls_count_trigger_
Threshold on line search evaluation count to trigger Hessian modification.