56class KuratowskiWrapper;
58namespace cluster_planarity {
90 <<
"\tReturn=" << (ret ?
"(error)" :
"(ok)") <<
"\n";
104 while (v != parent[v]) {
120 return pricingRealO(0.001);
131 int pricingReal(
double minViolate);
135 Logger::slout() <<
"\tSeparate (minViolate=" << minViolate <<
")..";
141 inline int pricingRealO(
double minViolate) {
142 Logger::slout() <<
"\tPricing (minViolate=" << minViolate <<
")..";
143 int r = pricingReal(minViolate);
176 virtual int improve(
double& primalValue)
override;
189 double minViolation) {
213 for (
int i = num; i-- > 0;) {
282 void minimumSpanningTree(
287 void recursiveMinimumSpanningTree(
294 double heuristicImprovePrimalBoundDet(
Declaration and implementation of ArrayBuffer class.
Derived class of GraphObserver providing additional functionality to handle clustered graphs.
Includes declaration of graph class.
Declaration of doubly linked lists and iterators.
Contains logging functionality.
Declaration of the master class for the Branch&Cut algorithm for the Maximum C-Planar SubGraph proble...
Declaration of singly linked lists and iterators.
Basic declarations, included by all source files.
Abstract base class for all branching rules.
The master of the optimization.
BranchRule * branchRule() const
Returns a pointer to the branching rule of the subproblem.
int id() const
Returns the identity number of the subproblem.
Variable * variable(int i) const
Returns a pointer to the i-th active variable.
virtual int optimize()
Performs the optimization of the subproblem.
virtual int addCons(ArrayBuffer< Constraint * > &constraints, Pool< Constraint, Variable > *pool=nullptr, ArrayBuffer< bool > *keepInPool=nullptr, ArrayBuffer< double > *rank=nullptr)
Tries to add new constraints to the constraint buffer and a pool.
double dualBound() const
Returns a bound which is "better" than the optimal solution of the subproblem w.r....
virtual int constraintPoolSeparation(int ranking=0, Pool< Constraint, Variable > *pool=nullptr, double minViolation=0.001)
Tries to generate inactive constraints from a pool.
Master * master_
A pointer to the corresponding master of the optimization.
virtual bool removeNonLiftableCons()
virtual int addVars(ArrayBuffer< Variable * > &variables, Pool< Variable, Constraint > *pool=nullptr, ArrayBuffer< bool > *keepInPool=nullptr, ArrayBuffer< double > *rank=nullptr)
Tries to add new variables to the variable buffer and a pool.
const Sub * father() const
Returns a pointer to the father of the subproblem in the branch-and-bound tree.
An array that keeps track of the number of inserted elements; also usable as an efficient stack.
void push(E e)
Puts a new element in the buffer.
INDEX size() const
Returns number of elements in the buffer.
RegisteredArray for labeling the clusters of a ClusterGraph.
Representation of clusters in a clustered graph.
Representation of clustered graphs.
Copies of graphs supporting edge splitting.
Doubly linked lists (maintaining the length of the list).
static std::ostream & slout(Level level=Level::Default)
stream for logging-output (global)
Class for the representation of nodes.
Encapsulates a pointer to an ogdf::SList element.
virtual int makeFeasible() override
The default implementation of makeFeasible()does nothing.
MaxCPlanarSub(abacus::Master *master, abacus::Sub *father, abacus::BranchRule *branchRule, List< abacus::Constraint * > &criticalConstraints)
MaxCPlanarMaster * master() const
int getArrayIndex(double lpValue)
int separateConnPool(double minViolation)
virtual int optimize() override
Performs the optimization of the subproblem.
virtual int selectBranchingVariableCandidates(ArrayBuffer< int > &candidates) override
Selects candidates for branching variables.
bool detectedInfeasibility
double heuristicImprovePrimalBound(List< NodePair > &originalEdges, List< NodePair > &connectionEdges, List< edge > &deletedEdges)
virtual abacus::Sub * generateSon(abacus::BranchRule *rule) override
Returns a pointer to an object of a problem specific subproblem, which is generated from the current ...
void myAddVars(ArrayBuffer< abacus::Variable * > &b)
virtual int solveLp() override
Solves the LP-relaxation of the subproblem.
double subdivisionLefthandSide(SListConstIterator< KuratowskiWrapper > it, GraphCopy *gc)
void connectivitySupportGraph(GraphCopy &support, EdgeArray< double > &weight)
int clusterBags(ClusterGraph &CG, cluster c)
void intSolutionInducedGraph(GraphCopy &support)
void kuratowskiSupportGraph(GraphCopy &support, double low, double high)
int addPoolCons(ArrayBuffer< abacus::Constraint * > &cons, abacus::StandardPool< abacus::Constraint, abacus::Variable > *pool)
Adds the given constraints to the given pool.
bool checkCConnectivity(const GraphCopy &support)
Checks if the cluster induced graphs and their complement are connected in the current solution.
virtual bool feasible() override
Must check the feasibility of a solution of the LP-relaxation.
virtual int improve(double &primalValue) override
Can be redefined in order to implement primal heuristics for finding feasible solutions.
int addCutCons(ArrayBuffer< abacus::Constraint * > cons)
Adds the given constraints to the connectivity cut pool.
List< abacus::Constraint * > criticalSinceBranching
int addKuraCons(ArrayBuffer< abacus::Constraint * > cons)
Adds the given constraints to the planarity cut pool.
virtual int separate() override
Must be redefined in derived classes for the generation of cutting planes.
node getRepresentative(node v, NodeArray< node > &parent)
run through the pointer list parent and return the representative i.e. the node with parent[v] == v
int createVariablesForBufferedConstraints()
void clusterSpanningTree(ClusterGraph &C, cluster c, ClusterArray< List< NodePair > > &treeEdges, ClusterArray< List< edgeValue > > &clusterEdges)
virtual int selectBranchingVariable(int &variable) override
Chooses a branching variable.
void childClusterSpanningTree(GraphCopy &GC, List< edgeValue > &clusterEdges, List< NodePair > &MSTEdges)
int separateRealO(double minViolate)
MaxCPlanarSub(abacus::Master *master)
int separateReal(double minViolate)
these functions are mainly reporting to let abacus think everthing is normal.
bool checkCConnectivityOld(const GraphCopy &support)
ArrayBuffer< abacus::Constraint * > bufferedForCreation
int separateKuraPool(double minViolation)
int separateCutPool(abacus::StandardPool< abacus::Constraint, abacus::Variable > *pool, double minViolation)
virtual int pricing() override
Should generate inactive variables which do not price out correctly.
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
RegisteredArray for nodes, edges and adjEntries of a graph.
#define OGDF_ASSERT(expr)
Assert condition expr. See doc/build.md for more information.
The namespace for all OGDF objects.