Minotaur 0.4.1
Docs for developers
SOS2Handler.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 MINOTAURSOS2HANDLER_H
16#define MINOTAURSOS2HANDLER_H
17
18#include "Handler.h"
19
20namespace Minotaur {
21
27class SOS2Handler : public Handler {
28public:
29
32
34 SOS2Handler(EnvPtr env, ProblemPtr problem);
35
38
39 // Does nothing.
40 void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf);
41
42 // Does nothing.
43 void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf);
44
45 // Does nothing.
46 void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf);
47
48 // Does nothing.
49 void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf);
50
51 // Check if solution is feasible.
52 bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation,
53 bool &should_prune, double &inf_meas);
54
57 CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods,
58 ModVector &r_mods, bool *sol_found, SeparationStatus *status);
59 // Base class method.
60 void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x,
61 ModVector & mods, BrVarCandSet &cands,
62 BrCandVector &gencands, bool & is_inf);
63
64 // Base class method.
65 ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x,
67
68 // Base class method.
69 Branches getBranches(BrCandPtr cand, DoubleVector & x,
70 RelaxationPtr rel, SolutionPoolPtr s_pool);
71
72 bool isNeeded();
73
75 SolveStatus presolve(PreModQ *, bool *, Solution **) {return Finished;};
76
78 void postsolveGetX(const double *, UInt, DoubleVector *);
79
82 ModVector &)
83 {return false;};
84
85 // Write name
86 std::string getName() const;
87
88 void getNzNumSum_(SOSPtr sos, const DoubleVector x, int *nz,
89 double *nzsum);
90
92 void writePreStats(std::ostream &) const {};
93
95 double getTol() const;
96
98 void setTol(double tol);
99
100private:
102 EnvPtr env_;
103
105 LoggerPtr logger_;
106
108 static const std::string me_;
109
111 ProblemPtr problem_;
112
118 double zTol_;
119
120 void getNzAvgWt_(SOSPtr sos, const DoubleVector x,
121 const double *weights, int *nz, double *avgwt);
122
123 void getSumN_(SOSPtr sos, const DoubleVector &x, double *sum, int *nnz,
124 int *nv, int *nspos);
125
126 bool isXFeasible_(const double *x, SOSPtr sos);
127
128};
129typedef SOS2Handler* SOS2HandlerPtr;
130typedef const SOS2Handler* ConstSOS2HandlerPtr;
131}
132#endif
133
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: Logger.h:37
Definition: Modification.h:29
Definition: Node.h:54
Definition: Problem.h:74
Definition: Relaxation.h:53
Definition: SOS2Handler.h:27
ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)
Get the modifcation that creates a given (up or down) branch.
Definition: SOS2Handler.cpp:410
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Return branches for branching.
Definition: SOS2Handler.cpp:131
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)
find branching candidates.
Definition: SOS2Handler.cpp:197
std::string getName() const
Return the name of the handler.
Definition: SOS2Handler.cpp:434
bool isNeeded()
Return true if this handler is needed for the problem.
Definition: SOS2Handler.cpp:476
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create an incremental relaxation for a node.
Definition: SOS2Handler.cpp:511
SOS2Handler()
Default constructor.
void postsolveGetX(const double *, UInt, DoubleVector *)
Does nothing.
double getTol() const
Return the integer tolerance.
Definition: SOS2Handler.cpp:470
void setTol(double tol)
Set the integer tolerance.
Definition: SOS2Handler.cpp:525
bool presolveNode(RelaxationPtr, NodePtr, SolutionPoolPtr, ModVector &, ModVector &)
Does nothing.
Definition: SOS2Handler.h:81
SolveStatus presolve(PreModQ *, bool *, Solution **)
Presolve. Do not do any presolving.
Definition: SOS2Handler.h:75
void separate(ConstSolutionPtr sol, NodePtr node, RelaxationPtr rel, CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods, bool *sol_found, SeparationStatus *status)
Empty method as we do not do any separation in SOS1.
Definition: SOS2Handler.cpp:517
void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing full node relaxations.
Definition: SOS2Handler.cpp:493
void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition: SOS2Handler.cpp:499
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create a relaxation for a node, building from scratch.
Definition: SOS2Handler.cpp:505
void writePreStats(std::ostream &) const
Does nothing.
Definition: SOS2Handler.h:92
~SOS2Handler()
Destroy.
Definition: SOS2Handler.cpp:53
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &should_prune, double &inf_meas)
Check if a solution is feasible.
Definition: SOS2Handler.cpp:58
Definition: SOS.h:23
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