6#ifndef CbcHeuristicDW_H
7#define CbcHeuristicDW_H
31 int keepContinuous = 0);
81 inline OsiSolverInterface *
solver()
const
86 OsiSolverInterface *
DWModel(
int whichDW)
const;
253 const int *whichBlocks);
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.
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.
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.