Ipopt  3.12.8
IpLowRankAugSystemSolver.hpp
Go to the documentation of this file.
1 // Copyright (C) 2005, 2006 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpLowRankAugSystemSolver.hpp 1861 2010-12-21 21:34:47Z andreasw $
6 //
7 // Authors: Andreas Waechter IBM 2005-12-27
8 
9 #ifndef __IP_LOWRANKAUGSYSTEMSOLVER_HPP__
10 #define __IP_LOWRANKAUGSYSTEMSOLVER_HPP__
11 
12 #include "IpAugSystemSolver.hpp"
13 #include "IpDenseGenMatrix.hpp"
14 #include "IpMultiVectorMatrix.hpp"
15 #include "IpDiagMatrix.hpp"
16 
17 namespace Ipopt
18 {
19 
25  {
26  public:
30  LowRankAugSystemSolver(AugSystemSolver& aug_system_solver);
31 
33  virtual ~LowRankAugSystemSolver();
35 
37  bool InitializeImpl(const OptionsList& options,
38  const std::string& prefix);
39 
43  virtual ESymSolverStatus Solve(
44  const SymMatrix* W,
45  double W_factor,
46  const Vector* D_x,
47  double delta_x,
48  const Vector* D_s,
49  double delta_s,
50  const Matrix* J_c,
51  const Vector* D_c,
52  double delta_c,
53  const Matrix* J_d,
54  const Vector* D_d,
55  double delta_d,
56  const Vector& rhs_x,
57  const Vector& rhs_s,
58  const Vector& rhs_c,
59  const Vector& rhs_d,
60  Vector& sol_x,
61  Vector& sol_s,
62  Vector& sol_c,
63  Vector& sol_d,
64  bool check_NegEVals,
65  Index numberOfNegEVals);
66 
73  virtual Index NumberOfNegEVals() const;
74 
78  virtual bool ProvidesInertia() const;
79 
86  virtual bool IncreaseQuality();
87 
88  private:
101 
103  void operator=(const LowRankAugSystemSolver&);
105 
111 
122  double w_factor_;
128  double delta_x_;
134  double delta_s_;
144  double delta_c_;
154  double delta_d_;
156 
172 
181 
187  const SymMatrix* W,
188  double W_factor,
189  const Vector* D_x,
190  double delta_x,
191  const Vector* D_s,
192  double delta_s,
193  const Matrix& J_c,
194  const Vector* D_c,
195  double delta_c,
196  const Matrix& J_d,
197  const Vector* D_d,
198  double delta_d,
199  const Vector& proto_rhs_x,
200  const Vector& proto_rhs_s,
201  const Vector& proto_rhs_c,
202  const Vector& proto_rhs_d,
203  bool check_NegEVals,
204  Index numberOfNegEVals);
205 
212  const Vector* D_x,
213  double delta_x,
214  const Vector* D_s,
215  double delta_s,
216  const Matrix& J_c,
217  const Vector* D_c,
218  double delta_c,
219  const Matrix& J_d,
220  const Vector* D_d,
221  double delta_d,
222  const Vector& proto_rhs_x,
223  const Vector& proto_rhs_s,
224  const Vector& proto_rhs_c,
225  const Vector& proto_rhs_d,
226  const MultiVectorMatrix& V,
227  const SmartPtr<const Matrix>& P_LM,
230  SmartPtr<MultiVectorMatrix>& Vtilde1_x,
231  bool check_NegEVals,
232  Index numberOfNegEVals);
233 
238  const SymMatrix* W,
239  double W_factor,
240  const Vector* D_x,
241  double delta_x,
242  const Vector* D_s,
243  double delta_s,
244  const Matrix& J_c,
245  const Vector* D_c,
246  double delta_c,
247  const Matrix& J_d,
248  const Vector* D_d,
249  double delta_d);
251 
252  };
253 
254 } // namespace Ipopt
255 
256 #endif
double delta_c_
Most recent value of delta_c from Set method.
virtual bool ProvidesInertia() const
Query whether inertia is computed by linear solver.
TaggedObject::Tag j_c_tag_
Tag for J_c matrix.
ESymSolverStatus
Enum to report outcome of a linear solve.
TaggedObject::Tag d_x_tag_
Tag for D_x vector, representing the diagonal matrix D_x.
bool InitializeImpl(const OptionsList &options, const std::string &prefix)
overloaded from AlgorithmStrategyObject
TaggedObject::Tag d_s_tag_
Tag for D_s vector, representing the diagonal matrix D_s.
SmartPtr< AugSystemSolver > aug_system_solver_
The augmented system solver object that should be used for the factorization of the augmented system ...
Vector Base Class.
Definition: IpVector.hpp:47
LowRankAugSystemSolver()
Default constructor.
TaggedObject::Tag w_tag_
Tag for W matrix.
double w_factor_
Most recent value of W_factor.
This is the base class for all derived symmetric matrix types.
Definition: IpSymMatrix.hpp:23
TaggedObject::Tag d_d_tag_
Tag for D_d vector, representing the diagonal matrix D_d.
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:172
This class stores a list of user set options.
virtual Index NumberOfNegEVals() const
Number of negative eigenvalues detected during last solve.
Base class for Solver for the augmented system.
virtual bool IncreaseQuality()
Request to increase quality of solution for next solve.
ESymSolverStatus SolveMultiVector(const Vector *D_x, double delta_x, const Vector *D_s, double delta_s, const Matrix &J_c, const Vector *D_c, double delta_c, const Matrix &J_d, const Vector *D_d, double delta_d, const Vector &proto_rhs_x, const Vector &proto_rhs_s, const Vector &proto_rhs_c, const Vector &proto_rhs_d, const MultiVectorMatrix &V, const SmartPtr< const Matrix > &P_LM, SmartPtr< MultiVectorMatrix > &V_x, SmartPtr< MultiVectorMatrix > &Vtilde1, SmartPtr< MultiVectorMatrix > &Vtilde1_x, bool check_NegEVals, Index numberOfNegEVals)
Method for solving the augmented system without low-rank update for multiple right hand sides that ar...
Solver for the augmented system with LowRankUpdateSymMatrix Hessian matrices.
TaggedObject::Tag d_c_tag_
Tag for D_c vector, representing the diagonal matrix D_c.
Matrix Base Class.
Definition: IpMatrix.hpp:27
Index num_neg_evals_
Stores the number of negative eigenvalues detected during most recent factorization.
virtual ~LowRankAugSystemSolver()
Default destructor.
TaggedObject::Tag j_d_tag_
Tag for J_d matrix.
Class for Matrices with few columns that consists of Vectors.
SmartPtr< MultiVectorMatrix > Vtilde1_
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
bool AugmentedSystemRequiresChange(const SymMatrix *W, double W_factor, const Vector *D_x, double delta_x, const Vector *D_s, double delta_s, const Matrix &J_c, const Vector *D_c, double delta_c, const Matrix &J_d, const Vector *D_d, double delta_d)
Method that compares the tags of the data for the matrix with those from the previous call...
unsigned int Tag
Type for the Tag values.
SmartPtr< const CompoundVectorSpace > compound_sol_vecspace_
Vector space for Compound vectors that capture the entire right hand side and solution vectors ...
void operator=(const LowRankAugSystemSolver &)
Overloaded Equals Operator.
SmartPtr< MultiVectorMatrix > Utilde2_
ESymSolverStatus UpdateFactorization(const SymMatrix *W, double W_factor, const Vector *D_x, double delta_x, const Vector *D_s, double delta_s, const Matrix &J_c, const Vector *D_c, double delta_c, const Matrix &J_d, const Vector *D_d, double delta_d, const Vector &proto_rhs_x, const Vector &proto_rhs_s, const Vector &proto_rhs_c, const Vector &proto_rhs_d, bool check_NegEVals, Index numberOfNegEVals)
Method for updating the factorization, including J1_, J2_, Vtilde1_, Utilde2, Wdiag_, compound_sol_vecspace_.
virtual ESymSolverStatus Solve(const SymMatrix *W, double W_factor, const Vector *D_x, double delta_x, const Vector *D_s, double delta_s, const Matrix *J_c, const Vector *D_c, double delta_c, const Matrix *J_d, const Vector *D_d, double delta_d, const Vector &rhs_x, const Vector &rhs_s, const Vector &rhs_c, const Vector &rhs_d, Vector &sol_x, Vector &sol_s, Vector &sol_c, Vector &sol_d, bool check_NegEVals, Index numberOfNegEVals)
Set up the augmented system and solve it for a given right hand side.
double delta_s_
Most recent value of delta_s from Set method.
double delta_x_
Most recent value of delta_x from Set method.
SmartPtr< DiagMatrix > Wdiag_
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update...
double delta_d_
Most recent value of delta_d from Set method.