Ipopt  3.12.12
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
IpTNLP.hpp
Go to the documentation of this file.
1 // Copyright (C) 2004, 2009 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: IpTNLP.hpp 2212 2013-04-14 14:51:52Z stefan $
6 //
7 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8 
9 #ifndef __IPTNLP_HPP__
10 #define __IPTNLP_HPP__
11 
12 #include "IpUtils.hpp"
13 #include "IpReferenced.hpp"
14 #include "IpException.hpp"
15 #include "IpAlgTypes.hpp"
16 #include "IpReturnCodes.hpp"
17 
18 #include <map>
19 
20 namespace Ipopt
21 {
22  // forward declarations
23  class IpoptData;
24  class IpoptCalculatedQuantities;
25  class IteratesVector;
26 
50  class TNLP : public ReferencedObject
51  {
52  public:
55  {
58  };
59 
62  TNLP()
63  {}
64 
66  virtual ~TNLP()
67  {}
69 
70  DECLARE_STD_EXCEPTION(INVALID_TNLP);
71 
81  virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g,
82  Index& nnz_h_lag, IndexStyleEnum& index_style)=0;
83 
84  typedef std::map<std::string, std::vector<std::string> > StringMetaDataMapType;
85  typedef std::map<std::string, std::vector<Index> > IntegerMetaDataMapType;
86  typedef std::map<std::string, std::vector<Number> > NumericMetaDataMapType;
87 
90  virtual bool get_var_con_metadata(Index n,
91  StringMetaDataMapType& var_string_md,
92  IntegerMetaDataMapType& var_integer_md,
93  NumericMetaDataMapType& var_numeric_md,
94  Index m,
95  StringMetaDataMapType& con_string_md,
96  IntegerMetaDataMapType& con_integer_md,
97  NumericMetaDataMapType& con_numeric_md)
98 
99  {
100  return false;
101  }
102 
109  virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u,
110  Index m, Number* g_l, Number* g_u)=0;
111 
120  bool& use_x_scaling, Index n,
121  Number* x_scaling,
122  bool& use_g_scaling, Index m,
123  Number* g_scaling)
124  {
125  return false;
126  }
127 
132  virtual bool get_variables_linearity(Index n, LinearityType* var_types)
133  {
134  return false;
135  }
136 
140  virtual bool get_constraints_linearity(Index m, LinearityType* const_types)
141  {
142  return false;
143  }
144 
152  virtual bool get_starting_point(Index n, bool init_x, Number* x,
153  bool init_z, Number* z_L, Number* z_U,
154  Index m, bool init_lambda,
155  Number* lambda)=0;
156 
161  virtual bool get_warm_start_iterate(IteratesVector& warm_start_iterate)
162  {
163  return false;
164  }
165 
167  virtual bool eval_f(Index n, const Number* x, bool new_x,
168  Number& obj_value)=0;
169 
172  virtual bool eval_grad_f(Index n, const Number* x, bool new_x,
173  Number* grad_f)=0;
174 
176  virtual bool eval_g(Index n, const Number* x, bool new_x,
177  Index m, Number* g)=0;
183  virtual bool eval_jac_g(Index n, const Number* x, bool new_x,
184  Index m, Index nele_jac, Index* iRow,
185  Index *jCol, Number* values)=0;
186 
196  virtual bool eval_h(Index n, const Number* x, bool new_x,
197  Number obj_factor, Index m, const Number* lambda,
198  bool new_lambda, Index nele_hess,
199  Index* iRow, Index* jCol, Number* values)
200  {
201  return false;
202  }
204 
208  virtual void finalize_solution(SolverReturn status,
209  Index n, const Number* x, const Number* z_L, const Number* z_U,
210  Index m, const Number* g, const Number* lambda,
211  Number obj_value,
212  const IpoptData* ip_data,
213  IpoptCalculatedQuantities* ip_cq)=0;
226  virtual void finalize_metadata(Index n,
227  const StringMetaDataMapType& var_string_md,
228  const IntegerMetaDataMapType& var_integer_md,
229  const NumericMetaDataMapType& var_numeric_md,
230  Index m,
231  const StringMetaDataMapType& con_string_md,
232  const IntegerMetaDataMapType& con_integer_md,
233  const NumericMetaDataMapType& con_numeric_md)
234  {}
235 
236 
241  Index iter, Number obj_value,
242  Number inf_pr, Number inf_du,
243  Number mu, Number d_norm,
244  Number regularization_size,
245  Number alpha_du, Number alpha_pr,
246  Index ls_trials,
247  const IpoptData* ip_data,
249  {
250  return true;
251  }
253 
268  {
269  return -1;
270  }
271 
272  virtual bool get_list_of_nonlinear_variables(Index num_nonlin_vars,
273  Index* pos_nonlin_vars)
274  {
275  return false;
276  }
278 
279  private:
289  //TNLP();
290 
292  TNLP(const TNLP&);
293 
295  void operator=(const TNLP&);
297  };
298 
299 } // namespace Ipopt
300 
301 #endif
std::map< std::string, std::vector< Number > > NumericMetaDataMapType
Definition: IpTNLP.hpp:86
Number * x
Input: Starting point Output: Optimal solution.
virtual bool eval_jac_g(Index n, const Number *x, bool new_x, Index m, Index nele_jac, Index *iRow, Index *jCol, Number *values)=0
overload this method to return the jacobian of the constraints.
Specialized CompoundVector class specifically for the algorithm iterates.
Class for all IPOPT specific calculated quantities.
Number Number Index Number Number Index Index Index index_style
indexing style for iRow &amp; jCol, 0 for C style, 1 for Fortran style
virtual bool get_starting_point(Index n, bool init_x, Number *x, bool init_z, Number *z_L, Number *z_U, Index m, bool init_lambda, Number *lambda)=0
overload this method to return the starting point.
virtual bool eval_h(Index n, const Number *x, bool new_x, Number obj_factor, Index m, const Number *lambda, bool new_lambda, Index nele_hess, Index *iRow, Index *jCol, Number *values)
overload this method to return the hessian of the lagrangian.
Definition: IpTNLP.hpp:196
Number Number Index m
Number of constraints.
Constraint/Varaible is non-linear.
Definition: IpTNLP.hpp:57
void operator=(const TNLP &)
Overloaded Equals Operator.
virtual bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m, Number *g_l, Number *g_u)=0
overload this method to return the information about the bound on the variables and constraints...
virtual bool get_variables_linearity(Index n, LinearityType *var_types)
overload this method to return the variables linearity (TNLP::LINEAR or TNLP::NON_LINEAR).
Definition: IpTNLP.hpp:132
Number Number * g
Values of constraint at final point (output only - ignored if set to NULL)
virtual bool intermediate_callback(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)
Intermediate Callback method for the user.
Definition: IpTNLP.hpp:240
AlgorithmMode
enum to indicate the mode in which the algorithm is
Constraint/Variable is linear.
Definition: IpTNLP.hpp:56
double Number
Type of all numbers.
Definition: IpTypes.hpp:17
virtual bool get_warm_start_iterate(IteratesVector &warm_start_iterate)
overload this method to provide an Ipopt iterate (already in the form Ipopt requires it internally) f...
Definition: IpTNLP.hpp:161
DECLARE_STD_EXCEPTION(INVALID_TNLP)
virtual bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, IndexStyleEnum &index_style)=0
virtual ~TNLP()
Default destructor.
Definition: IpTNLP.hpp:66
virtual void finalize_metadata(Index n, const StringMetaDataMapType &var_string_md, const IntegerMetaDataMapType &var_integer_md, const NumericMetaDataMapType &var_numeric_md, Index m, const StringMetaDataMapType &con_string_md, const IntegerMetaDataMapType &con_integer_md, const NumericMetaDataMapType &con_numeric_md)
This method is called just before finalize_solution.
Definition: IpTNLP.hpp:226
LinearityType
Type of the constraints.
Definition: IpTNLP.hpp:54
virtual bool get_scaling_parameters(Number &obj_scaling, bool &use_x_scaling, Index n, Number *x_scaling, bool &use_g_scaling, Index m, Number *g_scaling)
overload this method to return scaling parameters.
Definition: IpTNLP.hpp:119
virtual bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g)=0
overload this method to return the vector of constraint values
ReferencedObject class.
virtual bool get_var_con_metadata(Index n, StringMetaDataMapType &var_string_md, IntegerMetaDataMapType &var_integer_md, NumericMetaDataMapType &var_numeric_md, Index m, StringMetaDataMapType &con_string_md, IntegerMetaDataMapType &con_integer_md, NumericMetaDataMapType &con_numeric_md)
overload this method to return any meta data for the variables and the constraints ...
Definition: IpTNLP.hpp:90
SolverReturn
enum for the return from the optimize algorithm (obviously we need to add more)
Definition: IpAlgTypes.hpp:22
Number Number Index Number Number Index nele_jac
Number of non-zero elements in constraint Jacobian.
virtual bool get_list_of_nonlinear_variables(Index num_nonlin_vars, Index *pos_nonlin_vars)
Definition: IpTNLP.hpp:272
virtual bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value)=0
overload this method to return the value of the objective function
Class to organize all the data required by the algorithm.
Definition: IpIpoptData.hpp:83
virtual Index get_number_of_nonlinear_variables()
Definition: IpTNLP.hpp:267
virtual bool get_constraints_linearity(Index m, LinearityType *const_types)
overload this method to return the constraint linearity.
Definition: IpTNLP.hpp:140
int Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:19
Number Number * x_scaling
std::map< std::string, std::vector< Index > > IntegerMetaDataMapType
Definition: IpTNLP.hpp:85
Number Number Index Number Number Index Index nele_hess
Number of non-zero elements in Hessian of Lagrangian.
std::map< std::string, std::vector< std::string > > StringMetaDataMapType
Definition: IpTNLP.hpp:84
Number Number Number * g_scaling
IndexStyleEnum
overload this method to return the number of variables and constraints, and the number of non-zeros i...
Definition: IpTNLP.hpp:80
Base class for all NLP&#39;s that use standard triplet matrix form and dense vectors. ...
Definition: IpTNLP.hpp:50
Number obj_scaling
virtual bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f)=0
overload this method to return the vector of the gradient of the objective w.r.t. ...
virtual void finalize_solution(SolverReturn status, Index n, const Number *x, const Number *z_L, const Number *z_U, Index m, const Number *g, const Number *lambda, Number obj_value, const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq)=0
This method is called when the algorithm is complete so the TNLP can store/write the solution...