Dip-All  0.91.0
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 
148  // largest gap
149  double largestGap_;
151  double * bound_;
153  mutable int range_;
154 };
155 
167 
168 public:
169 
172 
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 
232  (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
233 
234 protected:
236  double down_[2];
238  double up_[2];
239 };
240 
241 #endif
242 
CbcLotsizeBranchingObject & operator=(const CbcLotsizeBranchingObject &rhs)
Assignment operator.
Abstract branching object base class Now just difference with OsiBranchingObject. ...
virtual void print()
Print something about branch - only if log level high.
CbcRangeCompare
double * bound() const
Ranges.
bool findRange(double value) const
Finds range of interest so value is feasible in range range_ or infeasible between hi[range_] and lo[...
virtual void floorCeiling(double &floorLotsize, double &ceilingLotsize, double value, double tolerance) const
Returns floor and ceiling.
virtual void print() const
Print something about branch - only if log level high.
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...
int modelSequence() const
Model column number.
int range_
Current range.
virtual void feasibleRegion()
Set bounds to contain the current solution.
virtual ~CbcLotsizeBranchingObject()
Destructor.
virtual double branch()
Sets the bounds for the variable according to the current arm of the branch and advances the object s...
double infeasibility() const
Return infeasibility.
double up_[2]
Lower [0] and upper [1] bounds for the up arm (way_ = 1)
void printLotsize(double value, bool condition, int type) const
Just for debug (CBC_PRINT defined in CbcBranchLotsize.cpp)
int numberRanges_
Number of points.
void setModelSequence(int value)
Set model column number.
virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap=false)
Compare the this with brObj.
int columnNumber_
data
double value() const
Current value.
double originalLowerBound() const
Original variable bounds.
int variable() const
Index identifying the associated CbcObject within its class.
virtual void feasibleRegion()=0
For the variable(s) referenced by the object, look at the current solution and set bounds to match th...
int rangeType_
Type - 1 points, 2 ranges.
Lotsize branching object.
int preferredWay() const
If -1 down always chosen first, +1 up always, 0 normal.
Definition: CbcObject.hpp:245
double * bound_
Ranges.
Abstract Base Class for describing an interface to a solver.
double originalUpperBound() const
CbcLotsizeBranchingObject()
Default constructor.
int way() const
Get the state of the branching object.
virtual CbcBranchingObject * notPreferredNewFeasible() const
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new f...
virtual bool canDoHeuristics() const
Return true if object can take part in normal heuristics.
double down_[2]
Lower [0] and upper [1] bounds for the down arm (way_ = -1)
Lotsize class.
CbcModel * model() const
Return model.
Definition: CbcObject.hpp:240
CbcLotsize & operator=(const CbcLotsize &rhs)
virtual void resetBounds(const OsiSolverInterface *solver)
Reset original upper and lower bound values from the solver.
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.
CbcBranchObjType
virtual CbcBranchObjType type() const
Return the type (an integer identifier) of this.
virtual CbcObject * clone() const
Clone.
int numberRanges() const
Number of points.
CbcModel * model() const
Return model.
Simple Branch and bound class.
Definition: CbcModel.hpp:101
virtual CbcBranchingObject * clone() const
Clone.
virtual double branch()=0
Execute the actions required to branch, as specified by the current state of the branching object...