Cbc 2.10.5
Loading...
Searching...
No Matches
CbcBranchLotsize.hpp
Go to the documentation of this file.
1/* $Id$ */
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"
12class CbcLotsize : public CbcObject {
13
14public:
15 // Default Constructor
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
26
28 virtual CbcObject *clone() const;
29
30 // Assignment operator
32
33 // Destructor
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
141private:
143 void printLotsize(double value, bool condition, int type) const;
144
145private:
147
154 // largest gap
157 double *bound_;
159 mutable int range_;
160};
161
173
174public:
177
186 int way, double value, const CbcLotsize *lotsize);
187
195 double lowerValue, double upperValue);
196
199
202
204 virtual CbcBranchingObject *clone() const;
205
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
239protected:
241 double down_[2];
243 double up_[2];
244};
245
246#endif
247
248/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
249*/
CbcRangeCompare
CbcBranchObjType
@ LotsizeBranchObj
Abstract branching object base class Now just difference with OsiBranchingObject.
virtual double branch()=0
Execute the actions required to branch, as specified by the current state of the branching object,...
CbcModel * model() const
Return model.
int variable() const
Index identifying the associated CbcObject within its class.
int way() const
Get the state of the branching object.
virtual void print() const
Print something about branch - only if log level high.
Lotsize branching object.
virtual void print()
Print something about branch - only if log level high.
CbcLotsizeBranchingObject & operator=(const CbcLotsizeBranchingObject &rhs)
Assignment operator.
CbcLotsizeBranchingObject()
Default constructor.
double up_[2]
Lower [0] and upper [1] bounds for the up arm (way_ = 1)
CbcLotsizeBranchingObject(const CbcLotsizeBranchingObject &)
Copy constructor.
CbcLotsizeBranchingObject(CbcModel *model, int variable, int way, double lowerValue, double upperValue)
Create a degenerate branch object.
double down_[2]
Lower [0] and upper [1] bounds for the down arm (way_ = -1)
CbcLotsizeBranchingObject(CbcModel *model, int variable, int way, double value, const CbcLotsize *lotsize)
Create a lotsize floor/ceiling branch object.
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...
virtual CbcBranchObjType type() const
Return the type (an integer identifier) of this.
virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap=false)
Compare the this with brObj.
virtual CbcBranchingObject * clone() const
Clone.
Lotsize class.
CbcLotsize(CbcModel *model, int iColumn, int numberPoints, const double *points, bool range=false)
virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way)
Creates a branching object.
void printLotsize(double value, bool condition, int type) const
Just for debug (CBC_PRINT defined in CbcBranchLotsize.cpp)
double * bound() const
Ranges.
virtual CbcObject * clone() const
Clone.
double originalLowerBound() const
Original variable bounds.
virtual double infeasibility(const OsiBranchingInformation *info, int &preferredWay) const
Infeasibility - large is 0.5.
double * bound_
Ranges.
int rangeType_
Type - 1 points, 2 ranges.
CbcLotsize(const CbcLotsize &)
int numberRanges() const
Number of points.
int columnNumber_
data
double originalUpperBound() const
virtual int columnNumber() const
Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics.
virtual CbcBranchingObject * notPreferredNewFeasible() const
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new f...
int rangeType() const
Type - 1 points, 2 ranges.
virtual void floorCeiling(double &floorLotsize, double &ceilingLotsize, double value, double tolerance) const
Returns floor and ceiling.
virtual CbcBranchingObject * preferredNewFeasible() const
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new f...
void setModelSequence(int value)
Set model column number.
bool findRange(double value) const
Finds range of interest so value is feasible in range range_ or infeasible between hi[range_] and lo[...
int numberRanges_
Number of points.
virtual bool canDoHeuristics() const
Return true if object can take part in normal heuristics.
virtual void resetBounds(const OsiSolverInterface *solver)
Reset original upper and lower bound values from the solver.
int modelSequence() const
Model column number.
int range_
Current range.
CbcLotsize & operator=(const CbcLotsize &rhs)
virtual void feasibleRegion()
Set bounds to contain the current solution.
Simple Branch and bound class.
Definition: CbcModel.hpp:100
virtual void feasibleRegion()=0
For the variable(s) referenced by the object, look at the current solution and set bounds to match th...
CbcModel * model() const
Return model.
Definition: CbcObject.hpp:252
int preferredWay() const
If -1 down always chosen first, +1 up always, 0 normal.
Definition: CbcObject.hpp:258