Ipopt Documentation  
IpStdInterfaceTNLP.hpp
Go to the documentation of this file.
1 // Copyright (C) 2004, 2010 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
6 
7 #ifndef __IPSTDINTERFACETNLP_HPP__
8 #define __IPSTDINTERFACETNLP_HPP__
9 
10 #include "IpUtils.hpp"
11 #include "IpTNLP.hpp"
12 #include "IpJournalist.hpp"
13 #include "IpException.hpp"
14 #include "IpStdCInterface.h"
15 #include "IpSmartPtr.hpp"
16 
17 namespace Ipopt
18 {
20 DECLARE_STD_EXCEPTION(INVALID_STDINTERFACE_NLP);
21 
28 class StdInterfaceTNLP : public TNLP
29 {
30 public:
33 
40  Index n_var,
41  const Number* x_L,
42  const Number* x_U,
43  Index n_con,
44  const Number* g_L,
45  const Number* g_U,
46  Index nele_jac,
47  Index nele_hess,
48  Index index_style,
49  const Number* start_x,
50  const Number* start_lam,
51  const Number* start_z_L,
52  const Number* start_z_U,
58  Intermediate_CB intermediate_cb,
59  Number* x_sol,
60  Number* z_L_sol,
61  Number* z_U_sol,
62  Number* g_sol,
63  Number* lam_sol,
64  Number* obj_sol,
65  UserDataPtr user_data,
66  Number obj_scaling = 1,
67  const Number* x_scaling = NULL,
68  const Number* g_scaling = NULL
69  );
70 
72  virtual ~StdInterfaceTNLP();
74 
80  virtual bool get_nlp_info(
81  Index& n,
82  Index& m,
83  Index& nnz_jac_g,
84  Index& nnz_h_lag,
85  IndexStyleEnum& index_style
86  );
87 
88  virtual bool get_bounds_info(
89  Index n,
90  Number* x_l,
91  Number* x_u,
92  Index m,
93  Number* g_l,
94  Number* g_u
95  );
96 
97  virtual bool get_scaling_parameters(
98  Number& obj_scaling,
99  bool& use_x_scaling,
100  Index n,
101  Number* x_scaling,
102  bool& use_g_scaling,
103  Index m,
104  Number* g_scaling
105  );
106 
107  virtual bool get_starting_point(
108  Index n,
109  bool init_x,
110  Number* x,
111  bool init_z,
112  Number* z_L,
113  Number* z_U,
114  Index m,
115  bool init_lambda,
116  Number* lambda
117  );
118 
119  virtual bool eval_f(
120  Index n,
121  const Number* x,
122  bool new_x,
123  Number& obj_value
124  );
125 
126  virtual bool eval_grad_f(
127  Index n,
128  const Number* x,
129  bool new_x,
130  Number* grad_f
131  );
132 
133  virtual bool eval_g(
134  Index n,
135  const Number* x,
136  bool new_x,
137  Index m,
138  Number* g
139  );
140 
141  virtual bool eval_jac_g(
142  Index n,
143  const Number* x,
144  bool new_x,
145  Index m,
146  Index nele_jac,
147  Index* iRow,
148  Index* jCol,
149  Number* values
150  );
151 
152  virtual bool eval_h(
153  Index n,
154  const Number* x,
155  bool new_x,
156  Number obj_factor,
157  Index m,
158  const Number* lambda,
159  bool new_lambda,
160  Index nele_hess,
161  Index* iRow,
162  Index* jCol,
163  Number* values
164  );
165 
166  virtual bool intermediate_callback(
167  AlgorithmMode mode,
168  Index iter,
169  Number obj_value,
170  Number inf_pr,
171  Number inf_du,
172  Number mu,
173  Number d_norm,
174  Number regularization_size,
175  Number alpha_du,
176  Number alpha_pr,
177  Index ls_trials,
178  const IpoptData* ip_data,
180  );
182 
185  virtual void finalize_solution(
186  SolverReturn status,
187  Index n,
188  const Number* x,
189  const Number* z_L,
190  const Number* z_U,
191  Index m,
192  const Number* g,
193  const Number* lambda,
194  Number obj_value,
195  const IpoptData* ip_data,
197  );
199 
203  Bool scaled,
204  Index n,
205  Number* x,
206  Number* z_L,
207  Number* z_U,
208  Index m,
209  Number* g,
210  Number* lambda
211  ) const
212  {
213  return TNLP::get_curr_iterate(ip_data_, ip_cq_, scaled, n, x, z_L, z_U, m, g, lambda);
214  }
215 
219  bool scaled,
220  Index n,
221  Number* x_L_violation,
222  Number* x_U_violation,
223  Number* compl_x_L,
224  Number* compl_x_U,
225  Number* grad_lag_x,
226  Index m,
227  Number* nlp_constraint_violation,
228  Number* compl_g
229  ) const
230  {
231  return TNLP::get_curr_violations(ip_data_, ip_cq_, scaled, n, x_L_violation, x_U_violation, compl_x_L, compl_x_U, grad_lag_x, m, nlp_constraint_violation, compl_g);
232  }
233 
234 private:
237 
240 
241  const Index n_var_;
243  const Index n_con_;
245  const Number* x_L_;
247  const Number* x_U_;
249  const Number* g_L_;
251  const Number* g_U_;
259  const Number* start_x_;
287 
290 
300 
307 
310  bool new_x,
311  Index n,
312  const Number* x
313  );
314 
323 
325 
328  const StdInterfaceTNLP&
329  );
330 
332  void operator=(
333  const StdInterfaceTNLP&
334  );
336 
337 };
338 
339 } // namespace Ipopt
340 
341 #endif
AlgorithmMode
enum to indicate the mode in which the algorithm is
bool(* Intermediate_CB)(ipindex alg_mod, ipindex iter_count, ipnumber obj_value, ipnumber inf_pr, ipnumber inf_du, ipnumber mu, ipnumber d_norm, ipnumber regularization_size, ipnumber alpha_du, ipnumber alpha_pr, ipindex ls_trials, UserDataPtr user_data)
Type defining the callback function for giving intermediate execution control to the user.
void * UserDataPtr
A pointer for anything that is to be passed between the called and individual callback function.
bool(* Eval_H_CB)(ipindex n, ipnumber *x, bool new_x, ipnumber obj_factor, ipindex m, ipnumber *lambda, bool new_lambda, ipindex nele_hess, ipindex *iRow, ipindex *jCol, ipnumber *values, UserDataPtr user_data)
Type defining the callback function for evaluating the Hessian of the Lagrangian function.
bool(* Eval_G_CB)(ipindex n, ipnumber *x, bool new_x, ipindex m, ipnumber *g, UserDataPtr user_data)
Type defining the callback function for evaluating the value of the constraint functions.
bool Bool
define a boolean type for C
bool(* Eval_F_CB)(ipindex n, ipnumber *x, bool new_x, ipnumber *obj_value, UserDataPtr user_data)
Type defining the callback function for evaluating the value of the objective function.
bool(* Eval_Grad_F_CB)(ipindex n, ipnumber *x, bool new_x, ipnumber *grad_f, UserDataPtr user_data)
Type defining the callback function for evaluating the gradient of the objective function.
bool(* Eval_Jac_G_CB)(ipindex n, ipnumber *x, bool new_x, ipindex m, ipindex nele_jac, ipindex *iRow, ipindex *jCol, ipnumber *values, UserDataPtr user_data)
Type defining the callback function for evaluating the Jacobian of the constrant functions.
Class for all IPOPT specific calculated quantities.
Class to organize all the data required by the algorithm.
Definition: IpIpoptData.hpp:98
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:165
Implementation of a TNLP for the Standard C interface.
const Number * x_U_
Pointer to Number array containing upper bounds for variables.
IpoptCalculatedQuantities * ip_cq_
Eval_G_CB eval_g_
Pointer to callback function evaluating value of constraints.
Eval_Jac_G_CB eval_jac_g_
Pointer to callback function evaluating Jacobian of constraints.
const Number * start_x_
Pointer to Number array containing starting point for variables.
const Number * g_L_
Pointer to Number array containing lower bounds for constraints.
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)
Method to request scaling parameters.
virtual bool get_nlp_info(Index &n, Index &m, Index &nnz_jac_g, Index &nnz_h_lag, IndexStyleEnum &index_style)
Method to request the initial information about the problem.
virtual bool eval_grad_f(Index n, const Number *x, bool new_x, Number *grad_f)
Method to request the gradient of the objective function.
Eval_Grad_F_CB eval_grad_f_
Pointer to callback function evaluating gradient of objective function.
const Number * start_lam_
Pointer to Number array containing starting values for constraint multipliers.
const Number * g_U_
Pointer to Number array containing upper bounds for constraints.
void operator=(const StdInterfaceTNLP &)
Default Assignment Operator.
virtual bool eval_f(Index n, const Number *x, bool new_x, Number &obj_value)
Method to request the value of the objective function.
bool get_curr_violations(bool scaled, Index n, Number *x_L_violation, Number *x_U_violation, Number *compl_x_L, Number *compl_x_U, Number *grad_lag_x, Index m, Number *nlp_constraint_violation, Number *compl_g) const
get_curr_violations() to be called by GetIpoptCurrentViolations()
const Index n_con_
Number of constraints.
virtual ~StdInterfaceTNLP()
Default destructor.
const Number * start_z_U_
Pointer to Number array containing starting values for upper bound multipliers.
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)
This method is called when the algorithm has finished (successfully or not) so the TNLP can digest th...
const Number * start_z_L_
Pointer to Number array containing starting values for lower bound multipliers.
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)
Method to request either the sparsity structure or the values of the Hessian of the Lagrangian.
StdInterfaceTNLP()
Default Constructor.
const Index n_var_
Number of variables.
Number obj_scaling_
Objective scaling factor.
virtual bool eval_g(Index n, const Number *x, bool new_x, Index m, Number *g)
Method to request the constraint values.
const Index nele_jac_
Number of non-zero elements in the constraint Jacobian.
const Number * x_L_
Pointer to Number array containing lower bounds for variables.
Intermediate_CB intermediate_cb_
Pointer to intermediate callback function giving control to user.
virtual bool eval_jac_g(Index n, const Number *x, bool new_x, Index m, Index nele_jac, Index *iRow, Index *jCol, Number *values)
Method to request either the sparsity structure or the values of the Jacobian of the constraints.
const Index nele_hess_
Number of non-zero elements in the Hessian.
Eval_H_CB eval_h_
Pointer to callback function evaluating Hessian of Lagrangian.
const Number * g_scaling_
Scaling factors for constraints (if not 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.
StdInterfaceTNLP(Index n_var, const Number *x_L, const Number *x_U, Index n_con, const Number *g_L, const Number *g_U, Index nele_jac, Index nele_hess, Index index_style, const Number *start_x, const Number *start_lam, const Number *start_z_L, const Number *start_z_U, Eval_F_CB eval_f, Eval_G_CB eval_g, Eval_Grad_F_CB eval_grad_f, Eval_Jac_G_CB eval_jac_g, Eval_H_CB eval_h, Intermediate_CB intermediate_cb, Number *x_sol, Number *z_L_sol, Number *z_U_sol, Number *g_sol, Number *lam_sol, Number *obj_sol, UserDataPtr user_data, Number obj_scaling=1, const Number *x_scaling=NULL, const Number *g_scaling=NULL)
Constructor, given dimensions of problem, function pointers for evaluation callback functions,...
const Index index_style_
Starting value of the iRow and jCol parameters for matrices.
bool get_curr_iterate(Bool scaled, Index n, Number *x, Number *z_L, Number *z_U, Index m, Number *g, Number *lambda) const
get_curr_iterate() to be called by GetIpoptCurrentIterate()
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)
Method to request the starting point before iterating.
virtual bool get_bounds_info(Index n, Number *x_l, Number *x_u, Index m, Number *g_l, Number *g_u)
Method to request bounds on the variables and constraints.
void apply_new_x(bool new_x, Index n, const Number *x)
Update the internal state if the x value changes.
Eval_F_CB eval_f_
Pointer to callback function evaluating value of objective function.
Number * non_const_x_
A non-const copy of x - this is kept up-to-date in apply_new_x.
StdInterfaceTNLP(const StdInterfaceTNLP &)
Copy Constructor.
const Number * x_scaling_
Scaling factors for variables (if not NULL)
UserDataPtr user_data_
Pointer to user data.
SmartPtr< const Journalist > jnlst_
Journalist.
Base class for all NLP's that use standard triplet matrix form and dense vectors.
Definition: IpTNLP.hpp:48
bool get_curr_violations(const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq, bool scaled, Index n, Number *x_L_violation, Number *x_U_violation, Number *compl_x_L, Number *compl_x_U, Number *grad_lag_x, Index m, Number *nlp_constraint_violation, Number *compl_g) const
Get primal and dual infeasibility of the current iterate.
bool get_curr_iterate(const IpoptData *ip_data, IpoptCalculatedQuantities *ip_cq, bool scaled, Index n, Number *x, Number *z_L, Number *z_U, Index m, Number *g, Number *lambda) const
Get primal and dual variable values of the current iterate.
This file contains a base class for all exceptions and a set of macros to help with exceptions.
DECLARE_STD_EXCEPTION(FATAL_ERROR_IN_LINEAR_SOLVER)
SolverReturn
enum for the return from the optimize algorithm
Definition: IpAlgTypes.hpp:20
ipindex Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:20
ipnumber Number
Type of all numbers.
Definition: IpTypes.hpp:17