Ipopt  3.12.8
IpIpoptCalculatedQuantities.hpp
Go to the documentation of this file.
1 // Copyright (C) 2004, 2011 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpIpoptCalculatedQuantities.hpp 2020 2011-06-16 20:46:16Z andreasw $
6 //
7 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8 
9 #ifndef __IPIPOPTCALCULATEDQUANTITIES_HPP__
10 #define __IPIPOPTCALCULATEDQUANTITIES_HPP__
11 
12 #include "IpSmartPtr.hpp"
13 #include "IpCachedResults.hpp"
14 
15 #include <string>
16 
17 namespace Ipopt
18 {
19  class IpoptNLP;
20  class IpoptData;
21  class Vector;
22  class Matrix;
23  class SymMatrix;
24  class Journalist;
25  class OptionsList;
26  class RegisteredOptions;
27 
29  enum ENormType {
30  NORM_1=0,
33  };
34 
41  {
42  public:
47  {}
48 
51  {}
53 
57  virtual bool Initialize(const Journalist& jnlst,
58  const OptionsList& options,
59  const std::string& prefix) = 0;
60 
61  private:
72 
74  void operator=(const IpoptAdditionalCq&);
76  };
77 
82  {
83  public:
84 
89  const SmartPtr<IpoptData>& ip_data);
91  virtual ~IpoptCalculatedQuantities();
93 
97  {
98  DBG_ASSERT(!HaveAddCq());
99  add_cq_ = add_cq;
100  }
101 
104  bool HaveAddCq()
105  {
106  return IsValid(add_cq_);
107  }
108 
112  bool Initialize(const Journalist& jnlst,
113  const OptionsList& options,
114  const std::string& prefix);
115 
119  SmartPtr<const Vector> curr_slack_x_L();
121  SmartPtr<const Vector> curr_slack_x_U();
123  SmartPtr<const Vector> curr_slack_s_L();
125  SmartPtr<const Vector> curr_slack_s_U();
127  SmartPtr<const Vector> trial_slack_x_L();
129  SmartPtr<const Vector> trial_slack_x_U();
131  SmartPtr<const Vector> trial_slack_s_L();
133  SmartPtr<const Vector> trial_slack_s_U();
135  Index AdjustedTrialSlacks();
137  void ResetAdjustedTrialSlacks();
139 
143  virtual Number curr_f();
145  virtual Number unscaled_curr_f();
147  virtual Number trial_f();
149  virtual Number unscaled_trial_f();
151  SmartPtr<const Vector> curr_grad_f();
153  SmartPtr<const Vector> trial_grad_f();
155 
161  virtual Number curr_barrier_obj();
165  virtual Number trial_barrier_obj();
166 
169  SmartPtr<const Vector> curr_grad_barrier_obj_x();
172  SmartPtr<const Vector> curr_grad_barrier_obj_s();
173 
176  SmartPtr<const Vector> grad_kappa_times_damping_x();
179  SmartPtr<const Vector> grad_kappa_times_damping_s();
181 
185  SmartPtr<const Vector> curr_c();
187  SmartPtr<const Vector> unscaled_curr_c();
189  SmartPtr<const Vector> trial_c();
191  SmartPtr<const Vector> unscaled_trial_c();
193  SmartPtr<const Vector> curr_d();
195  SmartPtr<const Vector> unscaled_curr_d();
197  SmartPtr<const Vector> trial_d();
199  SmartPtr<const Vector> curr_d_minus_s();
201  SmartPtr<const Vector> trial_d_minus_s();
203  SmartPtr<const Matrix> curr_jac_c();
205  SmartPtr<const Matrix> trial_jac_c();
207  SmartPtr<const Matrix> curr_jac_d();
209  SmartPtr<const Matrix> trial_jac_d();
212  SmartPtr<const Vector> curr_jac_cT_times_vec(const Vector& vec);
215  SmartPtr<const Vector> trial_jac_cT_times_vec(const Vector& vec);
218  SmartPtr<const Vector> curr_jac_dT_times_vec(const Vector& vec);
221  SmartPtr<const Vector> trial_jac_dT_times_vec(const Vector& vec);
224  SmartPtr<const Vector> curr_jac_cT_times_curr_y_c();
227  SmartPtr<const Vector> trial_jac_cT_times_trial_y_c();
230  SmartPtr<const Vector> curr_jac_dT_times_curr_y_d();
233  SmartPtr<const Vector> trial_jac_dT_times_trial_y_d();
236  SmartPtr<const Vector> curr_jac_c_times_vec(const Vector& vec);
239  SmartPtr<const Vector> curr_jac_d_times_vec(const Vector& vec);
243  virtual Number curr_constraint_violation();
247  virtual Number trial_constraint_violation();
251  virtual Number curr_nlp_constraint_violation(ENormType NormType);
255  virtual Number unscaled_curr_nlp_constraint_violation(ENormType NormType);
259  virtual Number unscaled_trial_nlp_constraint_violation(ENormType NormType);
261 
265  SmartPtr<const SymMatrix> curr_exact_hessian();
267 
271  SmartPtr<const Vector> curr_grad_lag_x();
273  SmartPtr<const Vector> trial_grad_lag_x();
275  SmartPtr<const Vector> curr_grad_lag_s();
277  SmartPtr<const Vector> trial_grad_lag_s();
280  SmartPtr<const Vector> curr_grad_lag_with_damping_x();
283  SmartPtr<const Vector> curr_grad_lag_with_damping_s();
285  SmartPtr<const Vector> curr_compl_x_L();
287  SmartPtr<const Vector> curr_compl_x_U();
289  SmartPtr<const Vector> curr_compl_s_L();
291  SmartPtr<const Vector> curr_compl_s_U();
293  SmartPtr<const Vector> trial_compl_x_L();
295  SmartPtr<const Vector> trial_compl_x_U();
297  SmartPtr<const Vector> trial_compl_s_L();
299  SmartPtr<const Vector> trial_compl_s_U();
301  SmartPtr<const Vector> curr_relaxed_compl_x_L();
303  SmartPtr<const Vector> curr_relaxed_compl_x_U();
305  SmartPtr<const Vector> curr_relaxed_compl_s_L();
307  SmartPtr<const Vector> curr_relaxed_compl_s_U();
308 
310  virtual Number curr_primal_infeasibility(ENormType NormType);
312  virtual Number trial_primal_infeasibility(ENormType NormType);
313 
315  virtual Number curr_dual_infeasibility(ENormType NormType);
317  virtual Number trial_dual_infeasibility(ENormType NormType);
319  virtual Number unscaled_curr_dual_infeasibility(ENormType NormType);
320 
323  virtual Number curr_complementarity(Number mu, ENormType NormType);
326  virtual Number trial_complementarity(Number mu, ENormType NormType);
329  virtual Number unscaled_curr_complementarity(Number mu, ENormType NormType);
330 
332  Number CalcCentralityMeasure(const Vector& compl_x_L,
333  const Vector& compl_x_U,
334  const Vector& compl_s_L,
335  const Vector& compl_s_U);
337  virtual Number curr_centrality_measure();
338 
343  virtual Number curr_nlp_error();
348  virtual Number unscaled_curr_nlp_error();
349 
352  virtual Number curr_barrier_error();
353 
360  virtual Number curr_primal_dual_system_error(Number mu);
367  virtual Number trial_primal_dual_system_error(Number mu);
369 
374  Number primal_frac_to_the_bound(Number tau,
375  const Vector& delta_x,
376  const Vector& delta_s);
379  Number curr_primal_frac_to_the_bound(Number tau);
382  Number dual_frac_to_the_bound(Number tau,
383  const Vector& delta_z_L,
384  const Vector& delta_z_U,
385  const Vector& delta_v_L,
386  const Vector& delta_v_U);
389  Number uncached_dual_frac_to_the_bound(Number tau,
390  const Vector& delta_z_L,
391  const Vector& delta_z_U,
392  const Vector& delta_v_L,
393  const Vector& delta_v_U);
396  Number curr_dual_frac_to_the_bound(Number tau);
404  Number uncached_slack_frac_to_the_bound(Number tau,
405  const Vector& delta_x_L,
406  const Vector& delta_x_U,
407  const Vector& delta_s_L,
408  const Vector& delta_s_U);
410 
413  SmartPtr<const Vector> curr_sigma_x();
414  SmartPtr<const Vector> curr_sigma_s();
416 
418  Number curr_avrg_compl();
420  Number trial_avrg_compl();
421 
424  Number curr_gradBarrTDelta();
425 
427  Number
428  CalcNormOfType(ENormType NormType,
429  std::vector<SmartPtr<const Vector> > vecs);
430 
432  Number
433  CalcNormOfType(ENormType NormType,
434  const Vector& vec1, const Vector& vec2);
435 
438  {
439  return constr_viol_normtype_;
440  }
441 
443  bool IsSquareProblem() const;
444 
448  {
449  return ip_nlp_;
450  }
451 
453  {
454  DBG_ASSERT(IsValid(add_cq_));
455  return *add_cq_;
456  }
457 
461  static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
463 
464  private:
475 
478 
482 
492 
513 
529 
537 
547 
572 
575 
610 
616 
622 
627 
630 
647 
660 
662  Vector& Tmp_x();
663  Vector& Tmp_s();
664  Vector& Tmp_c();
665  Vector& Tmp_d();
666  Vector& Tmp_x_L();
667  Vector& Tmp_x_U();
668  Vector& Tmp_s_L();
669  Vector& Tmp_s_U();
671 
675 
681  SmartPtr<Vector> CalcSlack_L(const Matrix& P,
682  const Vector& x,
683  const Vector& x_bound);
687  SmartPtr<Vector> CalcSlack_U(const Matrix& P,
688  const Vector& x,
689  const Vector& x_bound);
693  Number CalcBarrierTerm(Number mu,
694  const Vector& slack_x_L,
695  const Vector& slack_x_U,
696  const Vector& slack_s_L,
697  const Vector& slack_s_U);
698 
700  SmartPtr<const Vector> CalcCompl(const Vector& slack,
701  const Vector& mult);
702 
704  Number CalcFracToBound(const Vector& slack_L,
705  Vector& tmp_L,
706  const Matrix& P_L,
707  const Vector& slack_U,
708  Vector& tmp_U,
709  const Matrix& P_U,
710  const Vector& delta,
711  Number tau);
712 
714  void ComputeOptimalityErrorScaling(const Vector& y_c, const Vector& y_d,
715  const Vector& z_L, const Vector& z_U,
716  const Vector& v_L, const Vector& v_U,
717  Number s_max,
718  Number& s_d, Number& s_c);
719 
723  Index CalculateSafeSlack(SmartPtr<Vector>& slack,
724  const SmartPtr<const Vector>& bound,
725  const SmartPtr<const Vector>& curr_point,
726  const SmartPtr<const Vector>& multiplier);
727 
733  void ComputeDampingIndicators(SmartPtr<const Vector>& dampind_x_L,
734  SmartPtr<const Vector>& dampind_x_U,
735  SmartPtr<const Vector>& dampind_s_L,
736  SmartPtr<const Vector>& dampind_s_U);
737 
744  bool in_restoration_phase();
745 
747  };
748 
749 } // namespace Ipopt
750 
751 #endif
SmartPtr< Vector > dampind_s_U_
Indicator vector for selecting the elements in s that have only upper bounds.
SmartPtr< Vector > dampind_s_L_
Indicator vector for selecting the elements in s that have only lower bounds.
bool IsValid(const SmartPtr< U > &smart_ptr)
Definition: IpSmartPtr.hpp:579
CachedResults< Number > trial_avrg_compl_cache_
Cache for average of trial complementarity.
CachedResults< Number > curr_constraint_violation_cache_
Number * x
Input: Starting point Output: Optimal solution.
SmartPtr< Vector > dampind_x_U_
Indicator vector for selecting the elements in x that have only upper bounds.
CachedResults< SmartPtr< const Vector > > curr_relaxed_compl_x_L_cache_
CachedResults< SmartPtr< const Vector > > curr_d_minus_s_cache_
Class for all IPOPT specific calculated quantities.
CachedResults< Number > trial_constraint_violation_cache_
virtual ~IpoptAdditionalCq()
Default destructor.
CachedResults< Number > curr_centrality_measure_cache_
CachedResults< SmartPtr< Vector > > curr_slack_s_L_cache_
SmartPtr< IpoptNLP > ip_nlp_
Ipopt NLP object.
CachedResults< SmartPtr< Vector > > trial_slack_x_L_cache_
CachedResults< SmartPtr< const Vector > > grad_kappa_times_damping_x_cache_
CachedResults< SmartPtr< const Matrix > > trial_jac_d_cache_
CachedResults< Number > unscaled_curr_nlp_error_cache_
CachedResults< SmartPtr< const Vector > > curr_compl_x_L_cache_
double Number
Type of all numbers.
Definition: IpTypes.hpp:17
CachedResults< SmartPtr< const Vector > > trial_jac_dT_times_vec_cache_
SmartPtr< Vector > dampind_x_L_
Indicator vector for selecting the elements in x that have only lower bounds.
Vector Base Class.
Definition: IpVector.hpp:47
CachedResults< Number > trial_primal_infeasibility_cache_
CachedResults< SmartPtr< const Vector > > trial_c_cache_
CachedResults< SmartPtr< const SymMatrix > > curr_exact_hessian_cache_
Cache for the exact Hessian.
CachedResults< SmartPtr< Vector > > trial_slack_s_U_cache_
CachedResults< SmartPtr< const Vector > > trial_d_cache_
Number s_max_
Parameter in formula for computing overall primal-dual optimality error.
CachedResults< Number > curr_primal_dual_system_error_cache_
CachedResults< SmartPtr< const Vector > > curr_grad_lag_with_damping_s_cache_
CachedResults< SmartPtr< const Vector > > curr_sigma_x_cache_
CachedResults< SmartPtr< const Vector > > curr_relaxed_compl_s_U_cache_
CachedResults< SmartPtr< const Vector > > curr_relaxed_compl_x_U_cache_
ENormType constr_viol_normtype() const
Norm type used for calculating constraint violation.
Number mu_target_
Desired value of the barrier parameter.
CachedResults< Number > unscaled_trial_nlp_constraint_violation_cache_
CachedResults< SmartPtr< const Matrix > > trial_jac_c_cache_
CachedResults< SmartPtr< const Vector > > curr_jac_c_times_vec_cache_
CachedResults< SmartPtr< const Vector > > curr_compl_s_U_cache_
CachedResults< SmartPtr< const Vector > > curr_jac_dT_times_vec_cache_
CachedResults< SmartPtr< Vector > > curr_slack_x_U_cache_
CachedResults< SmartPtr< const Vector > > curr_grad_barrier_obj_s_cache_
CachedResults< SmartPtr< const Vector > > grad_kappa_times_damping_s_cache_
CachedResults< SmartPtr< const Vector > > trial_grad_f_cache_
CachedResults< SmartPtr< Vector > > trial_slack_s_L_cache_
CachedResults< Number > curr_gradBarrTDelta_cache_
Cache for grad barrier obj.
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:172
CachedResults< SmartPtr< const Vector > > trial_d_minus_s_cache_
ReferencedObject class.
This class stores a list of user set options.
SmartPtr< IpoptAdditionalCq > add_cq_
Chen-Goldfarb specific calculated quantities.
CachedResults< SmartPtr< const Vector > > trial_compl_s_U_cache_
CachedResults< SmartPtr< Vector > > curr_slack_x_L_cache_
IpoptAdditionalCq()
Default Constructor.
CachedResults< SmartPtr< const Vector > > curr_grad_f_cache_
Number kappa_d_
Weighting factor for the linear damping term added to the barrier objective funciton.
CachedResults< Number > primal_frac_to_the_bound_cache_
CachedResults< SmartPtr< const Vector > > trial_compl_x_U_cache_
CachedResults< SmartPtr< const Vector > > curr_d_cache_
SmartPtr< IpoptNLP > & GetIpoptNLP()
Method returning the IpoptNLP object.
Number slack_move_
fractional movement allowed in bounds
CachedResults< Number > unscaled_curr_dual_infeasibility_cache_
CachedResults< SmartPtr< const Vector > > trial_compl_s_L_cache_
Matrix Base Class.
Definition: IpMatrix.hpp:27
Cache Priority Enum.
CachedResults< SmartPtr< const Matrix > > curr_jac_d_cache_
CachedResults< Number > curr_dual_infeasibility_cache_
CachedResults< SmartPtr< const Vector > > curr_compl_s_L_cache_
CachedResults< SmartPtr< Vector > > curr_slack_s_U_cache_
CachedResults< Number > trial_primal_dual_system_error_cache_
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
#define DBG_ASSERT(test)
Definition: IpDebug.hpp:38
CachedResults< SmartPtr< const Vector > > curr_compl_x_U_cache_
virtual bool Initialize(const Journalist &jnlst, const OptionsList &options, const std::string &prefix)=0
This method is called to initialize the global algorithmic parameters.
CachedResults< SmartPtr< const Vector > > curr_sigma_s_cache_
CachedResults< SmartPtr< const Vector > > trial_grad_lag_x_cache_
CachedResults< SmartPtr< const Vector > > curr_jac_cT_times_vec_cache_
CachedResults< Number > curr_primal_infeasibility_cache_
void SetAddCq(SmartPtr< IpoptAdditionalCq > add_cq)
Method for setting pointer for additional calculated quantities.
CachedResults< SmartPtr< const Vector > > curr_c_cache_
CachedResults< SmartPtr< const Vector > > curr_relaxed_compl_s_L_cache_
bool initialize_called_
flag indicating if Initialize method has been called (for debugging)
CachedResults< SmartPtr< const Matrix > > curr_jac_c_cache_
CachedResults< SmartPtr< Vector > > trial_slack_x_U_cache_
CachedResults< Number > trial_dual_infeasibility_cache_
Class responsible for all message output.
CachedResults< Number > curr_avrg_compl_cache_
Cache for average of current complementarity.
CachedResults< SmartPtr< const Vector > > curr_grad_barrier_obj_x_cache_
CachedResults< Number > curr_nlp_constraint_violation_cache_
bool warm_start_same_structure_
Flag indicating whether the TNLP with identical structure has already been solved before...
CachedResults< SmartPtr< const Vector > > curr_grad_lag_x_cache_
void operator=(const IpoptAdditionalCq &)
Overloaded Equals Operator.
SmartPtr< IpoptData > ip_data_
Ipopt Data object.
CachedResults< SmartPtr< const Vector > > trial_compl_x_L_cache_
Base class for additional calculated quantities that is special to a particular type of algorithm...
CachedResults< SmartPtr< const Vector > > curr_jac_d_times_vec_cache_
CachedResults< SmartPtr< const Vector > > curr_grad_lag_s_cache_
ENormType constr_viol_normtype_
Norm type to be used when calculating the constraint violation.
CachedResults< SmartPtr< const Vector > > curr_grad_lag_with_damping_x_cache_
CachedResults< SmartPtr< const Vector > > trial_jac_cT_times_vec_cache_
CachedResults< Number > unscaled_curr_nlp_constraint_violation_cache_
CachedResults< SmartPtr< const Vector > > trial_grad_lag_s_cache_
bool HaveAddCq()
Method detecting if additional object for calculated quantities has already been set.