Cbc  2.9.8
CbcBranchLotsize.hpp
Go to the documentation of this file.
1 /* $Id: CbcBranchLotsize.hpp 1573 2011-01-05 01:12:36Z lou $ */
2 // Copyright (C) 2004, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 
6 #ifndef CbcBranchLotsize_H
7 #define CbcBranchLotsize_H
8 
9 #include "CbcBranchBase.hpp"
13 class CbcLotsize : public CbcObject {
14 
15 public:
16 
17  // Default Constructor
18  CbcLotsize ();
19 
20  /* Useful constructor - passed model index.
21  Also passed valid values - if range then pairs
22  */
23  CbcLotsize (CbcModel * model, int iColumn,
24  int numberPoints, const double * points, bool range = false);
25 
26  // Copy constructor
27  CbcLotsize ( const CbcLotsize &);
28 
30  virtual CbcObject * clone() const;
31 
32  // Assignment operator
33  CbcLotsize & operator=( const CbcLotsize& rhs);
34 
35  // Destructor
36  ~CbcLotsize ();
37 
39  virtual double infeasibility(const OsiBranchingInformation * info,
40  int &preferredWay) const;
41 
50  virtual void feasibleRegion();
51 
53  virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
54 
68  virtual CbcBranchingObject * preferredNewFeasible() const;
69 
78 
84  virtual void resetBounds(const OsiSolverInterface * solver);
85 
89  bool findRange(double value) const;
90 
93  virtual void floorCeiling(double & floorLotsize, double & ceilingLotsize, double value,
94  double tolerance) const;
95 
97  inline int modelSequence() const {
98  return columnNumber_;
99  }
101  inline void setModelSequence(int value) {
102  columnNumber_ = value;
103  }
104 
109  virtual int columnNumber() const;
111  inline double originalLowerBound() const {
112  return bound_[0];
113  }
114  inline double originalUpperBound() const {
115  return bound_[rangeType_*numberRanges_-1];
116  }
118  inline int rangeType() const {
119  return rangeType_;
120  }
122  inline int numberRanges() const {
123  return numberRanges_;
124  }
126  inline double * bound() const {
127  return bound_;
128  }
131  virtual bool canDoHeuristics() const {
132  return false;
133  }
134 
135 private:
137  void printLotsize(double value, bool condition, int type) const;
138 
139 private:
141 
143  int columnNumber_;
145  int rangeType_;
147  int numberRanges_;
148  // largest gap
149  double largestGap_;
151  double * bound_;
153  mutable int range_;
154 };
155 
167 
168 public:
169 
172 
180  CbcLotsizeBranchingObject (CbcModel *model, int variable,
181  int way , double value, const CbcLotsize * lotsize) ;
182 
189  CbcLotsizeBranchingObject (CbcModel *model, int variable, int way,
190  double lowerValue, double upperValue) ;
191 
194 
197 
199  virtual CbcBranchingObject * clone() const;
200 
202  virtual ~CbcLotsizeBranchingObject ();
203 
208  virtual double branch();
209 
213  virtual void print();
214 
216  virtual CbcBranchObjType type() const {
217  return LotsizeBranchObj;
218  }
219 
220  // LL: compareOriginalObject can be inherited from the CbcBranchingObject
221  // since variable_ uniquely defines the lot sizing object.
222 
231  virtual CbcRangeCompare compareBranchingObject
232  (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
233 
234 protected:
236  double down_[2];
238  double up_[2];
239 };
240 
241 #endif
242 
bool findRange(double value) const
Finds range of interest so value is feasible in range range_ or infeasible between hi[range_] and lo[...
double * bound() const
Ranges.
virtual void feasibleRegion()
Set bounds to contain the current solution.
double originalUpperBound() const
virtual void feasibleRegion()=0
For the variable(s) referenced by the object, look at the current solution and set bounds to match th...
CbcRangeCompare
void setModelSequence(int value)
Set model column number.
Lotsize class.
int numberRanges() const
Number of points.
int rangeType() const
Type - 1 points, 2 ranges.
virtual CbcBranchingObject * preferredNewFeasible() const
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new f...
Abstract branching object base class Now just difference with OsiBranchingObject. ...
virtual void floorCeiling(double &floorLotsize, double &ceilingLotsize, double value, double tolerance) const
Returns floor and ceiling.
virtual double infeasibility(const OsiBranchingInformation *info, int &preferredWay) const
Infeasibility - large is 0.5.
virtual CbcObject * clone() const
Clone.
CbcBranchObjType
virtual void resetBounds(const OsiSolverInterface *solver)
Reset original upper and lower bound values from the solver.
CbcModel * model() const
Return model.
Definition: CbcObject.hpp:240
virtual double branch()=0
Execute the actions required to branch, as specified by the current state of the branching object...
virtual void print() const
Print something about branch - only if log level high.
int modelSequence() const
Model column number.
Lotsize branching object.
virtual int columnNumber() const
Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics.
virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way)
Creates a branching object.
virtual CbcBranchObjType type() const
Return the type (an integer identifier) of this.
CbcLotsize & operator=(const CbcLotsize &rhs)
virtual bool canDoHeuristics() const
Return true if object can take part in normal heuristics.
virtual CbcBranchingObject * notPreferredNewFeasible() const
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new f...
Simple Branch and bound class.
Definition: CbcModel.hpp:101
double originalLowerBound() const
Original variable bounds.
int preferredWay() const
If -1 down always chosen first, +1 up always, 0 normal.
Definition: CbcObject.hpp:245