Ipopt Documentation  
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 // Authors: Andreas Waechter IBM 2005-12-26
6 
7 #ifndef __IPLIMMEMQUASINEWTONUPDATER_HPP__
8 #define __IPLIMMEMQUASINEWTONUPDATER_HPP__
9 
10 #include "IpHessianUpdater.hpp"
12 #include "IpMultiVectorMatrix.hpp"
13 #include "IpDenseVector.hpp"
14 #include "IpDenseGenMatrix.hpp"
15 #include "IpDenseSymMatrix.hpp"
16 
17 namespace Ipopt
18 {
19 
24 {
25 public:
30  bool update_for_resto
31  );
32 
35  { }
37 
38  virtual bool InitializeImpl(
39  const OptionsList& options,
40  const std::string& prefix
41  );
42 
44  virtual void UpdateHessian();
45 
48  static void RegisterOptions(
50  );
52 
53 private:
67  );
68 
70  void operator=(
72  );
74 
77 
82 
85  {
86  BFGS = 0,
88  };
89 
92 
95  {
96  SCALAR1 = 0,
101  };
102 
105 
108 
113 
116 
119 
125 
133  const bool update_for_resto_;
134 
139 
146 
149 
157 
162 
165 
170 
173 
180 
185 
190 
193 
196 
203 
206 
209 
214 
219 
222 
228 
231 
234 
237 
240 
243 
246 
253 
257 
261 
264 
267 
274 
277 
280 
285 
290 
293 
300 
310  bool CheckSkippingBFGS(
311  Vector& s_new,
312  Vector& y_new
313  );
314 
321  bool UpdateInternalData(
322  const Vector& s_new,
323  const Vector& y_new,
324  SmartPtr<Vector> ypart_new
325  );
326 
334  void AugmentMultiVector(
336  const Vector& v_new
337  );
338 
346  void AugmentDenseVector(
348  Number v_new
349  );
350 
360  void AugmentLMatrix(
362  const MultiVectorMatrix& S,
363  const MultiVectorMatrix& Y
364  );
365 
375  void AugmentSdotSMatrix(
377  const MultiVectorMatrix& S
378  );
379 
389  void AugmentSTDRSMatrix(
391  const MultiVectorMatrix& S,
392  const MultiVectorMatrix& DRS
393  );
394 
401  void ShiftMultiVector(
403  const Vector& v_new
404  );
405 
413  void ShiftDenseVector(
415  Number v_new
416  );
417 
426  void ShiftLMatrix(
428  const MultiVectorMatrix& S,
429  const MultiVectorMatrix& Y
430  );
431 
439  void ShiftSdotSMatrix(
441  const MultiVectorMatrix& S
442  );
443 
451  void ShiftSTDRSMatrix(
453  const MultiVectorMatrix& S,
454  const MultiVectorMatrix& DRS
455  );
456 
460  void RecalcY(
461  Number eta,
462  const Vector& DR_x,
464  MultiVectorMatrix& Ypart,
466  );
467 
469  void RecalcD(
473  );
474 
476  void RecalcL(
480  );
481 
495  bool SplitEigenvalues(
496  DenseGenMatrix& Q,
497  const DenseVector& E,
498  SmartPtr<DenseGenMatrix>& Qminus,
500  );
501 
509 
514 
519 
523  void SetW();
525 
526 };
527 
528 } // namespace Ipopt
529 
530 #endif
Ipopt::LimMemQuasiNewtonUpdater::SCALAR2
@ SCALAR2
Definition: IpLimMemQuasiNewtonUpdater.hpp:97
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:99
Ipopt::LimMemQuasiNewtonUpdater::~LimMemQuasiNewtonUpdater
virtual ~LimMemQuasiNewtonUpdater()
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:208
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:24
Ipopt::LimMemQuasiNewtonUpdater::D_old_
SmartPtr< DenseVector > D_old_
Diagonal elements D_k for compact formulation from last update (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:260
Ipopt::LimMemQuasiNewtonUpdater::SCALAR1
@ SCALAR1
Definition: IpLimMemQuasiNewtonUpdater.hpp:96
Ipopt::LimMemQuasiNewtonUpdater::limited_memory_update_type_
LMUpdateType limited_memory_update_type_
Type of Hessian update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:91
IpDenseSymMatrix.hpp
Ipopt::LimMemQuasiNewtonUpdater::sigma_
Number sigma_
First term (starting matrix) for the approximation.
Definition: IpLimMemQuasiNewtonUpdater.hpp:202
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:239
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:218
Ipopt::LimMemQuasiNewtonUpdater::V_
SmartPtr< MultiVectorMatrix > V_
V in LowRankUpdateMatrix from last update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:205
Ipopt::LimMemQuasiNewtonUpdater::Y_
SmartPtr< MultiVectorMatrix > Y_
y pairs for the recent iterations.
Definition: IpLimMemQuasiNewtonUpdater.hpp:179
Ipopt::LimMemQuasiNewtonUpdater::SCALAR3
@ SCALAR3
Definition: IpLimMemQuasiNewtonUpdater.hpp:98
Ipopt::LimMemQuasiNewtonUpdater::curr_lm_memory_old_
Index curr_lm_memory_old_
current size of limited memory
Definition: IpLimMemQuasiNewtonUpdater.hpp:242
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:156
Ipopt::LimMemQuasiNewtonUpdater::B0_old_
SmartPtr< Vector > B0_old_
First term (starting matrix) for the approximation (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:266
Ipopt::DenseGenMatrix
Class for dense general matrices.
Definition: IpDenseGenMatrix.hpp:25
Ipopt::LimMemQuasiNewtonUpdater::BFGS
@ BFGS
Definition: IpLimMemQuasiNewtonUpdater.hpp:86
Ipopt::LimMemQuasiNewtonUpdater::lm_skipped_iter_
Index lm_skipped_iter_
Counter for successive iterations in which the update was skipped.
Definition: IpLimMemQuasiNewtonUpdater.hpp:164
Ipopt::LimMemQuasiNewtonUpdater::h_space_
SmartPtr< const LowRankUpdateSymMatrixSpace > h_space_
Matrix space for the low-rank Hessian approximation.
Definition: IpLimMemQuasiNewtonUpdater.hpp:76
Ipopt
This file contains a base class for all exceptions and a set of macros to help with exceptions.
Definition: IpInexactAlgBuilder.hpp:13
Ipopt::Number
double Number
Type of all numbers.
Definition: IpTypes.hpp:15
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:123
Ipopt::LimMemQuasiNewtonUpdater::SdotS_old_
SmartPtr< DenseSymMatrix > SdotS_old_
For efficient implementation, we store the pairwise products for s's (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:284
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:227
Ipopt::LimMemQuasiNewtonUpdater::sigma_safe_max_
Number sigma_safe_max_
Maximal safeguard value for sigma.
Definition: IpLimMemQuasiNewtonUpdater.hpp:118
Ipopt::LimMemQuasiNewtonUpdater::L_old_
SmartPtr< DenseGenMatrix > L_old_
Matrix L_k for compact formulation from last update (backup).
Definition: IpLimMemQuasiNewtonUpdater.hpp:263
Ipopt::LimMemQuasiNewtonUpdater::last_grad_f_
SmartPtr< const Vector > last_grad_f_
Gradient of objective function w.r.t.
Definition: IpLimMemQuasiNewtonUpdater.hpp:233
Ipopt::LimMemQuasiNewtonUpdater
Implementation of the HessianUpdater for limit-memory quasi-Newton approximation of the Lagrangian He...
Definition: IpLimMemQuasiNewtonUpdater.hpp:23
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:273
Ipopt::LimMemQuasiNewtonUpdater::DRS_old_
SmartPtr< MultiVectorMatrix > DRS_old_
DR * S (only for restoration phase) (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:292
Ipopt::LimMemQuasiNewtonUpdater::B0_
SmartPtr< Vector > B0_
First term (starting matrix) for the approximation.
Definition: IpLimMemQuasiNewtonUpdater.hpp:195
Ipopt::LimMemQuasiNewtonUpdater::Ypart_old_
SmartPtr< MultiVectorMatrix > Ypart_old_
For restoration phase update: Y without the quadratic objective function part (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:256
Ipopt::LimMemQuasiNewtonUpdater::last_x_
SmartPtr< const Vector > last_x_
Primal variables x from most recent update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:230
Ipopt::Index
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:17
Ipopt::LimMemQuasiNewtonUpdater::StoreInternalDataBackup
void StoreInternalDataBackup()
Store a copy of the pointers to the internal data (S, Y, D, L, SdotS, curr_lm_memory).
Ipopt::LimMemQuasiNewtonUpdater::S_old_
SmartPtr< MultiVectorMatrix > S_old_
s pairs for the recent iterations (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:245
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:289
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:84
Ipopt::LimMemQuasiNewtonUpdater::L_
SmartPtr< DenseGenMatrix > L_
Matrix L_k for compact formulation from last update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:192
Ipopt::SmartPtr
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:171
Ipopt::LimMemQuasiNewtonUpdater::operator=
void operator=(const LimMemQuasiNewtonUpdater &)
Default Assignment Operator.
Ipopt::LimMemQuasiNewtonUpdater::D_
SmartPtr< DenseVector > D_
Diagonal elements D_k for compact formulation from last update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:189
Ipopt::LimMemQuasiNewtonUpdater::Ypart_
SmartPtr< MultiVectorMatrix > Ypart_
For restoration phase update: Y without the quadratic objective function part.
Definition: IpLimMemQuasiNewtonUpdater.hpp:184
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:276
Ipopt::LimMemQuasiNewtonUpdater::CONSTANT
@ CONSTANT
Definition: IpLimMemQuasiNewtonUpdater.hpp:100
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:138
Ipopt::LimMemQuasiNewtonUpdater::S_
SmartPtr< MultiVectorMatrix > S_
s pairs for the recent iterations
Definition: IpLimMemQuasiNewtonUpdater.hpp:172
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:133
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:169
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:236
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:81
Ipopt::LimMemQuasiNewtonUpdater::LMInitialization
LMInitialization
enumeration for the Hessian initialization.
Definition: IpLimMemQuasiNewtonUpdater.hpp:94
Ipopt::LimMemQuasiNewtonUpdater::STDRS_old_
SmartPtr< DenseSymMatrix > STDRS_old_
For efficient implementation, we store the S^T S DR * S.
Definition: IpLimMemQuasiNewtonUpdater.hpp:298
Ipopt::LimMemQuasiNewtonUpdater::sigma_safe_min_
Number sigma_safe_min_
Minimal safeguard value for sigma.
Definition: IpLimMemQuasiNewtonUpdater.hpp:115
Ipopt::DenseVector
Dense Vector Implementation.
Definition: IpDenseVector.hpp:40
Ipopt::LimMemQuasiNewtonUpdater::DRS_
SmartPtr< MultiVectorMatrix > DRS_
DR * S (only for restoration phase)
Definition: IpLimMemQuasiNewtonUpdater.hpp:221
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:107
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:161
Ipopt::TaggedObject::Tag
unsigned int Tag
Type for the Tag values.
Definition: IpTaggedObject.hpp:63
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:145
Ipopt::LimMemQuasiNewtonUpdater::limited_memory_initialization_
LMInitialization limited_memory_initialization_
How to choose B0 in the low-rank update.
Definition: IpLimMemQuasiNewtonUpdater.hpp:104
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:87
Ipopt::LimMemQuasiNewtonUpdater::curr_DR_x_tag_
TaggedObject::Tag curr_DR_x_tag_
Tag for curr_DR_x_.
Definition: IpLimMemQuasiNewtonUpdater.hpp:148
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:112
IpHessianUpdater.hpp
Ipopt::LimMemQuasiNewtonUpdater::Y_old_
SmartPtr< MultiVectorMatrix > Y_old_
y pairs for the recent iterations.
Definition: IpLimMemQuasiNewtonUpdater.hpp:252
Ipopt::LimMemQuasiNewtonUpdater::SdotS_
SmartPtr< DenseSymMatrix > SdotS_
For efficient implementation, we store the pairwise products for s's.
Definition: IpLimMemQuasiNewtonUpdater.hpp:213
Ipopt::LimMemQuasiNewtonUpdater::U_old_
SmartPtr< MultiVectorMatrix > U_old_
U in LowRankUpdateMatrix from last update (backup)
Definition: IpLimMemQuasiNewtonUpdater.hpp:279
Ipopt::Vector
Vector Base Class.
Definition: IpVector.hpp:47