Cbc  2.9.9
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 
7 #ifndef CbcHeuristicDW_H
8 #define CbcHeuristicDW_H
9 
10 #include "CbcHeuristic.hpp"
11 
17 class CbcHeuristicDW : public CbcHeuristic {
18 public:
19 
20  // Default Constructor
22 
23  /* Constructor with model - assumed before cuts
24  */
25  CbcHeuristicDW (CbcModel & model, int keepContinuous=0);
26 
27  /* Constructor with model - assumed before cuts
28  */
30  int callBack(CbcHeuristicDW * currentHeuristic,
31  CbcModel * thisModel,
32  int whereFrom),
33  int keepContinuous=0);
34 
35  // Copy constructor
37 
38  // Destructor
40 
42  virtual CbcHeuristic * clone() const;
43 
44 
47 
49  virtual void generateCpp( FILE * fp) ;
50 
52  virtual void resetModel(CbcModel * model);
53 
55  virtual void setModel(CbcModel * model);
61  virtual int solution(double & objectiveValue,
62  double * newSolution);
65  inline int numberBlocks() const
66  { return numberBlocks_;}
68  void passInSolution(const double * solution);
70  void passInContinuousSolution(const double * solution);
76  void setProposalActions(int fullDWEverySoOften);
78  double objectiveValueWhen(int whichDW) const;
80  int numberColumnsDW(int whichDW) const;
82  inline OsiSolverInterface * solver() const
83  { return solver_;}
85  OsiSolverInterface * DWModel(int whichDW) const;
87  inline double bestObjective() const
88  { return bestObjective_;}
90  inline const double * bestSolution() const
91  { return bestSolution_;}
93  inline const double * continuousSolution() const
94  { return continuousSolution_;}
96  inline const double * fixedDj() const
97  { return fixedDj_;}
99  inline const double * objectiveDW() const
100  { return objectiveDW_;}
102  inline int numberDWTimes() const
103  { return numberDWTimes_;}
105  inline const int * numberColumnsDW() const
106  { return numberColumnsDW_;}
108  inline void setNumberPasses(int value)
109  { numberPasses_ = value;}
111  inline void setNumberBadPasses(int value)
112  { numberBadPasses_ = value;}
114  inline void setNumberNeeded(int value)
115  { nNeededBase_ = value;}
117  inline int getNumberNeeded() const
118  {return nNeededBase_;}
120  inline void setCurrentNumberNeeded(int value)
121  { nNeeded_ = value;}
123  inline int getCurrentNumberNeeded() const
124  {return nNeeded_;}
126  inline void setNumberNodes(int value)
127  { nNodesBase_ = value;}
129  inline int getNumberNodes() const
130  {return nNodesBase_;}
132  inline void setCurrentNumberNodes(int value)
133  { nNodes_ = value;}
135  inline int getCurrentNumberNodes() const
136  {return nNodes_;}
138  inline void setTargetObjective(double value)
139  { targetObjective_ = value;}
141  inline void setHowOften(int value) {
142  howOften_ = value;
143  }
145  inline const int * whichRowBlock() const
146  { return whichRowBlock_;}
148  inline const int * whichColumnBlock() const
149  { return whichColumnBlock_;}
151  inline double * initialLower() const
152  { return saveLower_;}
154  inline double * initialUpper() const
155  { return saveUpper_;}
157  inline int * intArrays() const
158  { return intArray_;}
160  inline double * doubleArrays() const
161  { return doubleArray_;}
163  inline int phase() const
164  { return phase_;}
166  inline int pass() const
167  { return pass_;}
169  inline const int * columnsInBlock() const
170  { return columnsInBlock_;}
172  inline const int * startColumnBlock() const
173  { return startColumnBlock_;}
175  inline const int * intsInBlock() const
176  { return intsInBlock_;}
178  double objectiveValue(const double * solution);
179 private:
181  void gutsOfCopy(const CbcHeuristicDW & rhs);
183  void gutsOfDelete();
185  void setDefaults();
187  void findStructure();
189  void setupDWStructures();
191  int addDW(const double * solution,int numberBlocksUsed,
192  const int * whichBlocks);
193 protected:
194  typedef int (*heuristicCallBack) (CbcHeuristicDW * ,CbcModel *, int) ;
195  // Data
218  int * intArray_;
220  double * doubleArray_;
222  OsiSolverInterface * solver_;
224  OsiSolverInterface * dwSolver_;
226  double * bestSolution_;
230  double * fixedDj_;
232  double * saveLower_;
234  double * saveUpper_;
236  double * random_;
238  double * weights_;
240  double * objectiveDW_;
248  int * dwBlock_;
262  unsigned int * fingerPrint_;
264  unsigned short * affinity_;
292  int phase_;
294  int pass_;
300  int nNeeded_;
302  int nNodes_;
305  // 0 - fine, 1 can't be better, 2 max node
307 };
308 
309 #endif
CbcHeuristicDW::passInContinuousSolution
void passInContinuousSolution(const double *solution)
Pass in continuous solution.
CbcHeuristicDW::whichRowBlock
const int * whichRowBlock() const
Block for every row.
Definition: CbcHeuristicDW.hpp:145
CbcHeuristicDW::numberColumnsDW
int numberColumnsDW(int whichDW) const
Number of columns in DW.
CbcHeuristicDW::affinity_
unsigned short * affinity_
Affinity each block has for other (will be triangular?)
Definition: CbcHeuristicDW.hpp:264
CbcHeuristicDW::saveUpper_
double * saveUpper_
Original Upper bounds.
Definition: CbcHeuristicDW.hpp:234
CbcHeuristicDW::CbcHeuristicDW
CbcHeuristicDW(CbcModel &model, int callBack(CbcHeuristicDW *currentHeuristic, CbcModel *thisModel, int whereFrom), int keepContinuous=0)
CbcHeuristicDW::setNumberPasses
void setNumberPasses(int value)
Set number of passes.
Definition: CbcHeuristicDW.hpp:108
CbcHeuristicDW::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...
CbcHeuristic::whereFrom
int whereFrom() const
Definition: CbcHeuristic.hpp:259
CbcHeuristicDW::getNumberNeeded
int getNumberNeeded() const
Get number free integers needed (Base value)
Definition: CbcHeuristicDW.hpp:117
CbcHeuristicDW::whichColumnBlock
const int * whichColumnBlock() const
Block for every column.
Definition: CbcHeuristicDW.hpp:148
CbcHeuristicDW::phase_
int phase_
Phase of solution.
Definition: CbcHeuristicDW.hpp:292
CbcHeuristicDW::dwBlock_
int * dwBlock_
Block number for each proposal.
Definition: CbcHeuristicDW.hpp:248
CbcHeuristicDW::bestObjective_
double bestObjective_
Best objective value.
Definition: CbcHeuristicDW.hpp:199
CbcHeuristicDW::backwardRow_
int * backwardRow_
Points back to master rows.
Definition: CbcHeuristicDW.hpp:250
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:114
CbcHeuristicDW::nNodesBase_
int nNodesBase_
Base number of nodes needed.
Definition: CbcHeuristicDW.hpp:298
CbcHeuristicDW::solver
OsiSolverInterface * solver() const
Solver.
Definition: CbcHeuristicDW.hpp:82
CbcHeuristicDW::setNumberBadPasses
void setNumberBadPasses(int value)
Set number of passes without better solution.
Definition: CbcHeuristicDW.hpp:111
CbcHeuristicDW::numberMasterColumns_
int numberMasterColumns_
Number of columns in master.
Definition: CbcHeuristicDW.hpp:284
CbcHeuristicDW::numberBlocks
int numberBlocks() const
Return number of blocks <=0 - no usable structure.
Definition: CbcHeuristicDW.hpp:65
CbcHeuristic
Heuristic base class.
Definition: CbcHeuristic.hpp:77
CbcHeuristicDW::columnsInBlock
const int * columnsInBlock() const
Which columns are in block.
Definition: CbcHeuristicDW.hpp:169
CbcHeuristicDW::initialLower
double * initialLower() const
Initial Lower bounds.
Definition: CbcHeuristicDW.hpp:151
CbcHeuristicDW::intsInBlock
const int * intsInBlock() const
Number of integer variables in each block.
Definition: CbcHeuristicDW.hpp:175
CbcHeuristicDW::doubleArray_
double * doubleArray_
Local double arrays (each numberBlocks_ long)
Definition: CbcHeuristicDW.hpp:220
CbcHeuristicDW
This is unlike the other heuristics in that it is very very compute intensive.
Definition: CbcHeuristicDW.hpp:17
CbcHeuristicDW::solver_
OsiSolverInterface * solver_
Base solver.
Definition: CbcHeuristicDW.hpp:222
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:262
CbcHeuristicDW::nNodes_
int nNodes_
Base number of nodes needed.
Definition: CbcHeuristicDW.hpp:302
CbcHeuristicDW::numberBadPasses_
int numberBadPasses_
Number of passes without better solution.
Definition: CbcHeuristicDW.hpp:304
CbcHeuristicDW::fullDWEverySoOften_
int fullDWEverySoOften_
DW Proposal actions fullDWEverySoOften - 0 - off k - every k times solution gets better.
Definition: CbcHeuristicDW.hpp:270
CbcHeuristicDW::setTargetObjective
void setTargetObjective(double value)
Set target objective.
Definition: CbcHeuristicDW.hpp:138
CbcHeuristicDW::heuristicCallBack
int(* heuristicCallBack)(CbcHeuristicDW *, CbcModel *, int)
Definition: CbcHeuristicDW.hpp:194
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:282
CbcHeuristicDW::pass_
int pass_
Pass number.
Definition: CbcHeuristicDW.hpp:294
CbcHeuristicDW::weights_
double * weights_
Weights for each proposal.
Definition: CbcHeuristicDW.hpp:238
CbcHeuristicDW::clone
virtual CbcHeuristic * clone() const
Clone.
CbcModel
Simple Branch and bound class.
Definition: CbcModel.hpp:101
CbcHeuristicDW::numberDWTimes_
int numberDWTimes_
Number of times we have added to DW model.
Definition: CbcHeuristicDW.hpp:280
CbcHeuristicDW::resetModel
virtual void resetModel(CbcModel *model)
Resets stuff if model changes.
CbcHeuristicDW::startColumnBlock_
int * startColumnBlock_
Starts for columnsInBlock.
Definition: CbcHeuristicDW.hpp:258
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:157
CbcHeuristicDW::bestSolution_
double * bestSolution_
Best solution found so far.
Definition: CbcHeuristicDW.hpp:226
CbcHeuristicDW::bestSolution
const double * bestSolution() const
Best solution found so far.
Definition: CbcHeuristicDW.hpp:90
CbcHeuristicDW::~CbcHeuristicDW
~CbcHeuristicDW()
CbcHeuristicDW::startColumnBlock
const int * startColumnBlock() const
Starts for columnsInBlock.
Definition: CbcHeuristicDW.hpp:172
CbcHeuristicDW::continuousSolution_
double * continuousSolution_
Continuous solution.
Definition: CbcHeuristicDW.hpp:228
CbcHeuristicDW::doubleArrays
double * doubleArrays() const
Local double arrays (each numberBlocks_ long)
Definition: CbcHeuristicDW.hpp:160
CbcHeuristicDW::objectiveDW
const double * objectiveDW() const
Objective at which DW updated.
Definition: CbcHeuristicDW.hpp:99
CbcHeuristicDW::setNumberNodes
void setNumberNodes(int value)
Set number nodes (could be done in callback) (Base value)
Definition: CbcHeuristicDW.hpp:126
CbcHeuristicDW::startRowBlock_
int * startRowBlock_
Starts for rowsInBlock.
Definition: CbcHeuristicDW.hpp:256
CbcHeuristicDW::getNumberNodes
int getNumberNodes() const
Get number nodes (could be done in callback) (Base value)
Definition: CbcHeuristicDW.hpp:129
CbcHeuristicDW::solveState_
int solveState_
Definition: CbcHeuristicDW.hpp:306
CbcHeuristicDW::CbcHeuristicDW
CbcHeuristicDW(CbcModel &model, int keepContinuous=0)
CbcHeuristicDW::numberColumnsDW
const int * numberColumnsDW() const
Number of columns in DW.
Definition: CbcHeuristicDW.hpp:105
CbcHeuristicDW::CbcHeuristicDW
CbcHeuristicDW()
CbcHeuristicDW::intArray_
int * intArray_
Local integer arrays (each numberBlocks_ long)
Definition: CbcHeuristicDW.hpp:218
CbcHeuristicDW::continuousSolution
const double * continuousSolution() const
Continuous solution.
Definition: CbcHeuristicDW.hpp:93
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:290
CbcHeuristicDW::fixedDj_
double * fixedDj_
Reduced costs of fixed solution.
Definition: CbcHeuristicDW.hpp:230
CbcHeuristicDW::objectiveValue
double objectiveValue(const double *solution)
Objective value (could also check validity)
CbcHeuristicDW::whichRowBlock_
int * whichRowBlock_
Block for every row.
Definition: CbcHeuristicDW.hpp:244
CbcHeuristicDW::setCurrentNumberNeeded
void setCurrentNumberNeeded(int value)
Set number free integers needed (Current value)
Definition: CbcHeuristicDW.hpp:120
CbcHeuristicDW::maximumDW_
int maximumDW_
Current maximum number of DW proposals.
Definition: CbcHeuristicDW.hpp:276
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:278
CbcHeuristicDW::intsInBlock_
int * intsInBlock_
Number of integer variables in each block.
Definition: CbcHeuristicDW.hpp:260
CbcHeuristicDW::numberBlocks_
int numberBlocks_
Number of blocks.
Definition: CbcHeuristicDW.hpp:288
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:246
CbcHeuristicDW::columnsInBlock_
int * columnsInBlock_
Which columns are in block.
Definition: CbcHeuristicDW.hpp:254
CbcHeuristicDW::numberColumnsDW_
int * numberColumnsDW_
Number of columns in each DW.
Definition: CbcHeuristicDW.hpp:242
CbcHeuristicDW::phase
int phase() const
Phase of solution.
Definition: CbcHeuristicDW.hpp:163
CbcHeuristicDW::getCurrentNumberNodes
int getCurrentNumberNodes() const
Get number nodes (could be done in callback) (Current value)
Definition: CbcHeuristicDW.hpp:135
CbcHeuristicDW::CbcHeuristicDW
CbcHeuristicDW(const CbcHeuristicDW &)
CbcHeuristicDW::random_
double * random_
random numbers for master rows
Definition: CbcHeuristicDW.hpp:236
CbcHeuristicDW::initialUpper
double * initialUpper() const
Initial Upper bounds.
Definition: CbcHeuristicDW.hpp:154
CbcHeuristicDW::setHowOften
void setHowOften(int value)
Sets how often to do it.
Definition: CbcHeuristicDW.hpp:141
CbcHeuristicDW::operator=
CbcHeuristicDW & operator=(const CbcHeuristicDW &rhs)
Assignment operator.
CbcHeuristicDW::getCurrentNumberNeeded
int getCurrentNumberNeeded() const
Get number free integers needed (Current value)
Definition: CbcHeuristicDW.hpp:123
CbcHeuristicDW::numberPasses_
int numberPasses_
Number of passes.
Definition: CbcHeuristicDW.hpp:272
CbcHeuristicDW::fixedDj
const double * fixedDj() const
Reduced costs of fixed solution.
Definition: CbcHeuristicDW.hpp:96
CbcHeuristicDW::objectiveDW_
double * objectiveDW_
Objective at which DW updated.
Definition: CbcHeuristicDW.hpp:240
CbcHeuristicDW::numberMasterRows_
int numberMasterRows_
Number of rows in master.
Definition: CbcHeuristicDW.hpp:286
CbcHeuristicDW::setCurrentNumberNodes
void setCurrentNumberNodes(int value)
Set number nodes (could be done in callback) (Current value)
Definition: CbcHeuristicDW.hpp:132
CbcHeuristicDW::dwSolver_
OsiSolverInterface * dwSolver_
DW solver.
Definition: CbcHeuristicDW.hpp:224
CbcHeuristicDW::numberDWTimes
int numberDWTimes() const
Number of times we have added to DW model.
Definition: CbcHeuristicDW.hpp:102
CbcHeuristicDW::lastObjective_
double lastObjective_
Objective value last time.
Definition: CbcHeuristicDW.hpp:201
CbcHeuristicDW::bestObjective
double bestObjective() const
Best objective value.
Definition: CbcHeuristicDW.hpp:87
CbcHeuristicDW::functionPointer_
heuristicCallBack functionPointer_
Call back whereFrom - 0 - after blocks found but before data setup 1 - after blocks sorted but before...
Definition: CbcHeuristicDW.hpp:216
CbcHeuristicDW::howOften_
int howOften_
How often to do (code can change)
Definition: CbcHeuristicDW.hpp:274
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:300
CbcHeuristicDW::targetObjective_
double targetObjective_
Target objective.
Definition: CbcHeuristicDW.hpp:197
CbcHeuristicDW::rowsInBlock_
int * rowsInBlock_
Which rows are in blocke.
Definition: CbcHeuristicDW.hpp:252
CbcHeuristicDW::nNeededBase_
int nNeededBase_
Base number of integers needed.
Definition: CbcHeuristicDW.hpp:296
CbcHeuristicDW::pass
int pass() const
Pass number.
Definition: CbcHeuristicDW.hpp:166
CbcHeuristicDW::saveLower_
double * saveLower_
Original lower bounds.
Definition: CbcHeuristicDW.hpp:232