Solver for the augmented system with LowRankUpdateSymMatrix Hessian matrices. More...
#include <IpLowRankAugSystemSolver.hpp>
Public Member Functions | |
bool | InitializeImpl (const OptionsList &options, const std::string &prefix) |
overloaded from AlgorithmStrategyObject | |
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. | |
virtual Index | NumberOfNegEVals () const |
Number of negative eigenvalues detected during last solve. | |
virtual bool | ProvidesInertia () const |
Query whether inertia is computed by linear solver. | |
virtual bool | IncreaseQuality () |
Request to increase quality of solution for next solve. | |
Constructors/Destructors | |
LowRankAugSystemSolver (AugSystemSolver &aug_system_solver) | |
Constructor using only a linear solver object. | |
virtual | ~LowRankAugSystemSolver () |
Default destructor. | |
Private Member Functions | |
Default Compiler Generated Methods | |
LowRankAugSystemSolver () | |
Default constructor. | |
LowRankAugSystemSolver (const LowRankAugSystemSolver &) | |
Copy Constructor. | |
void | operator= (const LowRankAugSystemSolver &) |
Overloaded Equals Operator. | |
Internal functions | |
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_. | |
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 are provided as MultiVectorMatrix. | |
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. | |
Private Attributes | |
SmartPtr< AugSystemSolver > | aug_system_solver_ |
The augmented system solver object that should be used for the factorization of the augmented system without the low-rank update. | |
Index | num_neg_evals_ |
Stores the number of negative eigenvalues detected during most recent factorization. | |
Tags and values to track in order to decide whether the | |
TaggedObject::Tag | w_tag_ |
Tag for W matrix. | |
double | w_factor_ |
Most recent value of W_factor. | |
TaggedObject::Tag | d_x_tag_ |
Tag for D_x vector, representing the diagonal matrix D_x. | |
double | delta_x_ |
Most recent value of delta_x from Set method. | |
TaggedObject::Tag | d_s_tag_ |
Tag for D_s vector, representing the diagonal matrix D_s. | |
double | delta_s_ |
Most recent value of delta_s from Set method. | |
TaggedObject::Tag | j_c_tag_ |
Tag for J_c matrix. | |
TaggedObject::Tag | d_c_tag_ |
Tag for D_c vector, representing the diagonal matrix D_c. | |
double | delta_c_ |
Most recent value of delta_c from Set method. | |
TaggedObject::Tag | j_d_tag_ |
Tag for J_d matrix. | |
TaggedObject::Tag | d_d_tag_ |
Tag for D_d vector, representing the diagonal matrix D_d. | |
double | delta_d_ |
Most recent value of delta_d from Set method. | |
Information to be stored in order to resolve for the | |
bool | first_call_ |
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update. | |
SmartPtr< DenseGenMatrix > | J1_ |
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update. | |
SmartPtr< DenseGenMatrix > | J2_ |
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update. | |
SmartPtr< MultiVectorMatrix > | Vtilde1_ |
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update. | |
SmartPtr< MultiVectorMatrix > | Utilde2_ |
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update. | |
SmartPtr< DiagMatrix > | Wdiag_ |
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update. | |
SmartPtr< const CompoundVectorSpace > | compound_sol_vecspace_ |
Vector space for Compound vectors that capture the entire right hand side and solution vectors . |
Solver for the augmented system with LowRankUpdateSymMatrix Hessian matrices.
Definition at line 23 of file IpLowRankAugSystemSolver.hpp.
Ipopt::LowRankAugSystemSolver::LowRankAugSystemSolver | ( | AugSystemSolver & | aug_system_solver | ) |
Constructor using only a linear solver object.
virtual Ipopt::LowRankAugSystemSolver::~LowRankAugSystemSolver | ( | ) | [virtual] |
Default destructor.
Ipopt::LowRankAugSystemSolver::LowRankAugSystemSolver | ( | ) | [private] |
Default constructor.
Ipopt::LowRankAugSystemSolver::LowRankAugSystemSolver | ( | const LowRankAugSystemSolver & | ) | [private] |
Copy Constructor.
bool Ipopt::LowRankAugSystemSolver::InitializeImpl | ( | const OptionsList & | options, | |
const std::string & | prefix | |||
) |
overloaded from AlgorithmStrategyObject
virtual ESymSolverStatus Ipopt::LowRankAugSystemSolver::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 | |||
) | [virtual] |
Set up the augmented system and solve it for a given right hand side.
virtual Index Ipopt::LowRankAugSystemSolver::NumberOfNegEVals | ( | ) | const [virtual] |
Number of negative eigenvalues detected during last solve.
Returns the number of negative eigenvalues of the most recent factorized matrix. This must not be called if the linear solver does not compute this quantities (see ProvidesInertia).
virtual bool Ipopt::LowRankAugSystemSolver::ProvidesInertia | ( | ) | const [virtual] |
Query whether inertia is computed by linear solver.
Returns true, if linear solver provides inertia.
virtual bool Ipopt::LowRankAugSystemSolver::IncreaseQuality | ( | ) | [virtual] |
Request to increase quality of solution for next solve.
Ask underlying linear solver to increase quality of solution for the next solve (e.g. increase pivot tolerance). Returns false, if this is not possible (e.g. maximal pivot tolerance already used.)
void Ipopt::LowRankAugSystemSolver::operator= | ( | const LowRankAugSystemSolver & | ) | [private] |
Overloaded Equals Operator.
ESymSolverStatus Ipopt::LowRankAugSystemSolver::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 | |||
) | [private] |
Method for updating the factorization, including J1_, J2_, Vtilde1_, Utilde2, Wdiag_, compound_sol_vecspace_.
ESymSolverStatus Ipopt::LowRankAugSystemSolver::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 | |||
) | [private] |
Method for solving the augmented system without low-rank update for multiple right hand sides that are provided as MultiVectorMatrix.
The result is returned as a MultiVectorMatrix in Vtilde1. V_x and Vtilde1_x are V and Vtilde1 in the x-space.
bool Ipopt::LowRankAugSystemSolver::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 | |||
) | [private] |
Method that compares the tags of the data for the matrix with those from the previous call.
Returns true, if there was a change and the factorization has to be updated.
SmartPtr<AugSystemSolver> Ipopt::LowRankAugSystemSolver::aug_system_solver_ [private] |
The augmented system solver object that should be used for the factorization of the augmented system without the low-rank update.
Definition at line 109 of file IpLowRankAugSystemSolver.hpp.
Tag for W matrix.
If W has been given to Set as NULL, then this tag is set to 0
Definition at line 119 of file IpLowRankAugSystemSolver.hpp.
double Ipopt::LowRankAugSystemSolver::w_factor_ [private] |
Most recent value of W_factor.
Definition at line 121 of file IpLowRankAugSystemSolver.hpp.
Tag for D_x vector, representing the diagonal matrix D_x.
If D_x has been given to Set as NULL, then this tag is set to 0
Definition at line 125 of file IpLowRankAugSystemSolver.hpp.
double Ipopt::LowRankAugSystemSolver::delta_x_ [private] |
Most recent value of delta_x from Set method.
Definition at line 127 of file IpLowRankAugSystemSolver.hpp.
Tag for D_s vector, representing the diagonal matrix D_s.
If D_s has been given to Set as NULL, then this tag is set to 0
Definition at line 131 of file IpLowRankAugSystemSolver.hpp.
double Ipopt::LowRankAugSystemSolver::delta_s_ [private] |
Most recent value of delta_s from Set method.
Definition at line 133 of file IpLowRankAugSystemSolver.hpp.
Tag for J_c matrix.
If J_c has been given to Set as NULL, then this tag is set to 0
Definition at line 137 of file IpLowRankAugSystemSolver.hpp.
Tag for D_c vector, representing the diagonal matrix D_c.
If D_c has been given to Set as NULL, then this tag is set to 0
Definition at line 141 of file IpLowRankAugSystemSolver.hpp.
double Ipopt::LowRankAugSystemSolver::delta_c_ [private] |
Most recent value of delta_c from Set method.
Definition at line 143 of file IpLowRankAugSystemSolver.hpp.
Tag for J_d matrix.
If J_d has been given to Set as NULL, then this tag is set to 0
Definition at line 147 of file IpLowRankAugSystemSolver.hpp.
Tag for D_d vector, representing the diagonal matrix D_d.
If D_d has been given to Set as NULL, then this tag is set to 0
Definition at line 151 of file IpLowRankAugSystemSolver.hpp.
double Ipopt::LowRankAugSystemSolver::delta_d_ [private] |
Most recent value of delta_d from Set method.
Definition at line 153 of file IpLowRankAugSystemSolver.hpp.
bool Ipopt::LowRankAugSystemSolver::first_call_ [private] |
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update.
Definition at line 159 of file IpLowRankAugSystemSolver.hpp.
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update.
Definition at line 160 of file IpLowRankAugSystemSolver.hpp.
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update.
Definition at line 161 of file IpLowRankAugSystemSolver.hpp.
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update.
Definition at line 162 of file IpLowRankAugSystemSolver.hpp.
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update.
Definition at line 163 of file IpLowRankAugSystemSolver.hpp.
Hessian Matrix passed to the augmented system solver solving the matrix without the low-rank update.
Definition at line 166 of file IpLowRankAugSystemSolver.hpp.
Vector space for Compound vectors that capture the entire right hand side and solution vectors .
Definition at line 169 of file IpLowRankAugSystemSolver.hpp.
Stores the number of negative eigenvalues detected during most recent factorization.
This is what is returned by NumberOfNegEVals() of this class. It usually is the number of negative eigenvalues retured from the aug_system_solver solve, but if a Cholesky factorization could not be performed, the returned value is one more than this what the aug_system_solver returned.
Definition at line 179 of file IpLowRankAugSystemSolver.hpp.