15#ifndef MINOTAURPERSPCUTHANDLER_H
16#define MINOTAURPERSPCUTHANDLER_H
26 class PerspCutHandler;
27 typedef PerspCutHandler* PerspCutHandlerPtr;
28 typedef const PerspCutHandler* ConstPerspCutHandlerPtr;
55 const DoubleVector &, ModVector &,
56 BrVarCandSet &, BrCandVector &,
73 ModVector &) {
return false;};
90 ModVector &p_mods, ModVector &r_mods,
bool *sol_found,
120 double *c,
int *error);
176 void bisecPt(
const double *x,
double * y,
UInt it);
199 void prVars(
const double *x,
double *y,
UInt itn,
int *error);
237 static const std::string me_;
240 std::vector<ConstraintPtr> cons_;
243 std::vector<ConstraintPtr> prcons_;
246 std::vector<VariablePtr> binvar_;
249 std::vector<int> sType_;
253 std::vector<VariableGroup> nviv_;
257 std::vector<VariableGroup> lviv_;
Get information about a Function.
Define abstract base class for handlers of various kinds.
Declare the class LinearFunction for storing and modifying a linear function.
Declare a base class PerspCon for identifying structures amenable to perspective reformulation (PR) (...
Declare the base class Modification.
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
Definition: Function.h:37
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: Modification.h:29
Definition: PerspCutHandler.h:36
void atPtx(RelaxationPtr rel, const double *x)
Definition: PerspCutHandler.cpp:394
void prVars(const double *x, double *y, UInt itn, int *error)
Generate variables for PR reformulation.
Definition: PerspCutHandler.cpp:259
SolveStatus presolve(PreModQ *, bool *, Solution **sol)
Does nothing.
Definition: PerspCutHandler.h:68
void atIntPt(RelaxationPtr rel, const double *nlpx, const double *lpx, SeparationStatus *pcStatus, CutManager *)
Definition: PerspCutHandler.cpp:361
void relaxInitInc(RelaxationPtr, bool *)
Does nothing.
Definition: PerspCutHandler.h:79
virtual void getBranchingCandidates(RelaxationPtr, const DoubleVector &, ModVector &, BrVarCandSet &, BrCandVector &, bool &)
find branching candidates.
Definition: PerspCutHandler.h:54
virtual ModificationPtr getBrMod(BrCandPtr, DoubleVector &, RelaxationPtr, BranchDirection)
Does nothing.
Definition: PerspCutHandler.h:60
void oriFeasPt(RelaxationPtr rel, const double *x)
Iterate over PR amenable constraints to add PCut;.
Definition: PerspCutHandler.cpp:419
void getCutFun(RelaxationPtr rel, LinearFunctionPtr *lf, UInt it, const double *x, double *c, int *error)
Definition: PerspCutHandler.cpp:473
void relaxNodeFull(NodePtr, RelaxationPtr, bool *)
Does nothing.
Definition: PerspCutHandler.h:82
PerspCutHandler()
Default constructor.
Definition: PerspCutHandler.cpp:42
std::string getName() const
Returns name of the handler.
Definition: PerspCutHandler.cpp:575
void separate(ConstSolutionPtr sol, NodePtr node, RelaxationPtr rel, CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods, bool *sol_found, SeparationStatus *status)
Separates current solution.
Definition: PerspCutHandler.cpp:556
void relaxNodeInc(NodePtr, RelaxationPtr, bool *)
Does nothing.
Definition: PerspCutHandler.h:85
std::vector< ConstraintPtr > getPRCons()
Return vector of perspective amenable constraint.
Definition: PerspCutHandler.h:188
void addCutToRel(RelaxationPtr rel, LinearFunctionPtr lf, double c)
Add PCut torelaxation.
Definition: PerspCutHandler.cpp:492
virtual Branches getBranches(BrCandPtr, DoubleVector &, RelaxationPtr, SolutionPoolPtr)
Does nothing.
Definition: PerspCutHandler.h:49
bool getStatus()
Return 1 if there are PR amenable constraints in the problem.
Definition: PerspCutHandler.cpp:84
bool isFeasible(ConstSolutionPtr, RelaxationPtr, bool &, double &)
Check feasibility of PR amenable constraints at the given solution.
Definition: PerspCutHandler.cpp:193
virtual bool presolveNode(RelaxationPtr, NodePtr, SolutionPoolPtr, ModVector &, ModVector &)
Does nothing.
Definition: PerspCutHandler.h:71
void relaxInitFull(RelaxationPtr, bool *)
Does nothing.
Definition: PerspCutHandler.h:76
void linearAt(RelaxationPtr rel, FunctionPtr f, double fval, const double *x, double *c, LinearFunctionPtr *lf, int *error)
Definition: PerspCutHandler.cpp:333
void bisecPt(const double *x, double *y, UInt it)
Definition: PerspCutHandler.cpp:506
void writeStats(std::ostream &out) const
Writes statistics.
Definition: PerspCutHandler.cpp:563
~PerspCutHandler()
Destructor.
Definition: PerspCutHandler.cpp:582
void addCut(RelaxationPtr rel, const double *nlpx, const double *lpx, UInt it, SeparationStatus *pcStatus)
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
Definition: PerspCutGenerator.h:31
size_t cuts
Number of points infeasible to original constraint.
Definition: PerspCutGenerator.h:34
size_t infPt
Number of points feasible to original nonlinear constraint but not the PR constraint.
Definition: PerspCutGenerator.h:33