Cbc 2.10.12
Loading...
Searching...
No Matches
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
17public:
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 */
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);
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
240private:
242 void gutsOfCopy(const CbcHeuristicDW &rhs);
252 int addDW(const double *solution, int numberBlocksUsed,
253 const int *whichBlocks);
254
255protected:
256 typedef int (*heuristicCallBack)(CbcHeuristicDW *, CbcModel *, int);
257 // Data
284 OsiSolverInterface *solver_;
286 OsiSolverInterface *dwSolver_;
292 double *fixedDj_;
294 double *saveLower_;
296 double *saveUpper_;
298 double *random_;
300 double *weights_;
324 unsigned int *fingerPrint_;
326 unsigned short *affinity_;
356 int pass_;
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*/
This is unlike the other heuristics in that it is very very compute intensive.
int getNumberNeeded() const
Get number free integers needed (Base value)
int keepContinuous_
Action on decomposition - 1 keep continuous, 0 don't.
int numberColumnsDW(int whichDW) const
Number of columns in DW.
const int * columnsInBlock() const
Which columns are in block.
virtual void generateCpp(FILE *fp)
Create C++ lines to get to current state.
void findStructure()
Find structure.
void setCurrentNumberNeeded(int value)
Set number free integers needed (Current value)
double * weights_
Weights for each proposal.
int fullDWEverySoOften_
DW Proposal actions fullDWEverySoOften - 0 - off k - every k times solution gets better.
int nNeededBase_
Base number of integers needed.
virtual CbcHeuristic * clone() const
Clone.
void setDefaults()
Set default values.
int nNodes_
Base number of nodes needed.
double * fixedDj_
Reduced costs of fixed solution.
double * saveUpper_
Original Upper bounds.
int numberDW_
Number of DW proposals.
double objectiveValueWhen(int whichDW) const
Objective value when whichDw created.
CbcHeuristicDW(CbcModel &model, int callBack(CbcHeuristicDW *currentHeuristic, CbcModel *thisModel, int whereFrom), int keepContinuous=0)
int * intsInBlock_
Number of integer variables in each block.
int * rowsInBlock_
Which rows are in blocke.
int addDW(const double *solution, int numberBlocksUsed, const int *whichBlocks)
Add DW proposals.
void setCurrentNumberNodes(int value)
Set number nodes (could be done in callback) (Current value)
int numberBlocks_
Number of blocks.
const double * bestSolution() const
Best solution found so far.
const int * whichRowBlock() const
Block for every row.
void setupDWStructures()
Set up DW structure.
double bestObjective_
Best objective value.
int nNeeded_
Base number of integers needed.
int numberBadPasses_
Number of passes without better solution.
int * intArray_
Local integer arrays (each numberBlocks_ long)
void passInSolution(const double *solution)
Pass in a solution.
double * random_
random numbers for master rows
int getCurrentNumberNodes() const
Get number nodes (could be done in callback) (Current value)
void gutsOfDelete()
Guts of delete.
int numberDWTimes() const
Number of times we have added to DW model.
int nNodesBase_
Base number of nodes needed.
double objectiveValue(const double *solution)
Objective value (could also check validity)
double * continuousSolution_
Continuous solution.
int maximumDW_
Current maximum number of DW proposals.
double * objectiveDW_
Objective at which DW updated.
int * dwBlock_
Block number for each proposal.
const int * startColumnBlock() const
Starts for columnsInBlock.
int * numberColumnsDW_
Number of columns in each DW.
void setNumberPasses(int value)
Set number of passes.
const double * continuousSolution() const
Continuous solution.
void setNumberBadPasses(int value)
Set number of passes without better solution.
void passInContinuousSolution(const double *solution)
Pass in continuous solution.
void setHowOften(int value)
Sets how often to do it.
int sizeFingerPrint_
Number of unsigned ints needed for each block of fingerPrint.
double * doubleArrays() const
Local double arrays (each numberBlocks_ long)
int numberDWTimes_
Number of times we have added to DW model.
int pass() const
Pass number.
OsiSolverInterface * dwSolver_
DW solver.
int(* heuristicCallBack)(CbcHeuristicDW *, CbcModel *, int)
const double * objectiveDW() const
Objective at which DW updated.
virtual void setModel(CbcModel *model)
update model (This is needed if cliques update matrix etc)
const int * whichColumnBlock() const
Block for every column.
heuristicCallBack functionPointer_
Call back whereFrom - 0 - after blocks found but before data setup 1 - after blocks sorted but before...
CbcHeuristicDW(const CbcHeuristicDW &)
int getNumberNodes() const
Get number nodes (could be done in callback) (Base value)
OsiSolverInterface * DWModel(int whichDW) const
DW model (user must delete)
void setNumberNodes(int value)
Set number nodes (could be done in callback) (Base value)
int * startColumnBlock_
Starts for columnsInBlock.
int numberPasses_
Number of passes.
double * bestSolution_
Best solution found so far.
OsiSolverInterface * solver() const
Solver.
void setProposalActions(int fullDWEverySoOften)
DW Proposal actions fullDWEverySoOften - 0 - off k - every k times solution gets better.
int howOften_
How often to do (code can change)
double * initialLower() const
Initial Lower bounds.
int pass_
Pass number.
double targetObjective_
Target objective.
const int * numberColumnsDW() const
Number of columns in DW.
double lastObjective_
Objective value last time.
double * initialUpper() const
Initial Upper bounds.
int phase_
Phase of solution.
void setNumberNeeded(int value)
Set number free integers needed (Base value)
int phase() const
Phase of solution.
int * whichRowBlock_
Block for every row.
int * columnsInBlock_
Which columns are in block.
int numberMasterRows_
Number of rows in master.
virtual void resetModel(CbcModel *model)
Resets stuff if model changes.
int numberMasterColumns_
Number of columns in master.
double * saveLower_
Original lower bounds.
int * backwardRow_
Points back to master rows.
int * startRowBlock_
Starts for rowsInBlock.
int * whichColumnBlock_
Block for every column.
CbcHeuristicDW & operator=(const CbcHeuristicDW &rhs)
Assignment operator.
void setTargetObjective(double value)
Set target objective.
OsiSolverInterface * solver_
Base solver.
unsigned int * fingerPrint_
Bits set for 1 integers in each block.
int * intArrays() const
Local integer arrays (each numberBlocks_ long)
void gutsOfCopy(const CbcHeuristicDW &rhs)
Guts of copy.
const int * intsInBlock() const
Number of integer variables in each block.
CbcHeuristicDW(CbcModel &model, int keepContinuous=0)
virtual int solution(double &objectiveValue, double *newSolution)
returns 0 if no solution, 1 if valid solution.
const double * fixedDj() const
Reduced costs of fixed solution.
unsigned short * affinity_
Affinity each block has for other (will be triangular?)
int numberBlocks() const
Return number of blocks <=0 - no usable structure.
int getCurrentNumberNeeded() const
Get number free integers needed (Current value)
double * doubleArray_
Local double arrays (each numberBlocks_ long)
double bestObjective() const
Best objective value.
Heuristic base class.
int whereFrom() const
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...
Simple Branch and bound class.
Definition CbcModel.hpp:100