13#ifndef MINOTAURHYBRIDBRANCHER_H
14#define MINOTAURHYBRIDBRANCHER_H
23typedef Engine* EnginePtr;
92 std::vector<std::string> variableNames_;
100 BrCandVector gencands_;
106 HandlerVector handlers_;
120 const static std::string me_;
132 UIntVector fracCount_;
138 UIntVector unfixedCount_;
143 void updateFracCount_();
148 void updateUnfixedCount_();
151 UIntVector actualTimesUp_;
154 UIntVector actualTimesDown_;
157 DoubleVector pseudoDown_;
160 DoubleVector pseudoUp_;
166 BrVarCandSet relCands_;
186 UIntVector timesDown_;
192 BrVarCandSet unrelCands_;
214 void findCandidates_(
bool& should_prune);
235 void getPCScore_(
BrCandPtr cand,
double* ch_dn,
double* ch_up,
double* score);
243 double getScore_(
const double& up_score,
const double& down_score);
257 bool isReliable_(
int pcostIndex);
273 bool shouldPrune_(
const double& chcutoff,
const double& change,
280 double sortUnrelCands_(DoubleVector& vio);
290 void strongBranch_(
BrCandPtr cand,
double& obj_up,
double& obj_down,
304 void updatePCost_(
const int& i,
const double& new_cost, DoubleVector& cost,
322 void useStrongBranchInfo_(
BrCandPtr cand,
const double& chcutoff,
323 double& change_up,
double& change_down,
335 void writeScore_(
BrCandPtr cand,
double score,
double change_up,
Declare the base class Brancher for finding and creating branches in Branch-and-Bound.
Base class for describing candidates for branching on a node in branch-and-bound.
Definition: BrCand.h:32
A brancher is used to find suitable branches for a given node. e.g. LexicoBrancher....
Definition: Brancher.h:33
Definition: Environment.h:28
Definition: HybridBrancher.h:33
void writeStats(std::ostream &out) const
Write statistics.
Definition: HybridBrancher.cpp:796
Branches findBranches(RelaxationPtr rel, NodePtr node, ConstSolutionPtr sol, SolutionPoolPtr s_pool, BrancherStatus &br_status, ModVector &mods)
Find a branching candidate.
Definition: HybridBrancher.cpp:185
void doStronger()
Definition: HybridBrancher.cpp:71
void reliabilitySetup(UInt max_cands, UInt max_iter, UInt thresh)
Do reliability branching setup.
Definition: HybridBrancher.cpp:469
HybridBrancher(EnvPtr env, HandlerVector &handlers)
Construct using an environment pointer and handlers.
Definition: HybridBrancher.cpp:42
~HybridBrancher()
Destructor.
Definition: HybridBrancher.cpp:66
void statsTable() const
Print Table.
Definition: HybridBrancher.cpp:761
void updateAfterSolve(NodePtr node, ConstSolutionPtr sol)
Update pseudo-costs after LP is solved.
Definition: HybridBrancher.cpp:644
void setProblem(ProblemPtr p)
Set problem.
Definition: HybridBrancher.cpp:479
std::string getName() const
Return the name of this brancher.
Definition: HybridBrancher.cpp:384
void setEngine(EnginePtr engine)
Set engine.
Definition: HybridBrancher.cpp:464
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Definition: ActiveNodeStore.h:20
BrancherStatus
What can a brancher do to a node in branch-and-bound.
Definition: Types.h:193
unsigned int UInt
Unsigned integer.
Definition: Types.h:30
EngineStatus
Different status that an external engine may report.
Definition: Types.h:176
Definition: HybridBrancher.h:25
double time
Number of times node was pruned by strong branching.
Definition: HybridBrancher.h:29
UInt nodePruned
Number of times an unexpected engine status was met.
Definition: HybridBrancher.h:28
UInt engProbs
Number of calls to find branching candidate.
Definition: HybridBrancher.h:27