Couenne  0.5.8
CouenneTNLP.hpp
Go to the documentation of this file.
1 /* $Id: CouenneTNLP.hpp 893 2012-08-09 14:48:19Z pbelotti $
2  *
3  * Name: CouenneTNLP.hpp
4  * Authors: Pietro Belotti, Lehigh University
5  * Purpose: Definition of an NLP interface with gradient/Jacobian/etc
6  *
7  * This file is licensed under the Eclipse Public License (EPL)
8  */
9 
10 #ifndef COUENNETNLP_HPP
11 #define COUENNETNLP_HPP
12 
13 #include "IpTNLP.hpp"
14 #include "CouenneExprJac.hpp"
15 #include "CouenneExprHess.hpp"
16 #include "CouenneTypes.hpp"
17 
18 #include <vector>
19 #include <set>
20 
21 namespace Couenne {
22 
23  class CouenneProblem;
24  class CouenneSparseMatrix;
25 
27  class CouenneTNLP: public Ipopt::TNLP {
28 
29  public:
30 
33 
36 
39 
42 
45 
47  virtual ~CouenneTNLP ();
48 
50  void setInitSol (const double *sol);
51 
54  {return sol_;}
55 
58  {return bestZ_;}
59 
65  virtual bool get_nlp_info (Ipopt::Index& n,
66  Ipopt::Index& m,
67  Ipopt::Index& nnz_jac_g,
68  Ipopt::Index& nnz_h_lag,
69  enum Ipopt::TNLP::IndexStyleEnum& index_style);
70 
78 
84 
89 
96  virtual bool get_starting_point (Ipopt::Index n,
97  bool init_x, Ipopt::Number* x,
98  bool init_z, Ipopt::Number* z_L, Ipopt::Number* z_U,
99  Ipopt::Index m,
100  bool init_lambda, Ipopt::Number* lambda);
101 
103  virtual bool eval_f (Ipopt::Index n, const Ipopt::Number* x, bool new_x,
104  Ipopt::Number& obj_value);
105 
107  virtual bool eval_grad_f (Ipopt::Index n, const Ipopt::Number* x,
108  bool new_x,
109  Ipopt::Number* grad_f);
110 
112  virtual bool eval_g (Ipopt::Index n, const Ipopt::Number* x, bool new_x,
114 
120  virtual bool eval_jac_g (Ipopt::Index n, const Ipopt::Number* x, bool new_x,
121  Ipopt::Index m, Ipopt::Index nele_jac, Ipopt::Index* iRow,
122  Ipopt::Index *jCol, Ipopt::Number* values);
123 
133  virtual bool eval_h (Ipopt::Index n, const Ipopt::Number* x, bool new_x,
134  Ipopt::Number obj_factor, Ipopt::Index m, const Ipopt::Number* lambda,
135  bool new_lambda, Ipopt::Index nele_hess,
136  Ipopt::Index* iRow, Ipopt::Index* jCol, Ipopt::Number* values);
137 
140  Ipopt::Index n, const Ipopt::Number* x, const Ipopt::Number* z_L, const Ipopt::Number* z_U,
141  Ipopt::Index m, const Ipopt::Number* g, const Ipopt::Number* lambda,
142  Ipopt::Number obj_value,
143  const Ipopt::IpoptData* ip_data,
145 
149  virtual bool intermediate_callback (Ipopt::AlgorithmMode mode,
150  Ipopt::Index iter, Ipopt::Number obj_value,
151  Ipopt::Number inf_pr, Ipopt::Number inf_du,
152  Ipopt::Number mu, Ipopt::Number d_norm,
153  Ipopt::Number regularization_size,
154  Ipopt::Number alpha_du, Ipopt::Number alpha_pr,
155  Ipopt::Index ls_trials,
156  const Ipopt::IpoptData* ip_data,
158 
172 
174  virtual bool get_list_of_nonlinear_variables (Ipopt::Index num_nonlin_vars,
175  Ipopt::Index* pos_nonlin_vars);
176 
179  virtual void setObjective (expression *newObj);
180 
183  {return optHessian_;}
184 
186  inline bool &getSaveOptHessian ()
187  {return saveOptHessian_;}
188 
189  private:
190 
192  CouenneProblem *problem_;
193 
195  CouNumber *sol0_;
196 
198  CouNumber *sol_;
199 
201  CouNumber bestZ_;
202 
204  std::vector <std::pair <int, expression *> > gradient_;
205 
207  std::set <int> nonLinVars_;
208 
210  ExprJac Jac_;
211 
214  ExprHess *HLa_;
215 
217  CouenneSparseMatrix *optHessian_;
218 
220  bool saveOptHessian_;
221  };
222 }
223 
224 #endif
Couenne::CouenneTNLP
Class for handling NLPs using CouenneProblem.
Definition: CouenneTNLP.hpp:27
Couenne::CouenneTNLP::get_bounds_info
virtual bool get_bounds_info(Ipopt::Index n, Ipopt::Number *x_l, Ipopt::Number *x_u, Ipopt::Index m, Ipopt::Number *g_l, Ipopt::Number *g_u)
return the information about the bound on the variables and constraints.
Ipopt::IpoptData
Couenne::CouenneTNLP::finalize_solution
virtual void finalize_solution(Ipopt::SolverReturn status, Ipopt::Index n, const Ipopt::Number *x, const Ipopt::Number *z_L, const Ipopt::Number *z_U, Ipopt::Index m, const Ipopt::Number *g, const Ipopt::Number *lambda, Ipopt::Number obj_value, const Ipopt::IpoptData *ip_data, Ipopt::IpoptCalculatedQuantities *ip_cq)
This method is called when the algorithm is complete so the TNLP can store/write the solution.
Couenne::CouenneTNLP::CouenneTNLP
CouenneTNLP()
Empty constructor.
Couenne::ExprHess
expression matrices.
Definition: CouenneExprHess.hpp:21
Couenne::CouenneTNLP::eval_h
virtual bool eval_h(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number obj_factor, Ipopt::Index m, const Ipopt::Number *lambda, bool new_lambda, Ipopt::Index nele_hess, Ipopt::Index *iRow, Ipopt::Index *jCol, Ipopt::Number *values)
return the hessian of the lagrangian.
Couenne::CouenneTNLP::get_starting_point
virtual bool get_starting_point(Ipopt::Index n, bool init_x, Ipopt::Number *x, bool init_z, Ipopt::Number *z_L, Ipopt::Number *z_U, Ipopt::Index m, bool init_lambda, Ipopt::Number *lambda)
return the starting point.
Couenne::CouenneTNLP::get_variables_linearity
virtual bool get_variables_linearity(Ipopt::Index n, Ipopt::TNLP::LinearityType *var_types)
return the variables linearity (TNLP::Linear or TNLP::NonLinear).
Ipopt::IpoptCalculatedQuantities
Couenne::CouenneTNLP::get_constraints_linearity
virtual bool get_constraints_linearity(Ipopt::Index m, Ipopt::TNLP::LinearityType *const_types)
return the constraint linearity.
Ipopt::Number
double Number
Couenne::CouenneTNLP::operator=
CouenneTNLP & operator=(const CouenneTNLP &rhs)
Assignment.
CouenneExprJac.hpp
Couenne::CouenneTNLP::optHessian
CouenneSparseMatrix *& optHessian()
Get methods.
Definition: CouenneTNLP.hpp:182
Couenne
general include file for different compilers
Definition: CouenneAggrProbing.hpp:24
Ipopt::Index
int Index
Couenne::CouenneTNLP::intermediate_callback
virtual bool intermediate_callback(Ipopt::AlgorithmMode mode, Ipopt::Index iter, Ipopt::Number obj_value, Ipopt::Number inf_pr, Ipopt::Number inf_du, Ipopt::Number mu, Ipopt::Number d_norm, Ipopt::Number regularization_size, Ipopt::Number alpha_du, Ipopt::Number alpha_pr, Ipopt::Index ls_trials, const Ipopt::IpoptData *ip_data, Ipopt::IpoptCalculatedQuantities *ip_cq)
Intermediate Callback method for the user.
Couenne::CouenneTNLP::eval_grad_f
virtual bool eval_grad_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number *grad_f)
return the vector of the gradient of the objective w.r.t. x
Couenne::CouNumber
double CouNumber
main number type in Couenne
Definition: CouenneTypes.hpp:100
Couenne::ExprJac
Jacobian of the problem (computed through Couenne expression classes).
Definition: CouenneExprJac.hpp:21
Couenne::CouenneTNLP::get_nlp_info
virtual bool get_nlp_info(Ipopt::Index &n, Ipopt::Index &m, Ipopt::Index &nnz_jac_g, Ipopt::Index &nnz_h_lag, enum Ipopt::TNLP::IndexStyleEnum &index_style)
return the number of variables and constraints, and the number of non-zeros in the jacobian and the h...
Couenne::CouenneTNLP::setObjective
virtual void setObjective(expression *newObj)
Change objective function and modify gradient expressions accordingly.
CouenneTypes.hpp
Couenne::CouenneTNLP::getSolValue
CouNumber getSolValue()
returns value of the best solution
Definition: CouenneTNLP.hpp:57
Couenne::CouenneTNLP::eval_g
virtual bool eval_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Number *g)
return the vector of constraint values
Ipopt::TNLP::LinearityType
LinearityType
Couenne::CouenneTNLP::getSaveOptHessian
bool & getSaveOptHessian()
set and get saveOptHessian_
Definition: CouenneTNLP.hpp:186
Couenne::CouenneTNLP::clone
CouenneTNLP * clone()
Clone.
Couenne::CouenneTNLP::CouenneTNLP
CouenneTNLP(const CouenneTNLP &)
Copy constructor.
Ipopt::TNLP
Couenne::CouenneTNLP::get_list_of_nonlinear_variables
virtual bool get_list_of_nonlinear_variables(Ipopt::Index num_nonlin_vars, Ipopt::Index *pos_nonlin_vars)
get real list
Couenne::CouenneTNLP::CouenneTNLP
CouenneTNLP(CouenneProblem *)
Constructor.
Ipopt::TNLP::IndexStyleEnum
IndexStyleEnum
Couenne::CouenneTNLP::eval_jac_g
virtual bool eval_jac_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Index nele_jac, Ipopt::Index *iRow, Ipopt::Index *jCol, Ipopt::Number *values)
return the jacobian of the constraints.
Couenne::CouenneTNLP::getSolution
CouNumber * getSolution()
returns best solution (if it exists)
Definition: CouenneTNLP.hpp:53
Couenne::CouenneTNLP::setInitSol
void setInitSol(const double *sol)
set initial solution
Couenne::CouenneTNLP::eval_f
virtual bool eval_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number &obj_value)
return the value of the objective function
Ipopt::SolverReturn
SolverReturn
Couenne::CouenneProblem
Class for MINLP problems with symbolic information.
Definition: CouenneProblem.hpp:169
Couenne::expression
Expression base class.
Definition: CouenneExpression.hpp:48
Couenne::CouenneTNLP::get_number_of_nonlinear_variables
virtual Ipopt::Index get_number_of_nonlinear_variables()
Couenne::CouenneSparseMatrix
Class for sparse Matrixs (used in modifying distances in FP)
Definition: CouenneSparseMatrix.hpp:17
Couenne::CouenneTNLP::~CouenneTNLP
virtual ~CouenneTNLP()
Destructor.
IpTNLP.hpp
CouenneExprHess.hpp