OS  2.10.1
OSBonminSolver.h
Go to the documentation of this file.
1 /* $Id: OSBonminSolver.h 4513 2012-07-08 20:15:42Z Gassmann $ */
15 #ifndef BONMINSOLVER_H
16 #define BONMINSOLVER_H
17 
18 #include "OSConfig.h"
19 #include "OSDefaultSolver.h"
20 #include "OSrLWriter.h"
21 #include "OSInstance.h"
22 #include "OSParameters.h"
23 #include "OSnLNode.h"
24 #include "OSiLReader.h"
25 #include "OSrLReader.h"
26 #include "OSoLReader.h"
27 #include "OSInstance.h"
28 #include "OSExpressionTree.h"
29 #include "OSnLNode.h"
30 #include "OSDataStructures.h"
31 #include "OSFileUtil.h"
32 #include "OSErrorClass.h"
33 
34 #include "OSResult.h"
35 #include "OSInstance.h"
36 #include "OSOption.h"
37 
38 #include <cstddef>
39 #include <cstdlib>
40 #include <cctype>
41 #include <cassert>
42 #include <stack>
43 #include <string>
44 #include <iostream>
45 #include <vector>
46 #include <map>
47 
48 #include "BonCbc.hpp"
49 #include "BonTMINLP.hpp"
50 #include "BonBonminSetup.hpp"
51 
52 // for Stefan
53 class BonminProblem : public Bonmin::TMINLP
54 {
55 
56 
57 
58 public:
59 
61  BonminProblem(OSInstance *osinstance_ , OSOption *osoption_);
62 
64  virtual ~BonminProblem();
65 
67 
69 
70  Bonmin::TMINLP::SolverReturn status;
71 
72 
82  virtual bool get_variables_types(Ipopt::Index n, VariableType* var_types);
83 
85  virtual bool get_variables_linearity(Ipopt::Index n, Ipopt::TNLP::LinearityType* var_types);
86 
91  virtual bool get_constraints_linearity(Ipopt::Index m, Ipopt::TNLP::LinearityType* const_types);
93 
106  virtual bool get_nlp_info(Ipopt::Index& n, Ipopt::Index&m, Ipopt::Index& nnz_jac_g,
107  Ipopt::Index& nnz_h_lag, Ipopt::TNLP::IndexStyleEnum& index_style);
108 
109 
110 
112  //virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g,
113  // Index& nnz_h_lag, IndexStyleEnum& index_style);
114 
116  virtual bool get_bounds_info(Ipopt::Index n, Ipopt::Number* x_l, Ipopt::Number* x_u,
117  Ipopt::Index m, Ipopt::Number* g_l, Ipopt::Number* g_u);
118 
120  virtual bool get_starting_point(Ipopt::Index n, bool init_x, Ipopt::Number* x,
121  bool init_z, Ipopt::Number* z_L, Ipopt::Number* z_U,
122  Ipopt::Index m, bool init_lambda,
123  Ipopt::Number* lambda);
124 
126  virtual bool eval_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Number& obj_value);
127 
129  virtual bool eval_grad_f(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Number* grad_f);
130 
132  virtual bool eval_g(Ipopt::Index n, const Ipopt::Number* x, bool new_x, Ipopt::Index m, Ipopt::Number* g);
133 
138  virtual bool eval_jac_g(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
139  Ipopt::Index m, Ipopt::Index nele_jac, Ipopt::Index* iRow, Ipopt::Index *jCol,
140  Ipopt::Number* values);
141 
146  virtual bool eval_h(Ipopt::Index n, const Ipopt::Number* x, bool new_x,
147  Ipopt::Number obj_factor, Ipopt::Index m, const Ipopt::Number* lambda,
148  bool new_lambda, Ipopt::Index nele_hess, Ipopt::Index* iRow,
149  Ipopt::Index* jCol, Ipopt::Number* values);
150 
152 
153 
154  virtual bool get_scaling_parameters(Ipopt::Number& obj_scaling,
155  bool& use_x_scaling, Ipopt::Index n,
156  Ipopt::Number* x_scaling,
157  bool& use_g_scaling, Ipopt::Index m,
158  Ipopt::Number* g_scaling);
159 
162  virtual void finalize_solution(Bonmin::TMINLP::SolverReturn status_,
163  Ipopt::Index n, const Ipopt::Number* x, Ipopt::Number obj_value);
165 
166  virtual const SosInfo * sosConstraints() const
167  {
168  return NULL;
169  }
170  virtual const BranchingInfo* branchingInfo() const
171  {
172  return NULL;
173  }
174 
176  {
177  printSol_ = true;
178  }
179 
180 
181 
182 
183 
184 private:
185  bool printSol_;
186 
187 private:
199  // HS071_NLP();
200 
202 
203 
204 
205  std::string bonminErrorMsg;
206 
207 
208 };
209 
210 
226 {
227 public:
228 
229 
230 
232  BonminSolver();
233 
235  ~BonminSolver();
236 
237 
238 
239  Ipopt::SmartPtr<BonminProblem> tminlp;
240 
241  // this is a Bonmin BonCbc object;
242  Bonmin::Bab bb;
243 
244  Bonmin::TMINLP::SolverReturn status;
245 
246  //SmartPtr<IpoptApplication> app;
247 
248 
251  virtual void solve() throw (ErrorClass) ;
252 
257  virtual void buildSolverInstance() throw(ErrorClass);
258 
263  virtual void setSolverOptions() throw(ErrorClass);
264 
270  void dataEchoCheck();
271 
276  OSiLReader *m_osilreader;
277 
282  OSoLReader *m_osolreader;
283 
284 
285 
290  void writeResult();
291 
292 
293 private:
294  OSrLWriter *osrlwriter;
295 
296  Bonmin::BonminSetup bonminSetup;
297 
298  std::string bonminErrorMsg;
299 };
300 
301 
302 #endif /*BONMINSOLVER_H*/
Ipopt::SmartPtr< BonminProblem > tminlp
BonminProblem(OSInstance *osinstance_, OSOption *osoption_)
the BonminProblemclass constructor
used for throwing exceptions.
Definition: OSErrorClass.h:31
virtual bool get_nlp_info(Ipopt::Index &n, Ipopt::Index &m, Ipopt::Index &nnz_jac_g, Ipopt::Index &nnz_h_lag, Ipopt::TNLP::IndexStyleEnum &index_style)
Method to pass the main dimensions of the problem to Ipopt.
virtual const BranchingInfo * branchingInfo() const
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)
Method to return: 1) The structure of the jacobian (if "values" is NULL) 2) The values of the jacobia...
The Option Class.
Definition: OSOption.h:3564
Take an OSResult object and write a string that validates against OSrL.
Definition: OSrLWriter.h:30
virtual bool eval_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number &obj_value)
Method to return the objective value.
virtual void finalize_solution(Bonmin::TMINLP::SolverReturn status_, Ipopt::Index n, const Ipopt::Number *x, Ipopt::Number obj_value)
Method called by Ipopt at the end of optimization.
STL namespace.
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)
Bonmin specific methods for defining the nlp problem.
virtual ~BonminProblem()
the BonminProblem class destructor
OSInstance * osinstance
virtual bool get_scaling_parameters(Ipopt::Number &obj_scaling, bool &use_x_scaling, Ipopt::Index n, Ipopt::Number *x_scaling, bool &use_g_scaling, Ipopt::Index m, Ipopt::Number *g_scaling)
virtual const SosInfo * sosConstraints() const
The in-memory representation of an OSiL instance.
Definition: OSInstance.h:2262
Used to read an OSiL string.
Definition: OSiLReader.h:37
virtual bool get_constraints_linearity(Ipopt::Index m, Ipopt::TNLP::LinearityType *const_types)
Pass the type of the constraints (LINEAR, NON_LINEAR) to the optimizer.
Used to read an OSoL string.
Definition: OSoLReader.h:37
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)
Method to return: 1) The structure of the hessian of the lagrangian (if "values" is NULL) 2) The valu...
This file defines the OSInstance class along with its supporting classes.
virtual bool eval_grad_f(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Number *grad_f)
Method to return the gradient of the objective.
This file defines the OSnLNode class along with its derived classes.
Bonmin::Bab bb
virtual bool eval_g(Ipopt::Index n, const Ipopt::Number *x, bool new_x, Ipopt::Index m, Ipopt::Number *g)
Method to return the constraint residuals.
void printSolutionAtEndOfAlgorithm()
OSOption * osoption
The Default Solver Class.
Bonmin::TMINLP::SolverReturn status
virtual bool get_variables_linearity(Ipopt::Index n, Ipopt::TNLP::LinearityType *var_types)
Pass info about linear and nonlinear variables.
Bonmin::TMINLP::SolverReturn status
virtual bool get_variables_types(Ipopt::Index n, VariableType *var_types)
Pass the type of the variables (INTEGER, BINARY, CONTINUOUS) to the optimizer.
The BonminSolver class solves problems using Ipopt.
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)
Method to return the starting point for the algorithm.