Cbc  2.10.10
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CbcHeuristicDW.hpp
Go to the documentation of this file.
1 // $Id: CbcHeuristicDW.hpp 1899 2013-04-09 18:12:08Z stefan $
2 // Copyright (C) 2006, 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 CbcHeuristicDW_H
7 #define CbcHeuristicDW_H
8 
9 #include "CbcHeuristic.hpp"
10 
16 class CbcHeuristicDW : public CbcHeuristic {
17 public:
18  // Default Constructor
20 
21  /* Constructor with model - assumed before cuts
22  */
23  CbcHeuristicDW(CbcModel &model, int keepContinuous = 0);
24 
25  /* Constructor with model - assumed before cuts
26  */
27  CbcHeuristicDW(CbcModel &model,
28  int callBack(CbcHeuristicDW *currentHeuristic,
29  CbcModel *thisModel,
30  int whereFrom),
31  int keepContinuous = 0);
32 
33  // Copy constructor
35 
36  // Destructor
38 
40  virtual CbcHeuristic *clone() const;
41 
44 
46  virtual void generateCpp(FILE *fp);
47 
49  virtual void resetModel(CbcModel *model);
50 
52  virtual void setModel(CbcModel *model);
58  virtual int solution(double &objectiveValue,
59  double *newSolution);
62  inline int numberBlocks() const
63  {
64  return numberBlocks_;
65  }
67  void passInSolution(const double *solution);
69  void passInContinuousSolution(const double *solution);
75  void setProposalActions(int fullDWEverySoOften);
77  double objectiveValueWhen(int whichDW) const;
79  int numberColumnsDW(int whichDW) const;
81  inline OsiSolverInterface *solver() const
82  {
83  return solver_;
84  }
86  OsiSolverInterface *DWModel(int whichDW) const;
88  inline double bestObjective() const
89  {
90  return bestObjective_;
91  }
93  inline const double *bestSolution() const
94  {
95  return bestSolution_;
96  }
98  inline const double *continuousSolution() const
99  {
100  return continuousSolution_;
101  }
103  inline const double *fixedDj() const
104  {
105  return fixedDj_;
106  }
108  inline const double *objectiveDW() const
109  {
110  return objectiveDW_;
111  }
113  inline int numberDWTimes() const
114  {
115  return numberDWTimes_;
116  }
118  inline const int *numberColumnsDW() const
119  {
120  return numberColumnsDW_;
121  }
123  inline void setNumberPasses(int value)
124  {
125  numberPasses_ = value;
126  }
128  inline void setNumberBadPasses(int value)
129  {
130  numberBadPasses_ = value;
131  }
133  inline void setNumberNeeded(int value)
134  {
135  nNeededBase_ = value;
136  }
138  inline int getNumberNeeded() const
139  {
140  return nNeededBase_;
141  }
143  inline void setCurrentNumberNeeded(int value)
144  {
145  nNeeded_ = value;
146  }
148  inline int getCurrentNumberNeeded() const
149  {
150  return nNeeded_;
151  }
153  inline void setNumberNodes(int value)
154  {
155  nNodesBase_ = value;
156  }
158  inline int getNumberNodes() const
159  {
160  return nNodesBase_;
161  }
163  inline void setCurrentNumberNodes(int value)
164  {
165  nNodes_ = value;
166  }
168  inline int getCurrentNumberNodes() const
169  {
170  return nNodes_;
171  }
173  inline void setTargetObjective(double value)
174  {
175  targetObjective_ = value;
176  }
178  inline void setHowOften(int value)
179  {
180  howOften_ = value;
181  }
183  inline const int *whichRowBlock() const
184  {
185  return whichRowBlock_;
186  }
188  inline const int *whichColumnBlock() const
189  {
190  return whichColumnBlock_;
191  }
193  inline double *initialLower() const
194  {
195  return saveLower_;
196  }
198  inline double *initialUpper() const
199  {
200  return saveUpper_;
201  }
203  inline int *intArrays() const
204  {
205  return intArray_;
206  }
208  inline double *doubleArrays() const
209  {
210  return doubleArray_;
211  }
213  inline int phase() const
214  {
215  return phase_;
216  }
218  inline int pass() const
219  {
220  return pass_;
221  }
223  inline const int *columnsInBlock() const
224  {
225  return columnsInBlock_;
226  }
228  inline const int *startColumnBlock() const
229  {
230  return startColumnBlock_;
231  }
233  inline const int *intsInBlock() const
234  {
235  return intsInBlock_;
236  }
238  double objectiveValue(const double *solution);
239 
240 private:
242  void gutsOfCopy(const CbcHeuristicDW &rhs);
244  void gutsOfDelete();
246  void setDefaults();
248  void findStructure();
250  void setupDWStructures();
252  int addDW(const double *solution, int numberBlocksUsed,
253  const int *whichBlocks);
254 
255 protected:
256  typedef int (*heuristicCallBack)(CbcHeuristicDW *, CbcModel *, int);
257  // Data
280  int *intArray_;
282  double *doubleArray_;
284  OsiSolverInterface *solver_;
286  OsiSolverInterface *dwSolver_;
288  double *bestSolution_;
292  double *fixedDj_;
294  double *saveLower_;
296  double *saveUpper_;
298  double *random_;
300  double *weights_;
302  double *objectiveDW_;
310  int *dwBlock_;
324  unsigned int *fingerPrint_;
326  unsigned short *affinity_;
354  int phase_;
356  int pass_;
362  int nNeeded_;
364  int nNodes_;
367  // 0 - fine, 1 can't be better, 2 max node
369 };
370 
371 #endif
372 
373 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
374 */
CbcHeuristicDW::passInContinuousSolution
void passInContinuousSolution(const double *solution)
Pass in continuous solution.
CbcHeuristicDW::whichRowBlock
const int * whichRowBlock() const
Block for every row.
Definition: CbcHeuristicDW.hpp:183
CbcHeuristicDW::heuristicCallBack
int(* heuristicCallBack)(CbcHeuristicDW *, CbcModel *, int)
Definition: CbcHeuristicDW.hpp:256
CbcHeuristicDW::affinity_
unsigned short * affinity_
Affinity each block has for other (will be triangular?)
Definition: CbcHeuristicDW.hpp:326
CbcHeuristicDW::saveUpper_
double * saveUpper_
Original Upper bounds.
Definition: CbcHeuristicDW.hpp:296
CbcHeuristicDW::setNumberPasses
void setNumberPasses(int value)
Set number of passes.
Definition: CbcHeuristicDW.hpp:123
CbcHeuristic::whereFrom
int whereFrom() const
Definition: CbcHeuristic.hpp:287
CbcHeuristicDW::getNumberNeeded
int getNumberNeeded() const
Get number free integers needed (Base value)
Definition: CbcHeuristicDW.hpp:138
CbcHeuristicDW::whichColumnBlock
const int * whichColumnBlock() const
Block for every column.
Definition: CbcHeuristicDW.hpp:188
CbcHeuristicDW::phase_
int phase_
Phase of solution.
Definition: CbcHeuristicDW.hpp:354
CbcHeuristicDW::dwBlock_
int * dwBlock_
Block number for each proposal.
Definition: CbcHeuristicDW.hpp:310
CbcHeuristicDW::bestObjective_
double bestObjective_
Best objective value.
Definition: CbcHeuristicDW.hpp:261
CbcHeuristicDW::backwardRow_
int * backwardRow_
Points back to master rows.
Definition: CbcHeuristicDW.hpp:312
CbcHeuristicDW::objectiveValueWhen
double objectiveValueWhen(int whichDW) const
Objective value when whichDw created.
CbcHeuristicDW::setNumberNeeded
void setNumberNeeded(int value)
Set number free integers needed (Base value)
Definition: CbcHeuristicDW.hpp:133
CbcHeuristicDW::nNodesBase_
int nNodesBase_
Base number of nodes needed.
Definition: CbcHeuristicDW.hpp:360
CbcHeuristicDW::solver
OsiSolverInterface * solver() const
Solver.
Definition: CbcHeuristicDW.hpp:81
CbcHeuristicDW::setNumberBadPasses
void setNumberBadPasses(int value)
Set number of passes without better solution.
Definition: CbcHeuristicDW.hpp:128
CbcHeuristicDW::numberMasterColumns_
int numberMasterColumns_
Number of columns in master.
Definition: CbcHeuristicDW.hpp:346
CbcHeuristicDW::numberBlocks
int numberBlocks() const
Return number of blocks <=0 - no usable structure.
Definition: CbcHeuristicDW.hpp:62
CbcHeuristic
Heuristic base class.
Definition: CbcHeuristic.hpp:86
CbcHeuristicDW::columnsInBlock
const int * columnsInBlock() const
Which columns are in block.
Definition: CbcHeuristicDW.hpp:223
CbcHeuristicDW::initialLower
double * initialLower() const
Initial Lower bounds.
Definition: CbcHeuristicDW.hpp:193
CbcHeuristicDW::intsInBlock
const int * intsInBlock() const
Number of integer variables in each block.
Definition: CbcHeuristicDW.hpp:233
CbcHeuristicDW::doubleArray_
double * doubleArray_
Local double arrays (each numberBlocks_ long)
Definition: CbcHeuristicDW.hpp:282
CbcHeuristicDW
This is unlike the other heuristics in that it is very very compute intensive.
Definition: CbcHeuristicDW.hpp:16
CbcHeuristicDW::solver_
OsiSolverInterface * solver_
Base solver.
Definition: CbcHeuristicDW.hpp:284
CbcHeuristicDW::solution
virtual int solution(double &objectiveValue, double *newSolution)
returns 0 if no solution, 1 if valid solution.
CbcHeuristicDW::fingerPrint_
unsigned int * fingerPrint_
Bits set for 1 integers in each block.
Definition: CbcHeuristicDW.hpp:324
CbcHeuristicDW::nNodes_
int nNodes_
Base number of nodes needed.
Definition: CbcHeuristicDW.hpp:364
CbcHeuristicDW::numberBadPasses_
int numberBadPasses_
Number of passes without better solution.
Definition: CbcHeuristicDW.hpp:366
CbcHeuristicDW::fullDWEverySoOften_
int fullDWEverySoOften_
DW Proposal actions fullDWEverySoOften - 0 - off k - every k times solution gets better.
Definition: CbcHeuristicDW.hpp:332
CbcHeuristicDW::setTargetObjective
void setTargetObjective(double value)
Set target objective.
Definition: CbcHeuristicDW.hpp:173
CbcHeuristicDW::findStructure
void findStructure()
Find structure.
CbcHeuristicDW::DWModel
OsiSolverInterface * DWModel(int whichDW) const
DW model (user must delete)
CbcHeuristicDW::sizeFingerPrint_
int sizeFingerPrint_
Number of unsigned ints needed for each block of fingerPrint.
Definition: CbcHeuristicDW.hpp:344
CbcHeuristicDW::pass_
int pass_
Pass number.
Definition: CbcHeuristicDW.hpp:356
CbcHeuristicDW::weights_
double * weights_
Weights for each proposal.
Definition: CbcHeuristicDW.hpp:300
CbcHeuristicDW::clone
virtual CbcHeuristic * clone() const
Clone.
CbcModel
Simple Branch and bound class.
Definition: CbcModel.hpp:100
CbcHeuristicDW::setDefaults
void setDefaults()
Set default values.
CbcHeuristicDW::numberDWTimes_
int numberDWTimes_
Number of times we have added to DW model.
Definition: CbcHeuristicDW.hpp:342
CbcHeuristicDW::resetModel
virtual void resetModel(CbcModel *model)
Resets stuff if model changes.
CbcHeuristicDW::startColumnBlock_
int * startColumnBlock_
Starts for columnsInBlock.
Definition: CbcHeuristicDW.hpp:320
CbcHeuristicDW::passInSolution
void passInSolution(const double *solution)
Pass in a solution.
CbcHeuristicDW::intArrays
int * intArrays() const
Local integer arrays (each numberBlocks_ long)
Definition: CbcHeuristicDW.hpp:203
CbcHeuristicDW::gutsOfDelete
void gutsOfDelete()
Guts of delete.
CbcHeuristicDW::bestSolution_
double * bestSolution_
Best solution found so far.
Definition: CbcHeuristicDW.hpp:288
CbcHeuristicDW::bestSolution
const double * bestSolution() const
Best solution found so far.
Definition: CbcHeuristicDW.hpp:93
CbcHeuristicDW::~CbcHeuristicDW
~CbcHeuristicDW()
CbcHeuristicDW::startColumnBlock
const int * startColumnBlock() const
Starts for columnsInBlock.
Definition: CbcHeuristicDW.hpp:228
CbcHeuristicDW::continuousSolution_
double * continuousSolution_
Continuous solution.
Definition: CbcHeuristicDW.hpp:290
CbcHeuristicDW::doubleArrays
double * doubleArrays() const
Local double arrays (each numberBlocks_ long)
Definition: CbcHeuristicDW.hpp:208
CbcHeuristicDW::objectiveDW
const double * objectiveDW() const
Objective at which DW updated.
Definition: CbcHeuristicDW.hpp:108
CbcHeuristicDW::setNumberNodes
void setNumberNodes(int value)
Set number nodes (could be done in callback) (Base value)
Definition: CbcHeuristicDW.hpp:153
CbcHeuristicDW::startRowBlock_
int * startRowBlock_
Starts for rowsInBlock.
Definition: CbcHeuristicDW.hpp:318
CbcHeuristicDW::getNumberNodes
int getNumberNodes() const
Get number nodes (could be done in callback) (Base value)
Definition: CbcHeuristicDW.hpp:158
CbcHeuristicDW::solveState_
int solveState_
Definition: CbcHeuristicDW.hpp:368
CbcHeuristicDW::setupDWStructures
void setupDWStructures()
Set up DW structure.
CbcHeuristicDW::numberColumnsDW
const int * numberColumnsDW() const
Number of columns in DW.
Definition: CbcHeuristicDW.hpp:118
CbcHeuristicDW::CbcHeuristicDW
CbcHeuristicDW()
CbcHeuristicDW::intArray_
int * intArray_
Local integer arrays (each numberBlocks_ long)
Definition: CbcHeuristicDW.hpp:280
CbcHeuristicDW::continuousSolution
const double * continuousSolution() const
Continuous solution.
Definition: CbcHeuristicDW.hpp:98
CbcHeuristic::solution
virtual int solution(double &objectiveValue, double *newSolution)=0
returns 0 if no solution, 1 if valid solution with better objective value than one passed in Sets sol...
CbcHeuristicDW::keepContinuous_
int keepContinuous_
Action on decomposition - 1 keep continuous, 0 don't.
Definition: CbcHeuristicDW.hpp:352
CbcHeuristicDW::fixedDj_
double * fixedDj_
Reduced costs of fixed solution.
Definition: CbcHeuristicDW.hpp:292
CbcHeuristicDW::objectiveValue
double objectiveValue(const double *solution)
Objective value (could also check validity)
CbcHeuristicDW::whichRowBlock_
int * whichRowBlock_
Block for every row.
Definition: CbcHeuristicDW.hpp:306
CbcHeuristicDW::setCurrentNumberNeeded
void setCurrentNumberNeeded(int value)
Set number free integers needed (Current value)
Definition: CbcHeuristicDW.hpp:143
CbcHeuristicDW::maximumDW_
int maximumDW_
Current maximum number of DW proposals.
Definition: CbcHeuristicDW.hpp:338
CbcHeuristicDW::generateCpp
virtual void generateCpp(FILE *fp)
Create C++ lines to get to current state.
CbcHeuristic.hpp
CbcHeuristicDW::numberDW_
int numberDW_
Number of DW proposals.
Definition: CbcHeuristicDW.hpp:340
CbcHeuristicDW::intsInBlock_
int * intsInBlock_
Number of integer variables in each block.
Definition: CbcHeuristicDW.hpp:322
CbcHeuristicDW::numberBlocks_
int numberBlocks_
Number of blocks.
Definition: CbcHeuristicDW.hpp:350
CbcHeuristicDW::setProposalActions
void setProposalActions(int fullDWEverySoOften)
DW Proposal actions fullDWEverySoOften - 0 - off k - every k times solution gets better.
CbcHeuristicDW::whichColumnBlock_
int * whichColumnBlock_
Block for every column.
Definition: CbcHeuristicDW.hpp:308
CbcHeuristicDW::addDW
int addDW(const double *solution, int numberBlocksUsed, const int *whichBlocks)
Add DW proposals.
CbcHeuristicDW::columnsInBlock_
int * columnsInBlock_
Which columns are in block.
Definition: CbcHeuristicDW.hpp:316
CbcHeuristicDW::numberColumnsDW_
int * numberColumnsDW_
Number of columns in each DW.
Definition: CbcHeuristicDW.hpp:304
CbcHeuristicDW::phase
int phase() const
Phase of solution.
Definition: CbcHeuristicDW.hpp:213
CbcHeuristicDW::getCurrentNumberNodes
int getCurrentNumberNodes() const
Get number nodes (could be done in callback) (Current value)
Definition: CbcHeuristicDW.hpp:168
CbcHeuristicDW::random_
double * random_
random numbers for master rows
Definition: CbcHeuristicDW.hpp:298
CbcHeuristicDW::initialUpper
double * initialUpper() const
Initial Upper bounds.
Definition: CbcHeuristicDW.hpp:198
CbcHeuristicDW::setHowOften
void setHowOften(int value)
Sets how often to do it.
Definition: CbcHeuristicDW.hpp:178
CbcHeuristicDW::operator=
CbcHeuristicDW & operator=(const CbcHeuristicDW &rhs)
Assignment operator.
CbcHeuristicDW::getCurrentNumberNeeded
int getCurrentNumberNeeded() const
Get number free integers needed (Current value)
Definition: CbcHeuristicDW.hpp:148
CbcHeuristicDW::numberPasses_
int numberPasses_
Number of passes.
Definition: CbcHeuristicDW.hpp:334
CbcHeuristicDW::fixedDj
const double * fixedDj() const
Reduced costs of fixed solution.
Definition: CbcHeuristicDW.hpp:103
CbcHeuristicDW::objectiveDW_
double * objectiveDW_
Objective at which DW updated.
Definition: CbcHeuristicDW.hpp:302
CbcHeuristicDW::numberMasterRows_
int numberMasterRows_
Number of rows in master.
Definition: CbcHeuristicDW.hpp:348
CbcHeuristicDW::setCurrentNumberNodes
void setCurrentNumberNodes(int value)
Set number nodes (could be done in callback) (Current value)
Definition: CbcHeuristicDW.hpp:163
CbcHeuristicDW::dwSolver_
OsiSolverInterface * dwSolver_
DW solver.
Definition: CbcHeuristicDW.hpp:286
CbcHeuristicDW::numberDWTimes
int numberDWTimes() const
Number of times we have added to DW model.
Definition: CbcHeuristicDW.hpp:113
CbcHeuristicDW::lastObjective_
double lastObjective_
Objective value last time.
Definition: CbcHeuristicDW.hpp:263
CbcHeuristicDW::bestObjective
double bestObjective() const
Best objective value.
Definition: CbcHeuristicDW.hpp:88
CbcHeuristicDW::functionPointer_
heuristicCallBack functionPointer_
Call back whereFrom - 0 - after blocks found but before data setup 1 - after blocks sorted but before...
Definition: CbcHeuristicDW.hpp:278
CbcHeuristicDW::gutsOfCopy
void gutsOfCopy(const CbcHeuristicDW &rhs)
Guts of copy.
CbcHeuristicDW::howOften_
int howOften_
How often to do (code can change)
Definition: CbcHeuristicDW.hpp:336
CbcHeuristicDW::setModel
virtual void setModel(CbcModel *model)
update model (This is needed if cliques update matrix etc)
CbcHeuristicDW::nNeeded_
int nNeeded_
Base number of integers needed.
Definition: CbcHeuristicDW.hpp:362
CbcHeuristicDW::targetObjective_
double targetObjective_
Target objective.
Definition: CbcHeuristicDW.hpp:259
CbcHeuristicDW::rowsInBlock_
int * rowsInBlock_
Which rows are in blocke.
Definition: CbcHeuristicDW.hpp:314
CbcHeuristicDW::nNeededBase_
int nNeededBase_
Base number of integers needed.
Definition: CbcHeuristicDW.hpp:358
CbcHeuristicDW::pass
int pass() const
Pass number.
Definition: CbcHeuristicDW.hpp:218
CbcHeuristicDW::saveLower_
double * saveLower_
Original lower bounds.
Definition: CbcHeuristicDW.hpp:294