14#ifndef MINOTAURLINEARHANDLER_H
15#define MINOTAURLINEARHANDLER_H
106 ModVector&, BrVarCandSet&, BrCandVector&,
133 virtual std::string
getName()
const;
156 void setPreOptDualFix(
bool val)
161 void setPreOptCoeffImp(
bool val)
166 void simplePresolve(ProblemPtr p, SolutionPoolPtr spool, ModVector& t_mods,
214 static const std::string
me_;
228 void coeffImp_(
bool* changed);
230 double* lb,
double* ub);
233 void delFixedVars_(
bool* changed);
235 void dualFix_(
bool* changed);
236 void domRows_(
bool* changed);
237 void dupRows_(
bool* changed);
247 void findAllBinCons_();
257 void purgeVars_(PreModQ* pre_mods);
271 void substVars_(
bool* changed, PreModQ* pre_mods);
280 void updateLfBoundsFromLb_(
ProblemPtr p,
bool apply_to_prob,
282 bool is_sing,
bool* changed, ModQ* mods,
285 void updateLfBoundsFromUb_(
ProblemPtr p,
bool apply_to_prob,
287 bool is_sing,
bool* changed, ModQ* mods,
291 ModQ* mods,
UInt* nintmods);
294 bool* changed, ModQ* mods);
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
The Constraint class is used to manage a constraint.
Definition: Constraint.h:61
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
The base class linear function is of the form c'x.
Definition: LinearFunction.h:31
Definition: LinearHandler.h:60
SolveStatus checkBounds_(ProblemPtr p)
check if lb <= ub for all variables and constraints.
Definition: LinearHandler.cpp:324
virtual SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)
Initial presolve.
Definition: LinearHandler.cpp:215
bool chkDupRows_
If true, dupRows_ is run in presolve.
Definition: LinearHandler.h:193
const double eTol_
Tolerance.
Definition: LinearHandler.h:196
void setPreOptPurgeCons(bool val)
If True, purge redundant constraints.
Definition: LinearHandler.h:151
void separate(ConstSolutionPtr sol, NodePtr node, RelaxationPtr rel, CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods, bool *sol_found, SeparationStatus *status)
Definition: LinearHandler.cpp:208
ProblemPtr problem_
The problem for which the handler was created.
Definition: LinearHandler.h:180
~LinearHandler()
Destroy.
Definition: LinearHandler.cpp:97
virtual Branches getBranches(BrCandPtr, DoubleVector &, RelaxationPtr, SolutionPoolPtr)
Does nothing.
Definition: LinearHandler.h:117
void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition: LinearHandler.cpp:1495
LoggerPtr logger_
Log.
Definition: LinearHandler.h:183
virtual void getBranchingCandidates(RelaxationPtr, const DoubleVector &, ModVector &, BrVarCandSet &, BrCandVector &, bool &)
Does nothing.
Definition: LinearHandler.h:105
VarQueue linVars_
Definition: LinearHandler.h:211
virtual bool presolveNode(RelaxationPtr p, NodePtr node, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods)
Presolve the problem and its relaxation at a node.
Definition: LinearHandler.cpp:1670
void tightenInts_(ProblemPtr p, bool apply_to_prob, bool *changed, ModQ *mods)
Round the bounds.
Definition: LinearHandler.cpp:407
bool isNeeded()
Return true if this handler is needed for the problem.
Definition: LinearHandler.h:92
void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing full node relaxations.
Definition: LinearHandler.cpp:1489
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create a relaxation for a node, building from scratch.
Definition: LinearHandler.cpp:1500
void changeBFlag_(VariablePtr v)
change constraints flag for presolve
Definition: LinearHandler.cpp:1320
const double intTol_
Tolerance for checking integrality.
Definition: LinearHandler.h:190
virtual std::string getName() const
Return the name of the handler.
Definition: LinearHandler.cpp:1852
void writeStats(std::ostream &out) const
Write statistics to ostream out.
Definition: LinearHandler.cpp:1847
void setPreOptMaxIters(int val)
Maximum number of iterations.
Definition: LinearHandler.h:139
LinPresolveStats * pStats_
Statistics of presolve.
Definition: LinearHandler.h:202
void simplePresolve(ProblemPtr p, SolutionPoolPtr spool, ModVector &t_mods, SolveStatus &status)
Definition: LinearHandler.cpp:1682
EnvPtr env_
Environment.
Definition: LinearHandler.h:177
LinearHandler()
Default constructor.
Definition: LinearHandler.cpp:52
void writePreStats(std::ostream &out) const
Write the presolve statistics.
Definition: LinearHandler.cpp:1818
const double infty_
Infinity. Bounds beyond this number are treated as infinity.
Definition: LinearHandler.h:199
const LinPresolveOpts * getOpts() const
Return a constant pointer to the presolve options.
Definition: LinearHandler.cpp:1747
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create an incremental relaxation for a node.
Definition: LinearHandler.cpp:1505
LinPresolveOpts * pOpts_
Options for presolve.
Definition: LinearHandler.h:205
virtual ModificationPtr getBrMod(BrCandPtr, DoubleVector &, RelaxationPtr, BranchDirection)
Does nothing.
Definition: LinearHandler.h:110
static const std::string me_
For log.
Definition: LinearHandler.h:214
bool isFeasible(ConstSolutionPtr, RelaxationPtr, bool &, double &)
Definition: LinearHandler.h:87
void chkSing_(bool *changed)
Find variables that appear in exactly one constraint in linear form and do not appear in objective....
Definition: LinearHandler.cpp:356
void setPreOptPurgeVars(bool val)
If True, purge fixed variables.
Definition: LinearHandler.h:145
void relax_(ProblemPtr p, RelaxationPtr rel, bool *is_inf)
Common routine for building relaxation by copying all the linear constraints and variable-bounds from...
Definition: LinearHandler.cpp:1433
Definition: Modification.h:29
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Definition: Variable.h:31
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
Options for presolve.
Definition: LinearHandler.h:39
bool purgeCons
If True, purge fixed variables.
Definition: LinearHandler.h:48
bool dualFix
If True, purge redundant constraints.
Definition: LinearHandler.h:50
bool showStats
True if presolve is enabled, false otherwise.
Definition: LinearHandler.h:42
bool coeffImp
If True, do dual cost fixing.
Definition: LinearHandler.h:52
int maxIters
True if stats are displayed, false otherwise.
Definition: LinearHandler.h:44
bool purgeVars
Maximum number of iterations.
Definition: LinearHandler.h:46
Store statistics of presolving.
Definition: LinearHandler.h:23
int conDel
Number of variables marked for deletion.
Definition: LinearHandler.h:28
double timeN
Total time used in initial presolve.
Definition: LinearHandler.h:26
int nMods
No. of times a binary var. was changed to implied binary.
Definition: LinearHandler.h:35
int cImp
Number of times constraint-bounds were tightened.
Definition: LinearHandler.h:33
int cBnd
Number of times variable-bounds were tightened.
Definition: LinearHandler.h:32
int bImpl
Number of times coefficient in a constraint was improved.
Definition: LinearHandler.h:34
int var2Bin
Number of constraints marked for deletion.
Definition: LinearHandler.h:29
int var2Int
Number of variables converted to binary.
Definition: LinearHandler.h:30
int varDel
Total time used in presolveNode.
Definition: LinearHandler.h:27
double time
Number of iterations (main cycle).
Definition: LinearHandler.h:25
int vBnd
Number of variables converted to integers.
Definition: LinearHandler.h:31