Minotaur 0.4.1
Docs for developers
IntVarHandler.h
Go to the documentation of this file.
1//
2// Minotaur -- It's only 1/2 bull
3//
4// (C)opyright 2008 - 2025 The Minotaur Team.
5//
6
15#ifndef MINOTAURINTVARHANDLER_H
16#define MINOTAURINTVARHANDLER_H
17
18#include "Handler.h"
19
20namespace Minotaur {
21
22
28class IntVarHandler : public Handler {
29public:
30
33
35 IntVarHandler(EnvPtr env, ProblemPtr problem);
36
39
40 // Implement Handler::getBranches().
41 Branches getBranches(BrCandPtr cand, DoubleVector & x,
42 RelaxationPtr rel, SolutionPoolPtr s_pool);
43
44 // base class method
46 const DoubleVector &x, ModVector &mods,
47 BrVarCandSet &cands, BrCandVector &gencands,
48 bool &is_inf);
49
50 // Implement Handler::getBrMod().
51 ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x,
53
55 double getTol() const;
56
57 // Write name
58 std::string getName() const;
59
60 // Check if solution is feasible.
61 bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation,
62 bool & should_prune, double &inf_meas);
63
64 bool isNeeded();
65
67 void postsolveGetX(const double *, UInt, DoubleVector *) {};
68
70 SolveStatus presolve(PreModQ *, bool *, Solution **) {return Finished;};
71
74 ModVector &)
75 {return false;};
76
77 // Does nothing.
78 void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf) ;
79
80 // Does nothing.
81 void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf);
82
83 // Does nothing.
84 void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf) ;
85
86 // Does nothing.
87 void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf);
88
94 SolutionPoolPtr, ModVector &, ModVector &, bool *,
95 SeparationStatus *) {};
96
98 void setTol(double tol);
99
101 void writePreStats(std::ostream &) const {};
102
103private:
105 EnvPtr env_;
106
108 int bdRule_;
109
115 double intTol_;
116
118 LoggerPtr logger_;
119
121 static const std::string me_;
122
124 ProblemPtr problem_;
125};
126typedef IntVarHandler* IntVarHandlerPtr;
127typedef const IntVarHandler* ConstIntVarHandlerPtr;
128}
129#endif
130
Define abstract base class for handlers of various kinds.
Base class for describing candidates for branching on a node in branch-and-bound.
Definition: BrCand.h:32
Abstract base class to manage cuts in the relaxation.
Definition: CutManager.h:42
Definition: Environment.h:28
Base class for handling specific types of constraints or objective.
Definition: Handler.h:49
Definition: IntVarHandler.h:28
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create a relaxation for a node, building from scratch.
Definition: IntVarHandler.cpp:237
void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition: IntVarHandler.cpp:231
bool isNeeded()
Return true if this handler is needed for the problem.
Definition: IntVarHandler.cpp:213
IntVarHandler()
Default constructor.
ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)
Get the modifcation that creates a given (up or down) branch.
Definition: IntVarHandler.cpp:120
void writePreStats(std::ostream &) const
Does nothing.
Definition: IntVarHandler.h:101
std::string getName() const
Return the name of the handler.
Definition: IntVarHandler.cpp:255
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create an incremental relaxation for a node.
Definition: IntVarHandler.cpp:243
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Return branches for branching.
Definition: IntVarHandler.cpp:140
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)
find branching candidates.
Definition: IntVarHandler.cpp:94
SolveStatus presolve(PreModQ *, bool *, Solution **)
Presolve. Don't do anything.
Definition: IntVarHandler.h:70
~IntVarHandler()
Destroy.
Definition: IntVarHandler.cpp:49
void separate(ConstSolutionPtr, NodePtr, RelaxationPtr, CutManager *, SolutionPoolPtr, ModVector &, ModVector &, bool *, SeparationStatus *)
Definition: IntVarHandler.h:93
void setTol(double tol)
Set the integer tolerance.
Definition: IntVarHandler.cpp:249
void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing full node relaxations.
Definition: IntVarHandler.cpp:225
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &should_prune, double &inf_meas)
Check if a solution is feasible.
Definition: IntVarHandler.cpp:54
double getTol() const
Return the integer tolerance.
Definition: IntVarHandler.cpp:207
bool presolveNode(RelaxationPtr, NodePtr, SolutionPoolPtr, ModVector &, ModVector &)
Does nothing.
Definition: IntVarHandler.h:73
void postsolveGetX(const double *, UInt, DoubleVector *)
Does nothing.
Definition: IntVarHandler.h:67
Definition: Logger.h:37
Definition: Modification.h:29
Definition: Node.h:54
Definition: Problem.h:74
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Definition: ActiveNodeStore.h:20
BranchDirection
Two directions for branching.
Definition: Types.h:201
unsigned int UInt
Unsigned integer.
Definition: Types.h:30
SeparationStatus
Status from separation routine:
Definition: Types.h:217
SolveStatus
Different states an algorithm like branch-and-bound can be in.
Definition: Types.h:158

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