Minotaur 0.4.1
Docs for developers
UnambRelBrancher.h
Go to the documentation of this file.
1//
2// Minotaur -- It's only 1/2 bull
3//
4// (C)opyright 2009 - 2025 The Minotaur Team.
5//
6
14#ifndef MINOTAURUNAMBRELBRANCHER_H
15#define MINOTAURUNAMBRELBRANCHER_H
16
17#include "Brancher.h"
18
19namespace Minotaur {
20
21class Engine;
22class Timer;
23typedef Engine* EnginePtr;
24
26 UInt bndChange;
31 double strTime;
32};
33
34
36class UnambRelBrancher : public Brancher {
37
38public:
46 UnambRelBrancher(EnvPtr env, HandlerVector & handlers);
47
50
51 // base class function.
52 Branches findBranches(RelaxationPtr rel, NodePtr node,
54 BrancherStatus & br_status, ModVector &mods);
55
57 bool getTrustCutoff();
58
61
62 // base class function.
63 std::string getName() const;
64
66 UInt getThresh() const;
67
73 void initialize(RelaxationPtr rel);
74
76 void setTrustCutoff(bool val);
77
83 void setEngine(EnginePtr engine);
84
90 void setIterLim(UInt k);
91
97 void setMaxDepth(UInt k);
98
104 void setMinNodeDist(UInt k);
105
113 void setThresh(UInt k);
114
115 // base class function.
117
119 void writeStats(std::ostream &out) const;
120
121private:
122
136 BrCandPtr findBestCandidate_(const double objval, double cutoff,
137 NodePtr node, IntVector candsPos,
138 IntVector candsPosRel,
139 IntVector candsPosUnRel);
140
150 void findCandidates_(NodePtr node, IntVector & candPositions,
151 IntVector & candsPosRel,
152 IntVector & candsPosUnRel);
153
158 void freeCandidates_(BrCandPtr no_del);
159
169 void getPCScore_(BrCandPtr cand, double *ch_down, double *ch_up,
170 double *score, NodePtr node, IntVector candsPos,
171 UInt cnt);
172
179 double getScore_(const double & up_score, const double & down_score);
180
195 bool shouldPrune_(const double &chcutoff, const double &change,
196 const EngineStatus & status, bool *is_rel);
197
206 void strongBranch_(BrCandPtr cand, double & obj_up, double & obj_down,
207 EngineStatus & status_up, EngineStatus & status_down);
208
224 void updatePCost_(const int &index, int i, const double &new_cost,
225 DoubleVector cost, UIntVector count,
226 bool newCand, bool updateDown, bool strngBrnched,
227 NodePtr node);
228
246 void useStrongBranchInfo_(BrCandPtr cand, const double & chcutoff,
247 double & change_up, double & change_down,
248 const EngineStatus & status_up,
249 const EngineStatus & status_down,
250 NodePtr node, int candPosition);
251
260 void writeScore_(BrCandPtr cand, double score, double change_up,
261 double change_down);
262
269 void writeScores_(std::ostream &out);
270
280 void writeScores_(std::ostream &out, NodePtr node, IntVector candsPosRel,
281 IntVector candsPosUnrel);
282
284 EnginePtr engine_;
285
287 const double eTol_;
288
293 HandlerVector handlers_;
294
296 bool init_;
297
299 UIntVector lastStrBranched_;
300
303 UInt maxDepth_;
304
309 UInt maxIterations_;
310
314 UInt maxStrongCands_;
315
317 const static std::string me_;
318
323 UInt minNodeDist_;
324
326 ModVector mods_;
327
329 DoubleVector pseudoDown_;
330
332 DoubleVector pseudoUp_;
333
335 RelaxationPtr rel_;
336
338 std::vector<BrCandPtr> relCands_;
339
341 UnambRelBrStats * stats_;
342
344 BrancherStatus status_;
345
347 Timer *timer_;
348
353 UIntVector timesDown_;
354
359 UIntVector timesUp_;
360
362 UInt thresh_;
363
365 bool trustCutoff_;
366
371 std::vector<BrCandPtr> unrelCands_;
372
374 DoubleVector x_;
375
376};
378}
379#endif
380
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: Engine.h:34
Definition: Environment.h:28
Definition: Node.h:54
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Definition: Timer.h:40
A class to select a variable for branching using unambiguous reliability branching.
Definition: UnambRelBrancher.h:36
UnambRelBrancher(EnvPtr env, HandlerVector &handlers)
Construct using an environment pointer and handlers.
Definition: UnambRelBrancher.cpp:43
void setMaxDepth(UInt k)
Set the depth at which we stop strong branching.
Definition: UnambRelBrancher.cpp:514
void setIterLim(UInt k)
Set iteration limit of engine.
Definition: UnambRelBrancher.cpp:508
UInt getThresh() const
Return the threshhold value.
Definition: UnambRelBrancher.cpp:473
void setThresh(UInt k)
Set reliability threshhold.
Definition: UnambRelBrancher.cpp:526
UInt getIterLim()
Get iteration limit of engine.
Definition: UnambRelBrancher.cpp:428
void setMinNodeDist(UInt k)
Don't do strong branching on a cand if we did it 'k' nodes or less ago.
Definition: UnambRelBrancher.cpp:520
void initialize(RelaxationPtr rel)
Initialize data structures.
Definition: UnambRelBrancher.cpp:479
void writeStats(std::ostream &out) const
Write statistics.
Definition: UnambRelBrancher.cpp:898
bool getTrustCutoff()
Return value of trustCutoff parameter.
Definition: UnambRelBrancher.cpp:422
void setEngine(EnginePtr engine)
Set engine.
Definition: UnambRelBrancher.cpp:502
std::string getName() const
Return the name of this brancher.
Definition: UnambRelBrancher.cpp:434
void setTrustCutoff(bool val)
Set value of trustCutoff parameter.
Definition: UnambRelBrancher.cpp:496
void updateAfterSolve(NodePtr node, ConstSolutionPtr sol)
Update pseudo-costs after LP is solved.
Definition: UnambRelBrancher.cpp:615
~UnambRelBrancher()
Destroy.
Definition: UnambRelBrancher.cpp:70
Branches findBranches(RelaxationPtr rel, NodePtr node, ConstSolutionPtr sol, SolutionPoolPtr s_pool, BrancherStatus &br_status, ModVector &mods)
Find a branching candidate.
Definition: UnambRelBrancher.cpp:172
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: UnambRelBrancher.h:25
UInt calls
Number of times variable bounds were changed.
Definition: UnambRelBrancher.h:27
UInt engProbs
Number of times called to find a branching candidate.
Definition: UnambRelBrancher.h:28
UInt iters
Number of times an unexpected engine status was met.
Definition: UnambRelBrancher.h:29
double strTime
Number of times strong branching on a variable.
Definition: UnambRelBrancher.h:31
UInt strBrCalls
Number of iterations in strong-branching.
Definition: UnambRelBrancher.h:30

Minotaur source code documented by Doxygen 1.9.4 on Thu Apr 24 2025