OS  2.9.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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 
277 
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.
void writeResult()
use this to write the solution information to an OSResult object
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 &quot;values&quot; is NULL) 2) The values of the jacobia...
BonminSolver()
the BonminSolver class constructor
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.
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
OSoLReader * m_osolreader
m_osolreader is an OSoLReader object used to create an osoption from an osol string if needed ...
OSiLReader * m_osilreader
m_osilreader is an OSiLReader object used to create an osinstance from an osil string if needed ...
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 void buildSolverInstance()
buildSolverInstance is a virtual function – the actual solvers will implement their own buildSolverIn...
The in-memory representation of an OSiL instance.
Definition: OSInstance.h:2241
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.
virtual const SosInfo * sosConstraints() const
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 &quot;values&quot; 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
virtual void setSolverOptions()
The implementation of the virtual functions.
~BonminSolver()
the IpoptSolver class destructor
virtual const BranchingInfo * branchingInfo() const
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.
virtual void solve()
solve results in an instance being read into the Bonmin data structrues and optimized ...
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.
void dataEchoCheck()
use this for debugging, print out the instance that the solver thinks it has and compare this with th...
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.