Ipopt  3.12.12
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
IpTNLPAdapter.hpp
Go to the documentation of this file.
1 // Copyright (C) 2004, 2008 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpTNLPAdapter.hpp 2269 2013-05-05 11:32:40Z stefan $
6 //
7 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8 
9 #ifndef __IPTNLPADAPTER_HPP__
10 #define __IPTNLPADAPTER_HPP__
11 
12 #include "IpNLP.hpp"
13 #include "IpTNLP.hpp"
14 #include "IpOrigIpoptNLP.hpp"
15 #include <list>
16 
17 namespace Ipopt
18 {
19 
20  // forward declarations
21  class ExpansionMatrix;
22  class ExpansionMatrixSpace;
23  class IteratesVector;
24  class TDependencyDetector;
25 
30  class TNLPAdapter : public NLP
31  {
32  public:
37  const SmartPtr<const Journalist> jnlst = NULL);
38 
40  virtual ~TNLPAdapter();
42 
45  DECLARE_STD_EXCEPTION(INVALID_TNLP);
46  DECLARE_STD_EXCEPTION(ERROR_IN_TNLP_DERIVATIVE_TEST);
48 
51  virtual bool ProcessOptions(const OptionsList& options,
52  const std::string& prefix);
53 
56  virtual bool GetSpaces(SmartPtr<const VectorSpace>& x_space,
59  SmartPtr<const VectorSpace>& x_l_space,
60  SmartPtr<const MatrixSpace>& px_l_space,
61  SmartPtr<const VectorSpace>& x_u_space,
62  SmartPtr<const MatrixSpace>& px_u_space,
63  SmartPtr<const VectorSpace>& d_l_space,
64  SmartPtr<const MatrixSpace>& pd_l_space,
65  SmartPtr<const VectorSpace>& d_u_space,
66  SmartPtr<const MatrixSpace>& pd_u_space,
67  SmartPtr<const MatrixSpace>& Jac_c_space,
68  SmartPtr<const MatrixSpace>& Jac_d_space,
69  SmartPtr<const SymMatrixSpace>& Hess_lagrangian_space);
70 
72  virtual bool GetBoundsInformation(const Matrix& Px_L,
73  Vector& x_L,
74  const Matrix& Px_U,
75  Vector& x_U,
76  const Matrix& Pd_L,
77  Vector& d_L,
78  const Matrix& Pd_U,
79  Vector& d_U);
80 
83  virtual bool GetStartingPoint(
85  bool need_x,
86  SmartPtr<Vector> y_c,
87  bool need_y_c,
88  SmartPtr<Vector> y_d,
89  bool need_y_d,
90  SmartPtr<Vector> z_L,
91  bool need_z_L,
92  SmartPtr<Vector> z_U,
93  bool need_z_U
94  );
95 
98  virtual bool GetWarmStartIterate(IteratesVector& warm_start_iterate);
100 
103  virtual bool Eval_f(const Vector& x, Number& f);
104 
105  virtual bool Eval_grad_f(const Vector& x, Vector& g_f);
106 
107  virtual bool Eval_c(const Vector& x, Vector& c);
108 
109  virtual bool Eval_jac_c(const Vector& x, Matrix& jac_c);
110 
111  virtual bool Eval_d(const Vector& x, Vector& d);
112 
113  virtual bool Eval_jac_d(const Vector& x, Matrix& jac_d);
114 
115  virtual bool Eval_h(const Vector& x,
116  Number obj_factor,
117  const Vector& yc,
118  const Vector& yd,
119  SymMatrix& h);
120 
121  virtual void GetScalingParameters(
122  const SmartPtr<const VectorSpace> x_space,
123  const SmartPtr<const VectorSpace> c_space,
124  const SmartPtr<const VectorSpace> d_space,
127  SmartPtr<Vector>& c_scaling,
128  SmartPtr<Vector>& d_scaling) const;
130 
133  virtual void FinalizeSolution(SolverReturn status,
134  const Vector& x,
135  const Vector& z_L, const Vector& z_U,
136  const Vector& c, const Vector& d,
137  const Vector& y_c, const Vector& y_d,
138  Number obj_value,
139  const IpoptData* ip_data,
141 
142  virtual bool IntermediateCallBack(AlgorithmMode mode,
143  Index iter, Number obj_value,
144  Number inf_pr, Number inf_du,
145  Number mu, Number d_norm,
146  Number regularization_size,
147  Number alpha_du, Number alpha_pr,
148  Index ls_trials,
149  const IpoptData* ip_data,
152 
154  virtual void
156  SmartPtr<Matrix>& P_approx);
157 
160  {
164  };
165 
168  {
173  };
174 
177  {
180  };
181 
183  bool CheckDerivatives(DerivativeTestEnum deriv_test,
184  Index deriv_test_start_index);
185 
188  static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
190 
193  {
194  return tnlp_;
195  }
196 
203  void ResortX(const Vector& x, Number* x_orig);
204  void ResortG(const Vector& c, const Vector& d, Number *g_orig);
205  void ResortBnds(const Vector& x_L, Number* x_L_orig,
206  const Vector& x_U, Number* x_U_orig);
208 
209  private:
219  TNLPAdapter(const TNLPAdapter&);
220 
222  void operator=(const TNLPAdapter&);
224 
228  const Index* x_not_fixed_map,
229  const Number* x_l, const Number* x_u,
230  const Number* g_l, const Number* g_u,
231  Index n_c, const Index* c_map,
232  std::list<Index>& c_deps);
233 
237 
240 
244 
253  /* Determines relaxation of fixing bound for RELAX_BOUNDS. */
255  /* Maximal slack for one-sidedly bounded variables. If a
256  * variable has only one bound, say a lower bound xL, then an
257  * upper bound xL + max_onesided_bound_slack_. If this value is
258  * zero, no upper bound is added. */
259  /* Took this out: Number max_onesided_bound_slack_; */
289 
293 
316 
319 
337 
346 
355 
358  bool update_local_x(const Vector& x);
359  bool update_local_lambda(const Vector& y_c, const Vector& y_d);
361 
365  bool internal_eval_g(bool new_x);
366  bool internal_eval_jac_g(bool new_x);
368 
373  void initialize_findiff_jac(const Index* iRow, const Index* jCol);
375 
382 
386 
390 
394 
398 
401 
405 
423  };
424 
425 } // namespace Ipopt
426 
427 #endif
Number nlp_upper_bound_inf_
Value for a upper bound that denotes infinity.
Number tol_
Overall convergence tolerance.
virtual bool Eval_grad_f(const Vector &x, Vector &g_f)
Number * x
Input: Starting point Output: Optimal solution.
bool internal_eval_g(bool new_x)
Index n_x_fixed_
Number of fixed variables.
Index derivative_test_first_index_
Index of first quantity to be checked.
This class Adapts the TNLP interface so it looks like an NLP interface.
virtual bool Eval_c(const Vector &x, Vector &c)
Index findiff_jac_nnz_
Number of unique nonzeros in constraint Jacobian.
Number findiff_perturbation_
Size of the perturbation for the derivative approximation.
Number * c_rhs_
the values for the full jacobian of g
TaggedObject::Tag x_tag_for_jac_g_
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
Specialized CompoundVector class specifically for the algorithm iterates.
Class for all IPOPT specific calculated quantities.
FixedVariableTreatmentEnum
Enum for treatment of fixed variables option.
JacobianApproxEnum
Enum for specifying technique for computing Jacobian.
bool update_local_lambda(const Vector &y_c, const Vector &y_d)
TNLP::IndexStyleEnum index_style_
Numbering style of variables and constraints.
JacobianApproxEnum jacobian_approximation_
Flag indicating how Jacobian is computed.
void ResortG(const Vector &c, const Vector &d, Number *g_orig)
DerivativeTestEnum derivative_test_
Enum indicating whether and which derivative test should be performed at starting point...
virtual bool GetStartingPoint(SmartPtr< Vector > x, bool need_x, SmartPtr< Vector > y_c, bool need_y_c, SmartPtr< Vector > y_d, bool need_y_d, SmartPtr< Vector > z_L, bool need_z_L, SmartPtr< Vector > z_U, bool need_z_U)
Method for obtaining the starting point for all the iterates.
SmartPtr< const MatrixSpace > pd_u_space_
Number * jac_g_
copy of g (c &amp; d)
Index * x_fixed_map_
Position of fixed variables.
AlgorithmMode
enum to indicate the mode in which the algorithm is
virtual bool ProcessOptions(const OptionsList &options, const std::string &prefix)
Overload if you want the chance to process options or parameters that may be specific to the NLP...
SmartPtr< ExpansionMatrix > P_d_g_
virtual bool GetWarmStartIterate(IteratesVector &warm_start_iterate)
Method for obtaining an entire iterate as a warmstart point.
double Number
Type of all numbers.
Definition: IpTypes.hpp:17
FixedVariableTreatmentEnum fixed_variable_treatment_
Flag indicating how fixed variables should be handled.
virtual bool IntermediateCallBack(AlgorithmMode mode, Index iter, Number obj_value, Number inf_pr, Number inf_du, Number mu, Number d_norm, Number regularization_size, Number alpha_du, Number alpha_pr, Index ls_trials, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
This method is called once per iteration, after the iteration summary output has been printed...
Vector Base Class.
Definition: IpVector.hpp:47
bool CheckDerivatives(DerivativeTestEnum deriv_test, Index deriv_test_start_index)
Method for performing the derivative test.
SmartPtr< TDependencyDetector > dependency_detector_
Object that can be used to detect linearly dependent rows in the equality constraint Jacobian...
SmartPtr< const MatrixSpace > Jac_d_space_
DECLARE_STD_EXCEPTION(INVALID_TNLP)
SmartPtr< ExpansionMatrix > P_x_x_U_
Expansion from fixed x_U (ipopt) to full x.
Index * findiff_jac_ia_
Start position for nonzero indices in ja for each column of Jacobian
void ResortBnds(const Vector &x_L, Number *x_L_orig, const Vector &x_U, Number *x_U_orig)
void initialize_findiff_jac(const Index *iRow, const Index *jCol)
Initialize sparsity structure for finite difference Jacobian.
Index * findiff_jac_ja_
Ordered by columns, for each column the row indices in Jacobian
SmartPtr< const VectorSpace > x_l_space_
Index n_full_x_
full dimension of x (fixed + non-fixed)
bool internal_eval_jac_g(bool new_x)
bool warm_start_same_structure_
Flag indicating whether the TNLP with identical structure has already been solved before...
SmartPtr< ExpansionMatrix > P_x_x_L_
Expansion from fixed x_L (ipopt) to full x.
SmartPtr< const MatrixSpace > pd_l_space_
TaggedObject::Tag y_d_tag_for_iterates_
This is the base class for all derived symmetric matrix types.
Definition: IpSymMatrix.hpp:23
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:172
TaggedObject::Tag x_tag_for_g_
Number derivative_test_tol_
Relative threshold for marking deviation from finite difference test.
This class stores a list of user set options.
void operator=(const TNLPAdapter &)
Overloaded Equals Operator.
SmartPtr< ExpansionMatrixSpace > P_d_g_space_
Expansion from d only (ipopt) to full ampl d.
bool derivative_test_print_all_
Flag indicating if all test values should be printed, or only those violating the threshold...
SolverReturn
enum for the return from the optimize algorithm (obviously we need to add more)
Definition: IpAlgTypes.hpp:22
Number * findiff_x_l_
Copy of the lower bounds.
TaggedObject::Tag y_c_tag_for_iterates_
virtual bool Eval_jac_d(const Vector &x, Matrix &jac_d)
SmartPtr< const Journalist > jnlst_
Journalist.
Matrix Base Class.
Definition: IpMatrix.hpp:27
Index nz_jac_c_
non-zeros of the jacobian of c
bool DetermineDependentConstraints(Index n_x_var, const Index *x_not_fixed_map, const Number *x_l, const Number *x_u, const Number *g_l, const Number *g_u, Index n_c, const Index *c_map, std::list< Index > &c_deps)
HessianApproximationType
enumeration for the Hessian information type.
Index * findiff_jac_postriplet_
Position of entry in original triplet matrix.
Index n_full_g_
full dimension of g (c + d)
Class to organize all the data required by the algorithm.
Definition: IpIpoptData.hpp:83
Index nz_jac_d_
non-zeros of the jacobian of d
virtual void GetScalingParameters(const SmartPtr< const VectorSpace > x_space, const SmartPtr< const VectorSpace > c_space, const SmartPtr< const VectorSpace > d_space, Number &obj_scaling, SmartPtr< Vector > &x_scaling, SmartPtr< Vector > &c_scaling, SmartPtr< Vector > &d_scaling) const
Routines to get the scaling parameters.
DerivativeTestEnum
Enum for specifying which derivative test is to be performed.
virtual bool Eval_jac_c(const Vector &x, Matrix &jac_c)
Index num_linear_variables_
Number of linear variables.
Number * x_L
Lower bounds on variables.
bool update_local_x(const Vector &x)
SmartPtr< const MatrixSpace > px_u_space_
SmartPtr< ExpansionMatrixSpace > P_x_full_x_space_
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
SmartPtr< ExpansionMatrixSpace > P_x_x_U_space_
Number Number * x_U
Upper bounds on variables.
SmartPtr< ExpansionMatrix > P_c_g_
Number nlp_lower_bound_inf_
Value for a lower bound that denotes -infinity.
void ResortX(const Vector &x, Number *x_orig)
Sort the primal variables, and add the fixed values in x.
Number Number * x_scaling
virtual void GetQuasiNewtonApproximationSpaces(SmartPtr< VectorSpace > &approx_space, SmartPtr< Matrix > &P_approx)
Method returning information on quasi-Newton approximation.
TNLPAdapter(const SmartPtr< TNLP > tnlp, const SmartPtr< const Journalist > jnlst=NULL)
Default constructor.
unsigned int Tag
Type for the Tag values.
SmartPtr< const VectorSpace > c_space_
SmartPtr< TNLP > tnlp_
Pointer to the TNLP class (class specific to Number* vectors and harwell triplet matrices) ...
Brief Class Description.
Definition: IpNLP.hpp:31
HessianApproximationType hessian_approximation_
Flag indicating what Hessian information is to be used.
Index nz_jac_c_no_extra_
non-zeros of the jacobian of c without added constraints for fixed variables.
SmartPtr< ExpansionMatrixSpace > P_c_g_space_
Expansion from c only (ipopt) to full ampl c.
bool dependency_detection_with_rhs_
Flag indicating if rhs should be considered during dependency detection.
SmartPtr< const VectorSpace > d_l_space_
SmartPtr< const VectorSpace > d_u_space_
Index nz_full_jac_g_
number of non-zeros in full-size Jacobian of g
Number derivative_test_perturbation_
Size of the perturbation for the derivative test.
SmartPtr< ExpansionMatrix > P_x_full_x_
Expansion from fixed x (ipopt) to full x.
virtual bool Eval_h(const Vector &x, Number obj_factor, const Vector &yc, const Vector &yd, SymMatrix &h)
virtual void FinalizeSolution(SolverReturn status, const Vector &x, const Vector &z_L, const Vector &z_U, const Vector &c, const Vector &d, const Vector &y_c, const Vector &y_d, Number obj_value, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)
This method is called at the very end of the optimization.
IndexStyleEnum
overload this method to return the number of variables and constraints, and the number of non-zeros i...
Definition: IpTNLP.hpp:80
SmartPtr< const SymMatrixSpace > Hess_lagrangian_space_
SmartPtr< ExpansionMatrixSpace > P_x_x_L_space_
SmartPtr< const MatrixSpace > Jac_c_space_
Number * full_lambda_
copy of the full x vector (fixed &amp; non-fixed)
virtual bool GetSpaces(SmartPtr< const VectorSpace > &x_space, SmartPtr< const VectorSpace > &c_space, SmartPtr< const VectorSpace > &d_space, SmartPtr< const VectorSpace > &x_l_space, SmartPtr< const MatrixSpace > &px_l_space, SmartPtr< const VectorSpace > &x_u_space, SmartPtr< const MatrixSpace > &px_u_space, SmartPtr< const VectorSpace > &d_l_space, SmartPtr< const MatrixSpace > &pd_l_space, SmartPtr< const VectorSpace > &d_u_space, SmartPtr< const MatrixSpace > &pd_u_space, SmartPtr< const MatrixSpace > &Jac_c_space, SmartPtr< const MatrixSpace > &Jac_d_space, SmartPtr< const SymMatrixSpace > &Hess_lagrangian_space)
Method for creating the derived vector / matrix types (Do not delete these, the ).
Index nz_h_
number of non-zeros in the non-fixed-size Hessian
Number obj_scaling
virtual ~TNLPAdapter()
Default destructor.
Number * findiff_x_u_
Copy of the upper bounds.
SmartPtr< const VectorSpace > d_space_
Number point_perturbation_radius_
Maximal perturbation of the initial point.
virtual bool Eval_d(const Vector &x, Vector &d)
TaggedObject::Tag x_tag_for_iterates_
SmartPtr< TNLP > tnlp() const
Accessor method for the underlying TNLP.
virtual bool Eval_f(const Vector &x, Number &f)
Index nz_full_h_
number of non-zeros in full-size Hessian
Number * full_g_
copy of lambda (yc &amp; yd)
virtual bool GetBoundsInformation(const Matrix &Px_L, Vector &x_L, const Matrix &Px_U, Vector &x_U, const Matrix &Pd_L, Vector &d_L, const Matrix &Pd_U, Vector &d_U)
Method for obtaining the bounds information.
SmartPtr< const VectorSpace > x_space_
SmartPtr< const VectorSpace > x_u_space_
SmartPtr< const MatrixSpace > px_l_space_