Bonmin  1.8.8
BonOaDecBase.hpp
Go to the documentation of this file.
1 // (C) Copyright International Business Machines (IBM) 2006
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // Authors :
6 // P. Bonami, International Business Machines
7 //
8 // Date : 12/07/2006
9 #ifndef BonOaDecBase_HPP
10 #define BonOaDecBase_HPP
11 #include "BonSubMipSolver.hpp"
12 #include "CglCutGenerator.hpp"
13 #include "BonBabSetupBase.hpp"
14 #include "BonOAMessages.hpp"
15 #include "CbcModel.hpp"
16 
17 #include "CbcStrategy.hpp"
18 
19 #include "CoinTime.hpp"
20 #include "OsiAuxInfo.hpp"
21 #include "OsiBranchingObject.hpp"
22 #include <iostream>
23 #include "BonBabInfos.hpp"
24 namespace Bonmin
25 {
28  {
29  public:
30 
31 
35  {
36  public:
38  solverManip(OsiSolverInterface *si , bool saveNumRows=true,
39  bool saveBasis=true, bool saveBounds=false,
40  bool saveCutoff = false, bool resolve=true);
41 
45  ~solverManip();
47  void restore();
48 
51  {
52  return si_;
53  }
54 
56  void setObjects(OsiObject ** objects, int nObjects)
57  {
58  objects_ = objects;
59  nObjects_ = nObjects;
60  }
61 
62  private:
64  OsiSolverInterface * si_;
66  int initialNumberRows_;
67 
69  double * colLower_;
70 
72  double * colUpper_;
73 
75  CoinWarmStart * warm_;
76 
78  double cutoff_;
79 
81  bool deleteSolver_;
82 
84  OsiObject * * objects_;
86  int nObjects_;
90  int numcols_;
92  int numrows_;
94  const double * siColLower_;
96  const double * siColUpper_;
97 
98  void getCached();
100  };
101 
103  OaDecompositionBase(BabSetupBase &b, bool leaveSiUnchanged,
104  bool reassignLpsolver);
105 
108 
109 
111  virtual ~OaDecompositionBase();
112 
114  virtual void generateCuts(const OsiSolverInterface &si, OsiCuts & cs,
115  const CglTreeInfo info = CglTreeInfo());
116 
119  {
120  nlp_ = nlp;
121  }
122 
125  {
126  lp_ = si;
127  }
128 
130  {
131  return reassignLpsolver_;
132  }
134  void setObjects(OsiObject ** objects, int nObjects)
135  {
136  objects_ = objects;
137  nObjects_ = nObjects;
138  }
140  inline void setLeaveSiUnchanged(bool yesno)
141  {
142  leaveSiUnchanged_ = yesno;
143  }
144 
146  struct Parameters
147  {
149  bool global_;
157  double gap_tol_;
165  int maxSols_;
168 
169 
171  Parameters();
172 
174  Parameters(const Parameters & other);
175 
178  {
179  if (strategy_) delete strategy_;
180  }
181 
183  void setStrategy(const CbcStrategy & strategy)
184  {
185  if (strategy_) delete strategy_;
186  strategy_ = strategy.clone();
187  }
188 
189  const CbcStrategy * strategy() const
190  {
191  return strategy_;
192  }
193 
194 private:
196  CbcStrategy * strategy_;
197 
198  };
199 
201  {
202  return parameters_;
203  }
204 
205  const Parameters& parameter()const
206  {
207  return parameters_;
208  }
209 
210  void setLogLevel(int level)
211  {
212  handler_->setLogLevel(level);
213  }
214 
215  void setReassignLpSolver(bool v){
216  reassignLpsolver_ = v;
217  }
219  protected:
220  void setupMipSolver(BabSetupBase &b, const std::string &prefix);
222 
226  bool post_nlp_solve(BabInfo * babInfo, double cutoff) const;
229  virtual double performOa(OsiCuts &cs, solverManip &lpManip,
231  BabInfo * babInfo, double &, const CglTreeInfo & info) const = 0;
233  virtual bool doLocalSearch(BabInfo * babInfo) const = 0;
234 
236 
237  mutable OsiTMINLPInterface * nlp_;
242  mutable int nSolve_;
250  mutable int nLocalSearch_;
260  double timeBegin_;
262  mutable int numSols_;
263 
266 
272  mutable int currentNodeNumber_;
275 #ifdef OA_DEBUG
276  class OaDebug
277  {
278  public:
279  bool checkInteger(const OsiSolverInterface&nlp, std::ostream & os) const;
280 
281  void printEndOfProcedureDebugMessage(const OsiCuts &cs,
282  bool foundSolution,
283  double solValue,
284  double milpBound,
285  bool isInteger,
286  bool feasible,
287  std::ostream & os) const;
288  };
289 
291  OaDebug debug_;
292 
293 #endif
294  };
295 }
296 #endif
297 
BonBabSetupBase.hpp
Bonmin::OaDecompositionBase::lp_
OsiSolverInterface * lp_
A linear solver.
Definition: BonOaDecBase.hpp:244
Bonmin::OaDecompositionBase::objects_
OsiObject ** objects_
Some objects the feasiblitiy of which to verify.
Definition: BonOaDecBase.hpp:246
OsiObject
BonOAMessages.hpp
Bonmin::OaDecompositionBase::currentNodeNumber_
int currentNodeNumber_
Store the current node number.
Definition: BonOaDecBase.hpp:272
Bonmin::OaDecompositionBase::Parameters::strategy
const CbcStrategy * strategy() const
Definition: BonOaDecBase.hpp:189
CglTreeInfo
Bonmin::OaDecompositionBase::parameters_
Parameters parameters_
Parameters.
Definition: BonOaDecBase.hpp:265
OsiBranchingObject.hpp
Bonmin::OaDecompositionBase::numSols_
int numSols_
number of solutions found by OA_decomposition.
Definition: BonOaDecBase.hpp:262
Bonmin::OaDecompositionBase::Parameters
Parameters for algorithm.
Definition: BonOaDecBase.hpp:146
Bonmin::OaDecompositionBase::Parameters::gap_tol_
double gap_tol_
setting for gap tolerance.
Definition: BonOaDecBase.hpp:157
CoinTime.hpp
CoinMessageHandler::setLogLevel
void setLogLevel(int value)
Bonmin
(C) Copyright International Business Machines Corporation 2007
Definition: BonAmplSetup.hpp:15
Bonmin::OaDecompositionBase::savedCuts_
OsiCuts savedCuts_
Saved cuts: in some cases when using OA to check feasible solution algorithm may loop because Cbc rem...
Definition: BonOaDecBase.hpp:270
Bonmin::OaDecompositionBase::generateCuts
virtual void generateCuts(const OsiSolverInterface &si, OsiCuts &cs, const CglTreeInfo info=CglTreeInfo())
Standard cut generation methods.
Bonmin::OaDecompositionBase::OaDecompositionBase
OaDecompositionBase(BabSetupBase &b, bool leaveSiUnchanged, bool reassignLpsolver)
New usefull constructor.
CoinMessages
Bonmin::OaDecompositionBase::Parameters::logFrequency_
double logFrequency_
Frequency of log.
Definition: BonOaDecBase.hpp:167
OsiAuxInfo.hpp
Bonmin::OaDecompositionBase::Parameters::cbcCutoffIncrement_
double cbcCutoffIncrement_
cutoff min increase (has to be intialized trhough Cbc)
Definition: BonOaDecBase.hpp:153
Bonmin::BabSetupBase
A class to have all elements necessary to setup a branch-and-bound.
Definition: BonBabSetupBase.hpp:25
Bonmin::OaDecompositionBase::reassignLpsolver_
bool reassignLpsolver_
Do we need to reassign the lp solver with Cbc.
Definition: BonOaDecBase.hpp:258
Bonmin::OaDecompositionBase::assignLpInterface
void assignLpInterface(OsiSolverInterface *si)
Assign an OsiTMINLPInterface.
Definition: BonOaDecBase.hpp:124
Bonmin::OaDecompositionBase::Parameters::global_
bool global_
Add cuts as global.
Definition: BonOaDecBase.hpp:149
Bonmin::OaDecompositionBase::Parameters::addOnlyViolated_
bool addOnlyViolated_
Add only violated OA inequalities.
Definition: BonOaDecBase.hpp:151
CglCutGenerator
BonSubMipSolver.hpp
Bonmin::BabInfo
Bonmin class for passing info between components of branch-and-cuts.
Definition: BonBabInfos.hpp:19
Bonmin::OaDecompositionBase::performOa
virtual double performOa(OsiCuts &cs, solverManip &lpManip, BabInfo *babInfo, double &, const CglTreeInfo &info) const =0
virtual method which performs the OA algorithm by modifying lp and nlp.
Bonmin::OaDecompositionBase::setLeaveSiUnchanged
void setLeaveSiUnchanged(bool yesno)
Set whether to leave the solverinterface unchanged.
Definition: BonOaDecBase.hpp:140
Bonmin::OaDecompositionBase::nLocalSearch_
int nLocalSearch_
number of local searches performed
Definition: BonOaDecBase.hpp:250
Bonmin::OaDecompositionBase::post_nlp_solve
bool post_nlp_solve(BabInfo *babInfo, double cutoff) const
Solve the nlp and do output.
CoinMessageHandler
Bonmin::OaDecompositionBase::reassignLpsolver
bool reassignLpsolver()
Definition: BonOaDecBase.hpp:129
OsiCuts
Bonmin::OaDecompositionBase::passInMessageHandler
void passInMessageHandler(CoinMessageHandler *handler)
Bonmin::OaDecompositionBase::solverManip::setObjects
void setObjects(OsiObject **objects, int nObjects)
Set objects.
Definition: BonOaDecBase.hpp:56
Bonmin::OaDecompositionBase::assignNlpInterface
void assignNlpInterface(OsiTMINLPInterface *nlp)
Assign an OsiTMINLPInterface.
Definition: BonOaDecBase.hpp:118
Bonmin::OaDecompositionBase::nlp_
OsiTMINLPInterface * nlp_
Pointer to nlp interface.
Definition: BonOaDecBase.hpp:238
Bonmin::OaDecompositionBase::nSolve_
int nSolve_
Number of nlp solved done.
Definition: BonOaDecBase.hpp:242
Bonmin::OaDecompositionBase::Parameters::subMilpLogLevel_
int subMilpLogLevel_
sub milp log level.
Definition: BonOaDecBase.hpp:163
Bonmin::OaDecompositionBase::Parameters::setStrategy
void setStrategy(const CbcStrategy &strategy)
Strategy to apply when using Cbc as MILP sub-solver.
Definition: BonOaDecBase.hpp:183
OsiSolverInterface
Bonmin::OaDecompositionBase::handler_
CoinMessageHandler * handler_
messages handler.
Definition: BonOaDecBase.hpp:252
Bonmin::OaDecompositionBase::Parameters::maxLocalSearchTime_
double maxLocalSearchTime_
maximum time for local searches
Definition: BonOaDecBase.hpp:161
Bonmin::OaDecompositionBase
Base class for OA algorithms.
Definition: BonOaDecBase.hpp:27
Bonmin::OaDecompositionBase::doLocalSearch
virtual bool doLocalSearch(BabInfo *babInfo) const =0
virutal method to decide if local search is performed
Bonmin::OaDecompositionBase::Parameters::maxSols_
int maxSols_
maximum number of solutions
Definition: BonOaDecBase.hpp:165
Bonmin::OaDecompositionBase::Parameters::cbcIntegerTolerance_
double cbcIntegerTolerance_
integer tolerance (has to be the same as Cbc's)
Definition: BonOaDecBase.hpp:155
Bonmin::OaDecompositionBase::Parameters::~Parameters
~Parameters()
Destructor.
Definition: BonOaDecBase.hpp:177
Bonmin::OaDecompositionBase::solverManip::~solverManip
~solverManip()
Destructor.
Bonmin::OaDecompositionBase::messages_
CoinMessages messages_
Messages for OA.
Definition: BonOaDecBase.hpp:254
Bonmin::OsiTMINLPInterface
This is class provides an Osi interface for a Mixed Integer Linear Program expressed as a TMINLP (so ...
Definition: BonOsiTMINLPInterface.hpp:48
Bonmin::OaDecompositionBase::parameter
Parameters & parameter()
Definition: BonOaDecBase.hpp:200
Bonmin::OaDecompositionBase::solverManip
Small class to manipulatee various things in an OsiSolverInterface and restore them.
Definition: BonOaDecBase.hpp:34
Bonmin::OaDecompositionBase::solverManip::restore
void restore()
Restore solver.
Bonmin::OaDecompositionBase::s_
BabSetupBase * s_
Pointer to setup.
Definition: BonOaDecBase.hpp:240
Bonmin::OaDecompositionBase::parameter
const Parameters & parameter() const
Definition: BonOaDecBase.hpp:205
CoinWarmStart
Bonmin::OaDecompositionBase::setLogLevel
void setLogLevel(int level)
Definition: BonOaDecBase.hpp:210
CglCutGenerator.hpp
Bonmin::OaDecompositionBase::solverManip::si
OsiSolverInterface * si()
Get pointer to solver interface.
Definition: BonOaDecBase.hpp:50
Bonmin::OaDecompositionBase::Parameters::maxLocalSearch_
int maxLocalSearch_
Total max number of local searches.
Definition: BonOaDecBase.hpp:159
Bonmin::OaDecompositionBase::~OaDecompositionBase
virtual ~OaDecompositionBase()
Destructor.
Bonmin::OaDecompositionBase::setupMipSolver
void setupMipSolver(BabSetupBase &b, const std::string &prefix)
BonBabInfos.hpp
Bonmin::OaDecompositionBase::setObjects
void setObjects(OsiObject **objects, int nObjects)
Set objects.
Definition: BonOaDecBase.hpp:134
Bonmin::OaDecompositionBase::nObjects_
int nObjects_
Number of objects.*‍/.
Definition: BonOaDecBase.hpp:248
Bonmin::OaDecompositionBase::Parameters::Parameters
Parameters()
Constructor with default values.
Bonmin::OaDecompositionBase::setReassignLpSolver
void setReassignLpSolver(bool v)
Definition: BonOaDecBase.hpp:215
Bonmin::OaDecompositionBase::solverManip::solverManip
solverManip(OsiSolverInterface *si, bool saveNumRows=true, bool saveBasis=true, bool saveBounds=false, bool saveCutoff=false, bool resolve=true)
Constructor.
Bonmin::OaDecompositionBase::leaveSiUnchanged_
bool leaveSiUnchanged_
Wether or not we should remove cuts at the end of the procedure.
Definition: BonOaDecBase.hpp:256
Bonmin::OaDecompositionBase::timeBegin_
double timeBegin_
time of construction
Definition: BonOaDecBase.hpp:260