Cbc  2.10.3
CbcBranchLotsize.hpp
Go to the documentation of this file.
1 /* $Id: CbcBranchLotsize.hpp 2465 2019-01-03 19:26:52Z unxusr $ */
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"
12 class CbcLotsize : public CbcObject {
13 
14 public:
15  // Default Constructor
16  CbcLotsize();
17 
18  /* Useful constructor - passed model index.
19  Also passed valid values - if range then pairs
20  */
21  CbcLotsize(CbcModel *model, int iColumn,
22  int numberPoints, const double *points, bool range = false);
23 
24  // Copy constructor
25  CbcLotsize(const CbcLotsize &);
26 
28  virtual CbcObject *clone() const;
29 
30  // Assignment operator
31  CbcLotsize &operator=(const CbcLotsize &rhs);
32 
33  // Destructor
34  ~CbcLotsize();
35 
37  virtual double infeasibility(const OsiBranchingInformation *info,
38  int &preferredWay) const;
39 
48  virtual void feasibleRegion();
49 
51  virtual CbcBranchingObject *createCbcBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way);
52 
67 
76 
82  virtual void resetBounds(const OsiSolverInterface *solver);
83 
87  bool findRange(double value) const;
88 
91  virtual void floorCeiling(double &floorLotsize, double &ceilingLotsize, double value,
92  double tolerance) const;
93 
95  inline int modelSequence() const
96  {
97  return columnNumber_;
98  }
100  inline void setModelSequence(int value)
101  {
102  columnNumber_ = value;
103  }
104 
109  virtual int columnNumber() const;
111  inline double originalLowerBound() const
112  {
113  return bound_[0];
114  }
115  inline double originalUpperBound() const
116  {
117  return bound_[rangeType_ * numberRanges_ - 1];
118  }
120  inline int rangeType() const
121  {
122  return rangeType_;
123  }
125  inline int numberRanges() const
126  {
127  return numberRanges_;
128  }
130  inline double *bound() const
131  {
132  return bound_;
133  }
136  virtual bool canDoHeuristics() const
137  {
138  return false;
139  }
140 
141 private:
143  void printLotsize(double value, bool condition, int type) const;
144 
145 private:
147 
149  int columnNumber_;
151  int rangeType_;
153  int numberRanges_;
154  // largest gap
155  double largestGap_;
157  double *bound_;
159  mutable int range_;
160 };
161 
173 
174 public:
177 
186  int way, double value, const CbcLotsize *lotsize);
187 
195  double lowerValue, double upperValue);
196 
199 
202 
204  virtual CbcBranchingObject *clone() const;
205 
207  virtual ~CbcLotsizeBranchingObject();
208 
213  virtual double branch();
214 
218  virtual void print();
219 
221  virtual CbcBranchObjType type() const
222  {
223  return LotsizeBranchObj;
224  }
225 
226  // LL: compareOriginalObject can be inherited from the CbcBranchingObject
227  // since variable_ uniquely defines the lot sizing object.
228 
237  virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap = false);
238 
239 protected:
241  double down_[2];
243  double up_[2];
244 };
245 
246 #endif
247 
248 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
249 */
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 up_[2]
Lower [0] and upper [1] bounds for the up arm (way_ = 1)
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...
virtual void print()
Print something about branch - only if log level high.
CbcRangeCompare
void setModelSequence(int value)
Set model column number.
double down_[2]
Lower [0] and upper [1] bounds for the down arm (way_ = -1)
Lotsize class.
virtual ~CbcLotsizeBranchingObject()
Destructor.
virtual CbcBranchingObject * clone() const
Clone.
CbcModel * model() const
Return model.
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...
int way() const
Get the state of the branching object.
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.
CbcLotsizeBranchingObject()
Default constructor.
int variable() const
Index identifying the associated CbcObject within its class.
virtual CbcObject * clone() const
Clone.
CbcBranchObjType
virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap=false)
Compare the this with brObj.
virtual void resetBounds(const OsiSolverInterface *solver)
Reset original upper and lower bound values from the solver.
virtual double branch()
Sets the bounds for the variable according to the current arm of the branch and advances the object s...
CbcModel * model() const
Return model.
Definition: CbcObject.hpp:252
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.
double value() const
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.
CbcLotsizeBranchingObject & operator=(const CbcLotsizeBranchingObject &rhs)
Assignment operator.
virtual CbcBranchingObject * notPreferredNewFeasible() const
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new f...
double infeasibility() const
Simple Branch and bound class.
Definition: CbcModel.hpp:100
double originalLowerBound() const
Original variable bounds.
int preferredWay() const
If -1 down always chosen first, +1 up always, 0 normal.
Definition: CbcObject.hpp:258