Ipopt  3.11.9
IpLimMemQuasiNewtonUpdater.hpp
Go to the documentation of this file.
1 // Copyright (C) 2005, 2010 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpLimMemQuasiNewtonUpdater.hpp 1861 2010-12-21 21:34:47Z andreasw $
6 //
7 // Authors: Andreas Waechter IBM 2005-12-26
8 
9 #ifndef __IPLIMMEMQUASINEWTONUPDATER_HPP__
10 #define __IPLIMMEMQUASINEWTONUPDATER_HPP__
11 
12 #include "IpHessianUpdater.hpp"
14 #include "IpMultiVectorMatrix.hpp"
15 #include "IpDenseVector.hpp"
16 #include "IpDenseGenMatrix.hpp"
17 #include "IpDenseSymMatrix.hpp"
18 
19 namespace Ipopt
20 {
21 
26  {
27  public:
31  LimMemQuasiNewtonUpdater(bool update_for_resto);
32 
35  {}
37 
39  virtual bool InitializeImpl(const OptionsList& options,
40  const std::string& prefix);
41 
44  virtual void UpdateHessian();
45 
48  static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
50 
51  private:
62 
66 
69 
76  {
77  BFGS=0,
79  };
84  {
90  };
107 
113  const bool update_for_resto_;
131 
135 
221 
228  bool CheckSkippingBFGS(Vector& s_new, Vector& y_new);
233  bool UpdateInternalData(const Vector& s_new, const Vector& y_new,
234  SmartPtr<Vector> ypart_new);
241  const Vector& v_new);
248  Number v_new);
257  const MultiVectorMatrix& S,
258  const MultiVectorMatrix& Y);
266  const MultiVectorMatrix& S);
275  const MultiVectorMatrix& S,
276  const MultiVectorMatrix& DRS);
277 
282  void ShiftMultiVector(SmartPtr<MultiVectorMatrix>& V, const Vector& v_new);
296  const MultiVectorMatrix& S,
297  const MultiVectorMatrix& Y);
304  const MultiVectorMatrix& S);
311  const MultiVectorMatrix& S,
312  const MultiVectorMatrix& DRS);
315  void RecalcY(Number eta, const Vector& DR_x,
317  MultiVectorMatrix& Ypart,
320  void RecalcD(MultiVectorMatrix& S,
324  void RecalcL(MultiVectorMatrix& S,
336  bool SplitEigenvalues(DenseGenMatrix& Q, const DenseVector& E,
337  SmartPtr<DenseGenMatrix>& Qminus,
338  SmartPtr<DenseGenMatrix>& Qplus);
351  void SetW();
353 
354  };
355 
356 } // namespace Ipopt
357 
358 #endif
Ipopt::LimMemQuasiNewtonUpdater::SCALAR2
@ SCALAR2
Definition: IpLimMemQuasiNewtonUpdater.hpp:86
Ipopt::LimMemQuasiNewtonUpdater::AugmentLMatrix
void AugmentLMatrix(SmartPtr< DenseGenMatrix > &V, const MultiVectorMatrix &S, const MultiVectorMatrix &Y)
Given a strictly-lower triangular square DenseGenMatrix V, create a new DenseGenMatrixSpace with one ...
Ipopt::LimMemQuasiNewtonUpdater::CheckSkippingBFGS
bool CheckSkippingBFGS(Vector &s_new, Vector &y_new)
Method deciding whether the BFGS update should be skipped.
Ipopt::LimMemQuasiNewtonUpdater::SCALAR4
@ SCALAR4
Definition: IpLimMemQuasiNewtonUpdater.hpp:88
Ipopt::LimMemQuasiNewtonUpdater::~LimMemQuasiNewtonUpdater
virtual ~LimMemQuasiNewtonUpdater()
Default destructor.
Definition: IpLimMemQuasiNewtonUpdater.hpp:34
Ipopt::LimMemQuasiNewtonUpdater::ShiftSTDRSMatrix
void ShiftSTDRSMatrix(SmartPtr< DenseSymMatrix > &V, const MultiVectorMatrix &S, const MultiVectorMatrix &DRS)
Given a DenseSymMatrix V, shift everything up one row and column, and fill the new entries as s_i^TDR...
IpLowRankUpdateSymMatrix.hpp
Ipopt::LimMemQuasiNewtonUpdater::RestoreInternalDataBackup
void RestoreInternalDataBackup()
Restore the copy of the pointers to the internal data most recently stored with StoreInternalDataBack...
Ipopt::LimMemQuasiNewtonUpdater::U_
SmartPtr< MultiVectorMatrix > U_
U in LowRankUpdateMatrix from last update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:163
Ipopt::LimMemQuasiNewtonUpdater::AugmentDenseVector
void AugmentDenseVector(SmartPtr< DenseVector > &V, Number v_new)
Given a DenseVector V, create a new DenseVectorSpace with one more row, and return V as a member of t...
Ipopt::MultiVectorMatrix
Class for Matrices with few columns that consists of Vectors.
Definition: IpMultiVectorMatrix.hpp:25
Ipopt::LimMemQuasiNewtonUpdater::D_old_
SmartPtr< DenseVector > D_old_
Diagonal elements D_k for compact formulation from last update (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:196
Ipopt::LimMemQuasiNewtonUpdater::SCALAR1
@ SCALAR1
Definition: IpLimMemQuasiNewtonUpdater.hpp:85
Ipopt::LimMemQuasiNewtonUpdater::limited_memory_update_type_
LMUpdateType limited_memory_update_type_
Type of Hessian update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:81
IpDenseSymMatrix.hpp
Ipopt::LimMemQuasiNewtonUpdater::sigma_
Number sigma_
First term (starting matrix) for the approximation.
Definition: IpLimMemQuasiNewtonUpdater.hpp:159
Ipopt::LimMemQuasiNewtonUpdater::last_jac_d_
SmartPtr< const Matrix > last_jac_d_
Jacobian for inequality constraints w.r.t x at x_last.
Definition: IpLimMemQuasiNewtonUpdater.hpp:182
Ipopt::LimMemQuasiNewtonUpdater::ShiftLMatrix
void ShiftLMatrix(SmartPtr< DenseGenMatrix > &V, const MultiVectorMatrix &S, const MultiVectorMatrix &Y)
Given a strictly-lower triangular square DenseGenMatrix V, shift everything one row and column up,...
Ipopt::LimMemQuasiNewtonUpdater::SdotS_uptodate_
bool SdotS_uptodate_
Flag indicating whether SdotS_ is update to date from most recent update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:169
Ipopt::LimMemQuasiNewtonUpdater::V_
SmartPtr< MultiVectorMatrix > V_
V in LowRankUpdateMatrix from last update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:161
Ipopt::LimMemQuasiNewtonUpdater::Y_
SmartPtr< MultiVectorMatrix > Y_
y pairs for the recent iterations.
Definition: IpLimMemQuasiNewtonUpdater.hpp:145
Ipopt::LimMemQuasiNewtonUpdater::SCALAR3
@ SCALAR3
Definition: IpLimMemQuasiNewtonUpdater.hpp:87
Ipopt::LimMemQuasiNewtonUpdater::curr_lm_memory_old_
Index curr_lm_memory_old_
current size of limited memory
Definition: IpLimMemQuasiNewtonUpdater.hpp:184
IpMultiVectorMatrix.hpp
Ipopt::LimMemQuasiNewtonUpdater::curr_red_DR_x_
SmartPtr< const Vector > curr_red_DR_x_
Current DR_x scaling factors in the restoration phase objective function in the smaller space for the...
Definition: IpLimMemQuasiNewtonUpdater.hpp:127
Ipopt::LimMemQuasiNewtonUpdater::B0_old_
SmartPtr< Vector > B0_old_
First term (starting matrix) for the approximation (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:200
Ipopt::DenseGenMatrix
Class for dense general matrices.
Definition: IpDenseGenMatrix.hpp:26
Ipopt::LimMemQuasiNewtonUpdater::BFGS
@ BFGS
Definition: IpLimMemQuasiNewtonUpdater.hpp:77
Ipopt::LimMemQuasiNewtonUpdater::lm_skipped_iter_
Index lm_skipped_iter_
Counter for successive iterations in which the update was skipped.
Definition: IpLimMemQuasiNewtonUpdater.hpp:134
Ipopt::LimMemQuasiNewtonUpdater::h_space_
SmartPtr< const LowRankUpdateSymMatrixSpace > h_space_
Matrix space for the low-rank Hessian approximation.
Definition: IpLimMemQuasiNewtonUpdater.hpp:68
Ipopt
Definition: matlabjournal.hpp:14
Ipopt::Number
double Number
Type of all numbers.
Definition: IpTypes.hpp:17
Ipopt::LimMemQuasiNewtonUpdater::limited_memory_special_for_resto_
bool limited_memory_special_for_resto_
Flag indicating if Hessian approximation should be done in a special manner for the restoration phase...
Definition: IpLimMemQuasiNewtonUpdater.hpp:105
Ipopt::LimMemQuasiNewtonUpdater::SdotS_old_
SmartPtr< DenseSymMatrix > SdotS_old_
For efficient implementation, we store the pairwise products for s's (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:211
Ipopt::LimMemQuasiNewtonUpdater::ShiftSdotSMatrix
void ShiftSdotSMatrix(SmartPtr< DenseSymMatrix > &V, const MultiVectorMatrix &S)
Given a DenseSymMatrix V, shift everything up one row and column, and fill the new entries as s_i^Ts_...
Ipopt::LimMemQuasiNewtonUpdater::STDRS_
SmartPtr< DenseSymMatrix > STDRS_
For efficient implementation, we store the S^T S DR * S.
Definition: IpLimMemQuasiNewtonUpdater.hpp:174
Ipopt::LimMemQuasiNewtonUpdater::sigma_safe_max_
Number sigma_safe_max_
Maximal safeguard value for sigma.
Definition: IpLimMemQuasiNewtonUpdater.hpp:102
Ipopt::LimMemQuasiNewtonUpdater::L_old_
SmartPtr< DenseGenMatrix > L_old_
Matrix L_k for compact formulation from last update (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:198
Ipopt::LimMemQuasiNewtonUpdater::last_grad_f_
SmartPtr< const Vector > last_grad_f_
Gradient of objective function w.r.t.
Definition: IpLimMemQuasiNewtonUpdater.hpp:178
Ipopt::LimMemQuasiNewtonUpdater
Implementation of the HessianUpdater for limit-memory quasi-Newton approximation of the Lagrangian He...
Definition: IpLimMemQuasiNewtonUpdater.hpp:25
Ipopt::LimMemQuasiNewtonUpdater::UpdateHessian
virtual void UpdateHessian()
Update the Hessian based on the current information in IpData.
Ipopt::LimMemQuasiNewtonUpdater::sigma_old_
Number sigma_old_
First term (starting matrix) for the approximation.
Definition: IpLimMemQuasiNewtonUpdater.hpp:204
Ipopt::LimMemQuasiNewtonUpdater::DRS_old_
SmartPtr< MultiVectorMatrix > DRS_old_
DR * S (only for restoration phase) (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:216
Ipopt::LimMemQuasiNewtonUpdater::B0_
SmartPtr< Vector > B0_
First term (starting matrix) for the approximation.
Definition: IpLimMemQuasiNewtonUpdater.hpp:155
Ipopt::LimMemQuasiNewtonUpdater::Ypart_old_
SmartPtr< MultiVectorMatrix > Ypart_old_
For restoration phase update: Y without the quadratic objective function part (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:193
Ipopt::LimMemQuasiNewtonUpdater::last_x_
SmartPtr< const Vector > last_x_
Primal variables x from most recent update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:176
Ipopt::Index
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
Ipopt::LimMemQuasiNewtonUpdater::StoreInternalDataBackup
void StoreInternalDataBackup()
Store a copy of the pointers to the internal data (S, Y, D, L, SdotS, curr_lm_memory) This is called ...
Ipopt::LimMemQuasiNewtonUpdater::S_old_
SmartPtr< MultiVectorMatrix > S_old_
s pairs for the recent iterations (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:186
Ipopt::LimMemQuasiNewtonUpdater::SdotS_uptodate_old_
bool SdotS_uptodate_old_
Flag indicating whether SdotS_ is update to date from most recent update (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:214
Ipopt::LimMemQuasiNewtonUpdater::SplitEigenvalues
bool SplitEigenvalues(DenseGenMatrix &Q, const DenseVector &E, SmartPtr< DenseGenMatrix > &Qminus, SmartPtr< DenseGenMatrix > &Qplus)
Split the eigenvectors into negative and positive ones.
Ipopt::LimMemQuasiNewtonUpdater::LMUpdateType
LMUpdateType
enumeration for the Hessian update type.
Definition: IpLimMemQuasiNewtonUpdater.hpp:75
Ipopt::LimMemQuasiNewtonUpdater::L_
SmartPtr< DenseGenMatrix > L_
Matrix L_k for compact formulation from last update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:153
Ipopt::SmartPtr
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:182
Ipopt::LimMemQuasiNewtonUpdater::operator=
void operator=(const LimMemQuasiNewtonUpdater &)
Overloaded Equals Operator.
Ipopt::LimMemQuasiNewtonUpdater::D_
SmartPtr< DenseVector > D_
Diagonal elements D_k for compact formulation from last update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:151
Ipopt::LimMemQuasiNewtonUpdater::Ypart_
SmartPtr< MultiVectorMatrix > Ypart_
For restoration phase update: Y without the quadratic objective function part.
Definition: IpLimMemQuasiNewtonUpdater.hpp:148
Ipopt::LimMemQuasiNewtonUpdater::AugmentSdotSMatrix
void AugmentSdotSMatrix(SmartPtr< DenseSymMatrix > &V, const MultiVectorMatrix &S)
Given a DenseSymMatrix V, create a new DenseGenMatrixSpace with one more dimension,...
Ipopt::LimMemQuasiNewtonUpdater::UpdateInternalData
bool UpdateInternalData(const Vector &s_new, const Vector &y_new, SmartPtr< Vector > ypart_new)
Update the internal data, such as the S, Y, L, D etc matrices and vectors that are required for compu...
IpDenseVector.hpp
Ipopt::HessianUpdater
Abstract base class for objects responsible for updating the Hessian information.
Definition: IpHessianUpdater.hpp:22
Ipopt::LimMemQuasiNewtonUpdater::V_old_
SmartPtr< MultiVectorMatrix > V_old_
V in LowRankUpdateMatrix from last update (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:206
Ipopt::LimMemQuasiNewtonUpdater::CONSTANT
@ CONSTANT
Definition: IpLimMemQuasiNewtonUpdater.hpp:89
Ipopt::LimMemQuasiNewtonUpdater::last_eta_
Number last_eta_
Most recent value for eta in the restoration phase objective function (only for update_for_resto_ = t...
Definition: IpLimMemQuasiNewtonUpdater.hpp:116
Ipopt::LimMemQuasiNewtonUpdater::S_
SmartPtr< MultiVectorMatrix > S_
s pairs for the recent iterations
Definition: IpLimMemQuasiNewtonUpdater.hpp:141
Ipopt::LimMemQuasiNewtonUpdater::update_for_resto_
const bool update_for_resto_
Flag indicating if the update is to be done for the original NLP or for the restoration phase NLP.
Definition: IpLimMemQuasiNewtonUpdater.hpp:113
Ipopt::LimMemQuasiNewtonUpdater::RecalcY
void RecalcY(Number eta, const Vector &DR_x, MultiVectorMatrix &S, MultiVectorMatrix &Ypart, SmartPtr< MultiVectorMatrix > &Y)
Method for recomputing Y from scratch, using Ypart (only for restoration phase)
Ipopt::LimMemQuasiNewtonUpdater::curr_lm_memory_
Index curr_lm_memory_
current size of limited memory
Definition: IpLimMemQuasiNewtonUpdater.hpp:139
Ipopt::LimMemQuasiNewtonUpdater::LimMemQuasiNewtonUpdater
LimMemQuasiNewtonUpdater(bool update_for_resto)
Default Constructor.
Ipopt::LimMemQuasiNewtonUpdater::last_jac_c_
SmartPtr< const Matrix > last_jac_c_
Jacobian for equality constraints w.r.t x at x_last.
Definition: IpLimMemQuasiNewtonUpdater.hpp:180
Ipopt::LimMemQuasiNewtonUpdater::ReleaseInternalDataBackup
void ReleaseInternalDataBackup()
Release anything that we allocated for StoreInternalDataBackup and is no longer needed.
Ipopt::LimMemQuasiNewtonUpdater::AugmentSTDRSMatrix
void AugmentSTDRSMatrix(SmartPtr< DenseSymMatrix > &V, const MultiVectorMatrix &S, const MultiVectorMatrix &DRS)
Given a DenseSymMatrix V, create a new DenseGenMatrixSpace with one more dimension,...
Ipopt::LimMemQuasiNewtonUpdater::limited_memory_max_history_
Index limited_memory_max_history_
Size of memory for limited memory update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:73
Ipopt::LimMemQuasiNewtonUpdater::LMInitialization
LMInitialization
enumeration for the Hessian initialization.
Definition: IpLimMemQuasiNewtonUpdater.hpp:83
Ipopt::LimMemQuasiNewtonUpdater::STDRS_old_
SmartPtr< DenseSymMatrix > STDRS_old_
For efficient implementation, we store the S^T S DR * S.
Definition: IpLimMemQuasiNewtonUpdater.hpp:219
Ipopt::LimMemQuasiNewtonUpdater::sigma_safe_min_
Number sigma_safe_min_
Minimal safeguard value for sigma.
Definition: IpLimMemQuasiNewtonUpdater.hpp:100
Ipopt::DenseVector
Dense Vector Implementation.
Definition: IpDenseVector.hpp:40
Ipopt::LimMemQuasiNewtonUpdater::DRS_
SmartPtr< MultiVectorMatrix > DRS_
DR * S (only for restoration phase)
Definition: IpLimMemQuasiNewtonUpdater.hpp:171
Ipopt::LimMemQuasiNewtonUpdater::InitializeImpl
virtual bool InitializeImpl(const OptionsList &options, const std::string &prefix)
overloaded from AlgorithmStrategyObject
Ipopt::LimMemQuasiNewtonUpdater::ShiftMultiVector
void ShiftMultiVector(SmartPtr< MultiVectorMatrix > &V, const Vector &v_new)
Given a MutliVector V, get rid of the first column, shift all other columns to the left,...
IpDenseGenMatrix.hpp
Ipopt::LimMemQuasiNewtonUpdater::ShiftDenseVector
void ShiftDenseVector(SmartPtr< DenseVector > &V, Number v_new)
Given a DenseVector V, get rid of the first element, shift all other elements one position to the top...
Ipopt::LimMemQuasiNewtonUpdater::RecalcD
void RecalcD(MultiVectorMatrix &S, MultiVectorMatrix &Y, SmartPtr< DenseVector > &D)
Method for recomputing D from S and Y.
Ipopt::LimMemQuasiNewtonUpdater::limited_memory_init_val_
Number limited_memory_init_val_
Value of B0 (as this multiple of the identity in certain situations.)
Definition: IpLimMemQuasiNewtonUpdater.hpp:95
Ipopt::LimMemQuasiNewtonUpdater::curr_eta_
Number curr_eta_
Current value of weighing factor eta in the restoration phase objective function (only for update_for...
Definition: IpLimMemQuasiNewtonUpdater.hpp:130
Ipopt::TaggedObject::Tag
unsigned int Tag
Type for the Tag values.
Definition: IpTaggedObject.hpp:79
Ipopt::LimMemQuasiNewtonUpdater::curr_DR_x_
SmartPtr< const Vector > curr_DR_x_
Current DR_x scaling factors in the restoration phase objective function (only for update_for_resto_ ...
Definition: IpLimMemQuasiNewtonUpdater.hpp:120
Ipopt::LimMemQuasiNewtonUpdater::limited_memory_initialization_
LMInitialization limited_memory_initialization_
How to choose B0 in the low-rank update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:92
Ipopt::LimMemQuasiNewtonUpdater::SetW
void SetW()
Set the W field in IpData based on the current values of B0_, V_, and U_.
Ipopt::LimMemQuasiNewtonUpdater::AugmentMultiVector
void AugmentMultiVector(SmartPtr< MultiVectorMatrix > &V, const Vector &v_new)
Given a MutliVector V, create a new MultiVectorSpace with one more column, and return V as a member o...
Ipopt::LimMemQuasiNewtonUpdater::RecalcL
void RecalcL(MultiVectorMatrix &S, MultiVectorMatrix &Y, SmartPtr< DenseGenMatrix > &L)
Method for recomputing L from S and Y.
Ipopt::LimMemQuasiNewtonUpdater::RegisterOptions
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
Methods for OptionsList.
Ipopt::LimMemQuasiNewtonUpdater::SR1
@ SR1
Definition: IpLimMemQuasiNewtonUpdater.hpp:78
Ipopt::LimMemQuasiNewtonUpdater::curr_DR_x_tag_
TaggedObject::Tag curr_DR_x_tag_
Tag for curr_DR_x_.
Definition: IpLimMemQuasiNewtonUpdater.hpp:122
Ipopt::OptionsList
This class stores a list of user set options.
Definition: IpOptionsList.hpp:32
Ipopt::LimMemQuasiNewtonUpdater::limited_memory_max_skipping_
Index limited_memory_max_skipping_
Number of successive iterations of skipped updates after which the approximation is reset.
Definition: IpLimMemQuasiNewtonUpdater.hpp:98
IpHessianUpdater.hpp
Ipopt::LimMemQuasiNewtonUpdater::Y_old_
SmartPtr< MultiVectorMatrix > Y_old_
y pairs for the recent iterations.
Definition: IpLimMemQuasiNewtonUpdater.hpp:190
Ipopt::LimMemQuasiNewtonUpdater::SdotS_
SmartPtr< DenseSymMatrix > SdotS_
For efficient implementation, we store the pairwise products for s's.
Definition: IpLimMemQuasiNewtonUpdater.hpp:166
Ipopt::LimMemQuasiNewtonUpdater::U_old_
SmartPtr< MultiVectorMatrix > U_old_
U in LowRankUpdateMatrix from last update (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:208
Ipopt::Vector
Vector Base Class.
Definition: IpVector.hpp:47