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
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 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