Cbc  2.9.9
CbcHeuristicDive.hpp
Go to the documentation of this file.
1 /* $Id: CbcHeuristicDive.hpp 2093 2014-11-06 16:17:38Z forrest $ */
2 // Copyright (C) 2008, 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 CbcHeuristicDive_H
7 #define CbcHeuristicDive_H
8 
9 #include "CbcHeuristic.hpp"
10 class CbcSubProblem;
11 class OsiRowCut;
13  int var;
14  double pseudoRedCost;
15 };
16 
17 
22 public:
23 
24  // Default Constructor
26 
27  // Constructor with model - assumed before cuts
29 
30  // Copy constructor
32 
33  // Destructor
35 
37  virtual CbcHeuristicDive * clone() const = 0;
38 
41 
43  virtual void generateCpp( FILE * ) {}
44 
46  void generateCpp( FILE * fp, const char * heuristic);
47 
49  virtual void resetModel(CbcModel * model);
50 
52  virtual void setModel(CbcModel * model);
53 
54  // REMLOVE using CbcHeuristic::solution ;
61  virtual int solution(double & objectiveValue,
62  double * newSolution);
64  int solution(double & objectiveValue, int & numberNodes,
65  int & numberCuts, OsiRowCut ** cuts,
66  CbcSubProblem ** & nodes,
67  double * newSolution);
73  int fathom(CbcModel * model, int & numberNodes,CbcSubProblem ** & nodes);
74 
76  virtual void validate();
77 
79  void setPriorities();
80 
83 
85  void setPercentageToFix(double value) {
86  percentageToFix_ = value;
87  }
88 
90  void setMaxIterations(int value) {
91  maxIterations_ = value;
92  }
93 
95  void setMaxSimplexIterations(int value) {
96  maxSimplexIterations_ = value;
97  }
99  inline int maxSimplexIterations() const {
100  return maxSimplexIterations_;
101  }
102 
106  }
107 
109  void setMaxTime(double value) {
110  maxTime_ = value;
111  }
112 
114  virtual bool canHeuristicRun();
115 
122  virtual bool selectVariableToBranch(OsiSolverInterface* solver,
123  const double* newSolution,
124  int& bestColumn,
125  int& bestRound) = 0;
128  virtual void initializeData() {}
129 
131  int reducedCostFix (OsiSolverInterface* solver);
133  virtual int fixOtherVariables(OsiSolverInterface * solver,
134  const double * solution,
135  PseudoReducedCost * candidate,
136  const double * random);
137 
138 protected:
139  // Data
140 
141  // Original matrix by column
142  CoinPackedMatrix matrix_;
143 
144  // Original matrix by
145  CoinPackedMatrix matrixByRow_;
146 
147  // Down locks
148  unsigned short * downLocks_;
149 
150  // Up locks
151  unsigned short * upLocks_;
152 
154  double * downArray_;
155 
157  double * upArray_;
158 
160  typedef struct {
161  unsigned int direction:3; // 0 bit off, 1 bit (0 down first, 1 up first) 2 bit non zero don't try other way
162  unsigned int priority:29;
163  } PriorityType;
165  // Indexes of binary variables with 0 objective coefficient
166  // and in variable bound constraints
167  std::vector<int> binVarIndex_;
168 
169  // Indexes of variable bound rows for each binary variable
170  std::vector<int> vbRowIndex_;
171 
172  // Percentage of integer variables to fix at bounds
174 
175  // Maximum time allowed
176  double maxTime_;
177 
178  // Small objective (i.e. treat zero objective as this)
180 
181  // Maximum number of major iterations
183 
184  // Maximum number of simplex iterations
186 
187  // Maximum number of simplex iterations at root node
189 
190 };
191 #endif
192 
PseudoReducedCost
Definition: CbcHeuristicDive.hpp:12
CbcHeuristicDive::selectBinaryVariables
void selectBinaryVariables()
Select candidate binary variables for fixing.
CbcHeuristicDive::reducedCostFix
int reducedCostFix(OsiSolverInterface *solver)
Perform reduced cost fixing on integer variables.
CbcHeuristicDive::clone
virtual CbcHeuristicDive * clone() const =0
Clone.
CbcHeuristicDive::vbRowIndex_
std::vector< int > vbRowIndex_
Definition: CbcHeuristicDive.hpp:170
CbcHeuristicDive::operator=
CbcHeuristicDive & operator=(const CbcHeuristicDive &rhs)
Assignment operator.
CbcHeuristicDive::solution
int solution(double &objectiveValue, int &numberNodes, int &numberCuts, OsiRowCut **cuts, CbcSubProblem **&nodes, double *newSolution)
inner part of dive
CbcHeuristicDive::solution
virtual int solution(double &objectiveValue, double *newSolution)
returns 0 if no solution, 1 if valid solution with better objective value than one passed in Sets sol...
CbcHeuristicDive::setMaxSimplexIterations
void setMaxSimplexIterations(int value)
Set maximum number of simplex iterations.
Definition: CbcHeuristicDive.hpp:95
CbcHeuristicDive::PriorityType::direction
unsigned int direction
Definition: CbcHeuristicDive.hpp:161
CbcHeuristicDive::setMaxIterations
void setMaxIterations(int value)
Set maximum number of iterations.
Definition: CbcHeuristicDive.hpp:90
CbcHeuristic
Heuristic base class.
Definition: CbcHeuristic.hpp:77
CbcHeuristicDive::priority_
PriorityType * priority_
Definition: CbcHeuristicDive.hpp:164
CbcHeuristicDive::smallObjective_
double smallObjective_
Definition: CbcHeuristicDive.hpp:179
CbcHeuristicDive::setModel
virtual void setModel(CbcModel *model)
update model (This is needed if cliques update matrix etc)
PseudoReducedCost::var
int var
Definition: CbcHeuristicDive.hpp:13
CbcHeuristicDive::setMaxSimplexIterationsAtRoot
void setMaxSimplexIterationsAtRoot(int value)
Set maximum number of simplex iterations at root node.
Definition: CbcHeuristicDive.hpp:104
CbcHeuristicDive::CbcHeuristicDive
CbcHeuristicDive()
CbcHeuristicDive::PriorityType::priority
unsigned int priority
Definition: CbcHeuristicDive.hpp:162
CbcHeuristicDive::CbcHeuristicDive
CbcHeuristicDive(const CbcHeuristicDive &)
PseudoReducedCost::pseudoRedCost
double pseudoRedCost
Definition: CbcHeuristicDive.hpp:14
CbcHeuristicDive::selectVariableToBranch
virtual bool selectVariableToBranch(OsiSolverInterface *solver, const double *newSolution, int &bestColumn, int &bestRound)=0
Selects the next variable to branch on Returns true if all the fractional variables can be trivially ...
CbcModel
Simple Branch and bound class.
Definition: CbcModel.hpp:101
CbcHeuristicDive::initializeData
virtual void initializeData()
Initializes any data which is going to be used repeatedly in selectVariableToBranch.
Definition: CbcHeuristicDive.hpp:128
CbcHeuristicDive::resetModel
virtual void resetModel(CbcModel *model)
Resets stuff if model changes.
CbcHeuristicDive::setPriorities
void setPriorities()
Sets priorities if any.
CbcHeuristicDive::canHeuristicRun
virtual bool canHeuristicRun()
Tests if the heuristic can run.
CbcHeuristicDive::maxSimplexIterations
int maxSimplexIterations() const
Get maximum number of simplex iterations.
Definition: CbcHeuristicDive.hpp:99
CbcHeuristicDive::generateCpp
virtual void generateCpp(FILE *)
Create C++ lines to get to current state.
Definition: CbcHeuristicDive.hpp:43
CbcHeuristicDive::fathom
int fathom(CbcModel *model, int &numberNodes, CbcSubProblem **&nodes)
returns 0 if no solution, 1 if valid solution with better objective value than one passed in also ret...
CbcHeuristicDive::matrixByRow_
CoinPackedMatrix matrixByRow_
Definition: CbcHeuristicDive.hpp:145
CbcHeuristicDive::maxSimplexIterationsAtRoot_
int maxSimplexIterationsAtRoot_
Definition: CbcHeuristicDive.hpp:188
CbcHeuristic::numberNodes
int numberNodes() const
Gets number of nodes in a subtree (default 200)
Definition: CbcHeuristic.hpp:147
CbcHeuristicDive::upLocks_
unsigned short * upLocks_
Definition: CbcHeuristicDive.hpp:151
CbcHeuristicDive::maxTime_
double maxTime_
Definition: CbcHeuristicDive.hpp:176
CbcHeuristicDive::PriorityType
Array of priorities.
Definition: CbcHeuristicDive.hpp:160
CbcHeuristic.hpp
CbcHeuristicDive::binVarIndex_
std::vector< int > binVarIndex_
Definition: CbcHeuristicDive.hpp:167
CbcHeuristicDive::generateCpp
void generateCpp(FILE *fp, const char *heuristic)
Create C++ lines to get to current state - does work for base class.
CbcHeuristicDive::maxSimplexIterations_
int maxSimplexIterations_
Definition: CbcHeuristicDive.hpp:185
CbcHeuristicDive::downLocks_
unsigned short * downLocks_
Definition: CbcHeuristicDive.hpp:148
CbcHeuristicDive::downArray_
double * downArray_
Extra down array (number Integers long)
Definition: CbcHeuristicDive.hpp:154
CbcHeuristicDive::~CbcHeuristicDive
~CbcHeuristicDive()
CbcHeuristicDive::setPercentageToFix
void setPercentageToFix(double value)
Set percentage of integer variables to fix at bounds.
Definition: CbcHeuristicDive.hpp:85
CbcHeuristicDive::fixOtherVariables
virtual int fixOtherVariables(OsiSolverInterface *solver, const double *solution, PseudoReducedCost *candidate, const double *random)
Fix other variables at bounds.
CbcHeuristicDive::percentageToFix_
double percentageToFix_
Definition: CbcHeuristicDive.hpp:173
CbcHeuristicDive
Dive class.
Definition: CbcHeuristicDive.hpp:21
CbcHeuristicDive::upArray_
double * upArray_
Extra up array (number Integers long)
Definition: CbcHeuristicDive.hpp:157
CbcHeuristicDive::matrix_
CoinPackedMatrix matrix_
Definition: CbcHeuristicDive.hpp:142
CbcHeuristicDive::setMaxTime
void setMaxTime(double value)
Set maximum time allowed.
Definition: CbcHeuristicDive.hpp:109
CbcHeuristicDive::validate
virtual void validate()
Validate model i.e. sets when_ to 0 if necessary (may be NULL)
CbcHeuristicDive::CbcHeuristicDive
CbcHeuristicDive(CbcModel &model)
CbcHeuristicDive::maxIterations_
int maxIterations_
Definition: CbcHeuristicDive.hpp:182