Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

ILPClusterPlanarity.h
Go to the documentation of this file.
1 
33 #pragma once
34 
35 #include <ogdf/basic/Module.h>
36 #include <ogdf/basic/Timeouter.h>
40 
41 #include <ogdf/external/abacus.h>
42 
43 namespace ogdf {
44 
46 
50 public:
53 
57  enum class solmeth { Fallback, New };
58 
61  : m_heuristicLevel(1)
62  , m_heuristicRuns(1)
63  , m_heuristicOEdgeBound(0.4)
64  , m_heuristicNPermLists(5)
65  , m_kuratowskiIterations(10)
66  , m_subdivisions(10)
67  , m_kSupportGraphs(10)
68  , m_kuratowskiHigh(0.8)
69  , m_kuratowskiLow(0.8)
70  , m_perturbation(false)
71  , m_branchingGap(0.4)
72  , m_time("00:20:00")
73  , m_pricing(false)
74  , m_numAddVariables(15)
75  , m_strongConstraintViolation(0.3)
76  , m_strongVariableViolation(0.3)
77  , m_solmeth(solmeth::New)
78  , m_optStatus(abacus::Master::STATUS::Unprocessed)
79  , m_totalTime(-1.0)
80  , m_heurTime(-1.0)
81  , m_lpTime(-1.0)
82  , m_lpSolverTime(-1.0)
83  , m_sepTime(-1.0)
84  , m_totalWTime(-1.0)
85  , m_numCCons(-1)
86  , m_numKCons(-1)
87  , m_numLPs(-1)
88  , m_numBCs(-1)
89  , m_numSubSelected(-1)
90  , m_numVars(-1)
91  , m_portaOutput(false)
92  , m_defaultCutPool(true)
93 #ifdef OGDF_DEBUG
94  , m_solByHeuristic(false)
95 #endif
96  {
97  }
98 
99  //destruction
101 
104  bool isClusterPlanar(const ClusterGraph& CG, NodePairs& addedEdges);
105 
107  bool isClusterPlanar(const ClusterGraph& CG) override;
108 
110  return isClusterPlanar(CG);
111  }
112 
113  bool clusterPlanarEmbedClusterPlanarGraph(ClusterGraph& CG, Graph& G) override;
114 
115  //setter methods for the module parameters
116  void setHeuristicLevel(int i) { m_heuristicLevel = i; }
117 
118  void setHeuristicRuns(int i) { m_heuristicRuns = i; }
119 
120  void setHeuristicBound(double d) { m_heuristicOEdgeBound = d; }
121 
122  void setNumberOfPermutations(int i) { m_heuristicNPermLists = i; }
123 
124  void setNumberOfKuraIterations(int i) { m_kuratowskiIterations = i; }
125 
126  void setNumberOfSubDivisions(int i) { m_subdivisions = i; }
127 
128  void setNumberOfSupportGraphs(int i) { m_kSupportGraphs = i; }
129 
130  void setUpperRounding(double d) { m_kuratowskiHigh = d; }
131 
132  void setLowerRounding(double d) { m_kuratowskiLow = d; }
133 
134  void setPerturbation(bool b) { m_perturbation = b; }
135 
136  void setBranchingGap(double d) { m_branchingGap = d; }
137 
138  void setTimeLimit(string s) { m_time = s.c_str(); }
139 
140  void setPortaOutput(bool b) { m_portaOutput = b; }
141 
142  void setPricing(bool b) { m_pricing = b; }
143 
144  void setNumAddVariables(int n) { m_numAddVariables = n; }
145 
146  void setStrongConstraintViolation(double d) { m_strongConstraintViolation = d; }
147 
148  void setStrongVariableViolation(double d) { m_strongVariableViolation = d; }
149 
152  bool& useDefaultCutPool() { return m_defaultCutPool; }
153 
154  //getter methods for results
155  abacus::Master::STATUS getOptStatus() { return m_optStatus; }
156 
157  double getTotalTime() { return m_totalTime; }
158 
159  double getHeurTime() { return m_heurTime; }
160 
161  double getLPTime() { return m_lpTime; }
162 
163  double getLPSolverTime() { return m_lpSolverTime; }
164 
165  double getSeparationTime() { return m_sepTime; }
166 
167  double getTotalWTime() { return m_totalWTime; }
168 
170  int getNumCCons() { return m_numCCons; }
171 
173  int getNumKCons() { return m_numKCons; }
174 
176  int getNumLPs() { return m_numLPs; }
177 
179  int getNumBCs() { return m_numBCs; }
180 
182  int getNumSubSelected() { return m_numSubSelected; }
183 
185  int getNumVars() { return m_numVars; }
186 
188  void writeFeasible(const char* filename, CP_MasterBase& master, abacus::Master::STATUS& status);
189 #ifdef OGDF_DEBUG
190  bool getSolByHeuristic() { return m_solByHeuristic; }
191 #endif
192 
193  solmeth& solutionMethod() { return m_solmeth; }
194 
195 protected:
196  // Performs a c-planarity test on CG.
197  bool doTest(const ClusterGraph& CG);
198 
199  //as above, on success also returns the set of edges that were
200  //added to construct a completely connected planar graph.
201  bool doTest(const ClusterGraph& G, NodePairs& addedEdges);
202 
203  // Performs a c-planarity test using only a reduced set
204  // of allowed extension edges, returns c-planarity status
205 #if 0
206  virtual bool doFastTest(const ClusterGraph &G);
207 #endif
208 
209  double getDoubleTime(const Stopwatch& act) {
210  int64_t tempo = act.centiSeconds() + 100 * act.seconds() + 6000 * act.minutes()
211  + 360000 * act.hours();
212  return ((double)tempo) / 100.0;
213  }
214 
216  void getBottomUpClusterList(const cluster c, List<cluster>& theList);
217 
218 private:
219  //Abacus Master class settings in order of appearance
220  int m_heuristicLevel, m_heuristicRuns;
222  int m_heuristicNPermLists, m_kuratowskiIterations;
223  int m_subdivisions, m_kSupportGraphs;
224  double m_kuratowskiHigh, m_kuratowskiLow;
227  string m_time;
228  bool m_pricing; //<! Decides if pricing is used
232 
234 
235  const char* getPortaFileName() { return "porta.poi"; }
236 
237  const char* getIeqFileName() { return "porta.ieq"; }
238 
239  int maxConLength() { return 1024; }
240 
241  void outputCons(std::ofstream& os,
244 
245  //results
246  abacus::Master::STATUS m_optStatus; //<! Status of optimization, returned from abacus
247  double m_totalTime; //<! Total computation time, returned from abacus
248  double m_heurTime; //<! Time spent in heuristic, returned from abacus
249  double m_lpTime; //<! Cpu time spent in members of the LP-interface, returned from abacus
250  double m_lpSolverTime; //<! Cpu time required by the LP solver, returned from abacus
251  double m_sepTime; //<! Cpu time spent in the separation of cutting planes, returned from abacus
252  double m_totalWTime; //<! Total wall clock time, returned from abacus
253  int m_numCCons; //<! Number of added connectivity constraints
254  int m_numKCons; //<! Number of added kuratowski constraints
255  int m_numLPs; //<! The number of optimized linear programs (LP-relax.).
256  int m_numBCs; //<! The number of generated subproblems.
257  int m_numSubSelected; //<! The number of subproblems selected by ABACUS.
258  int m_numVars; //<! The number of global variables.
259  bool m_portaOutput; //<! If set to true, output for PORTA in ieq format is generated.
260  bool m_defaultCutPool; //<! Passed through to master
261 #ifdef OGDF_DEBUG
263 #endif
264 };
265 
266 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::ILPClusterPlanarity::getDoubleTime
double getDoubleTime(const Stopwatch &act)
Definition: ILPClusterPlanarity.h:209
ogdf::ILPClusterPlanarity::setPerturbation
void setPerturbation(bool b)
Definition: ILPClusterPlanarity.h:134
ogdf::ILPClusterPlanarity::m_kuratowskiIterations
int m_kuratowskiIterations
Definition: ILPClusterPlanarity.h:222
ogdf::ILPClusterPlanarity::getNumKCons
int getNumKCons()
Returns number of Kuratowski constraints added during computation.
Definition: ILPClusterPlanarity.h:173
ogdf::ILPClusterPlanarity::m_branchingGap
double m_branchingGap
Definition: ILPClusterPlanarity.h:226
abacus.h
Includes Abacus.
ogdf::ILPClusterPlanarity::m_defaultCutPool
bool m_defaultCutPool
Definition: ILPClusterPlanarity.h:260
ClusterPlanarityModule.h
Declaration of ClusterPlanarityModule which implements a cluster-planarity test and,...
ogdf::ILPClusterPlanarity::m_lpSolverTime
double m_lpSolverTime
Definition: ILPClusterPlanarity.h:250
abacus::Master::STATUS
STATUS
The various statuses of the optimization process.
Definition: master.h:77
ogdf::ILPClusterPlanarity::m_optStatus
abacus::Master::STATUS m_optStatus
Definition: ILPClusterPlanarity.h:246
ogdf::ILPClusterPlanarity::getSeparationTime
double getSeparationTime()
Definition: ILPClusterPlanarity.h:165
ogdf::ILPClusterPlanarity::getNumCCons
int getNumCCons()
Returns number of connectivity constraints added during computation.
Definition: ILPClusterPlanarity.h:170
ogdf::ILPClusterPlanarity::maxConLength
int maxConLength()
Definition: ILPClusterPlanarity.h:239
ogdf::ILPClusterPlanarity::setTimeLimit
void setTimeLimit(string s)
Definition: ILPClusterPlanarity.h:138
ogdf::ILPClusterPlanarity::getHeurTime
double getHeurTime()
Definition: ILPClusterPlanarity.h:159
ogdf::ILPClusterPlanarity::m_heuristicOEdgeBound
double m_heuristicOEdgeBound
Definition: ILPClusterPlanarity.h:221
ogdf::ILPClusterPlanarity::getIeqFileName
const char * getIeqFileName()
Definition: ILPClusterPlanarity.h:237
CPlanarityMaster.h
Declaration of the CPlanarityMaster class for the Branch&Cut algorithm for c-planarity testing via an...
abacus
Definition: abacusroot.h:48
ogdf::ILPClusterPlanarity::setNumAddVariables
void setNumAddVariables(int n)
Definition: ILPClusterPlanarity.h:144
ogdf::ILPClusterPlanarity::useDefaultCutPool
bool & useDefaultCutPool()
Use default abacus master cut pool or dedicated connectivity and kuratowski cut pools.
Definition: ILPClusterPlanarity.h:152
ogdf::ILPClusterPlanarity::solmeth
solmeth
Solution method, fallback to old version (allowing all extension edges, based on c-planar subgraph co...
Definition: ILPClusterPlanarity.h:57
ogdf::ILPClusterPlanarity::m_time
string m_time
Definition: ILPClusterPlanarity.h:227
ogdf::ILPClusterPlanarity::m_numKCons
int m_numKCons
Definition: ILPClusterPlanarity.h:254
ogdf::ILPClusterPlanarity::getLPSolverTime
double getLPSolverTime()
Definition: ILPClusterPlanarity.h:163
ogdf::ILPClusterPlanarity::m_perturbation
bool m_perturbation
Definition: ILPClusterPlanarity.h:225
ogdf::ILPClusterPlanarity::setUpperRounding
void setUpperRounding(double d)
Definition: ILPClusterPlanarity.h:130
ogdf::Stopwatch::hours
int64_t hours() const
Returns the currently elapsed time in hours.
Definition: Stopwatch.h:123
Timeouter.h
Declares base class for modules with timeout functionality.
ogdf::ILPClusterPlanarity::setStrongVariableViolation
void setStrongVariableViolation(double d)
Definition: ILPClusterPlanarity.h:148
abacus::StandardPool< abacus::Constraint, abacus::Variable >
ogdf::ClusterElement
Representation of clusters in a clustered graph.
Definition: ClusterGraph.h:55
ogdf::ILPClusterPlanarity::m_heurTime
double m_heurTime
Definition: ILPClusterPlanarity.h:248
ogdf::Stopwatch::seconds
int64_t seconds() const
Returns the currently elapsed time in seconds.
Definition: Stopwatch.h:109
ogdf::ILPClusterPlanarity::getLPTime
double getLPTime()
Definition: ILPClusterPlanarity.h:161
ogdf::ILPClusterPlanarity::setHeuristicBound
void setHeuristicBound(double d)
Definition: ILPClusterPlanarity.h:120
ogdf::ILPClusterPlanarity::m_portaOutput
bool m_portaOutput
Definition: ILPClusterPlanarity.h:259
ogdf::ILPClusterPlanarity::setPortaOutput
void setPortaOutput(bool b)
Definition: ILPClusterPlanarity.h:140
ogdf::ILPClusterPlanarity::m_lpTime
double m_lpTime
Definition: ILPClusterPlanarity.h:249
ogdf::ILPClusterPlanarity::getPortaFileName
const char * getPortaFileName()
Definition: ILPClusterPlanarity.h:235
ogdf::ILPClusterPlanarity::m_kuratowskiLow
double m_kuratowskiLow
Definition: ILPClusterPlanarity.h:224
ogdf::ILPClusterPlanarity::setStrongConstraintViolation
void setStrongConstraintViolation(double d)
Definition: ILPClusterPlanarity.h:146
ogdf::Stopwatch::minutes
int64_t minutes() const
Returns the currently elapsed time in minutes.
Definition: Stopwatch.h:116
ogdf::ILPClusterPlanarity::m_pricing
bool m_pricing
Definition: ILPClusterPlanarity.h:228
ogdf::ILPClusterPlanarity::setNumberOfSubDivisions
void setNumberOfSubDivisions(int i)
Definition: ILPClusterPlanarity.h:126
ogdf::Stopwatch::centiSeconds
int64_t centiSeconds() const
Returns the currently elapsed time in 1/100-seconds.
Definition: Stopwatch.h:102
ogdf::ILPClusterPlanarity::ILPClusterPlanarity
ILPClusterPlanarity()
Construction.
Definition: ILPClusterPlanarity.h:60
ogdf::List
Doubly linked lists (maintaining the length of the list).
Definition: List.h:42
ogdf::ILPClusterPlanarity::m_strongVariableViolation
double m_strongVariableViolation
Definition: ILPClusterPlanarity.h:231
ogdf::Graph
Data type for general directed graphs (adjacency list representation).
Definition: Graph_d.h:862
ogdf::ILPClusterPlanarity::getOptStatus
abacus::Master::STATUS getOptStatus()
Definition: ILPClusterPlanarity.h:155
ogdf::ILPClusterPlanarity::setNumberOfPermutations
void setNumberOfPermutations(int i)
Definition: ILPClusterPlanarity.h:122
ogdf::ILPClusterPlanarity::setNumberOfKuraIterations
void setNumberOfKuraIterations(int i)
Definition: ILPClusterPlanarity.h:124
ogdf::ILPClusterPlanarity::m_numCCons
int m_numCCons
Definition: ILPClusterPlanarity.h:253
ogdf::ILPClusterPlanarity::m_totalWTime
double m_totalWTime
Definition: ILPClusterPlanarity.h:252
ogdf::ILPClusterPlanarity::m_numLPs
int m_numLPs
Definition: ILPClusterPlanarity.h:255
ogdf::ILPClusterPlanarity::m_heuristicRuns
int m_heuristicRuns
Definition: ILPClusterPlanarity.h:220
ogdf::ILPClusterPlanarity::getNumSubSelected
int getNumSubSelected()
Returns number of subproblems selected by ABACUS.
Definition: ILPClusterPlanarity.h:182
ogdf::ILPClusterPlanarity::m_subdivisions
int m_subdivisions
Definition: ILPClusterPlanarity.h:223
ogdf::ILPClusterPlanarity::setHeuristicRuns
void setHeuristicRuns(int i)
Definition: ILPClusterPlanarity.h:118
ogdf::ILPClusterPlanarity::m_sepTime
double m_sepTime
Definition: ILPClusterPlanarity.h:251
ogdf::cluster_planarity::CP_MasterBase
Definition: CP_MasterBase.h:47
ogdf::ILPClusterPlanarity::getTotalTime
double getTotalTime()
Definition: ILPClusterPlanarity.h:157
ogdf::ILPClusterPlanarity::getSolByHeuristic
bool getSolByHeuristic()
Definition: ILPClusterPlanarity.h:190
ogdf::ILPClusterPlanarity
C-planarity testing via completely connected graph extension.
Definition: ILPClusterPlanarity.h:49
ogdf::ILPClusterPlanarity::getNumBCs
int getNumBCs()
Returns number of generated LPs.
Definition: ILPClusterPlanarity.h:179
ogdf::ILPClusterPlanarity::m_numVars
int m_numVars
Definition: ILPClusterPlanarity.h:258
ogdf::ILPClusterPlanarity::setLowerRounding
void setLowerRounding(double d)
Definition: ILPClusterPlanarity.h:132
ogdf::ILPClusterPlanarity::solutionMethod
solmeth & solutionMethod()
Definition: ILPClusterPlanarity.h:193
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::Stopwatch
Realizes a stopwatch for measuring elapsed time.
Definition: Stopwatch.h:42
ogdf::ILPClusterPlanarity::setPricing
void setPricing(bool b)
Definition: ILPClusterPlanarity.h:142
ogdf::ILPClusterPlanarity::m_solByHeuristic
bool m_solByHeuristic
Definition: ILPClusterPlanarity.h:262
ClusterGraph.h
Derived class of GraphObserver providing additional functionality to handle clustered graphs.
ogdf::ILPClusterPlanarity::setBranchingGap
void setBranchingGap(double d)
Definition: ILPClusterPlanarity.h:136
ogdf::ILPClusterPlanarity::m_numAddVariables
int m_numAddVariables
Definition: ILPClusterPlanarity.h:229
ogdf::ILPClusterPlanarity::isClusterPlanarDestructive
bool isClusterPlanarDestructive(ClusterGraph &CG, Graph &G) override
Returns true, if CG is cluster-planar, false otherwise. In it is non-cluster-planar,...
Definition: ILPClusterPlanarity.h:109
ogdf::ILPClusterPlanarity::getNumVars
int getNumVars()
Returns number of global variables. Todo: Real number from ABACUS.
Definition: ILPClusterPlanarity.h:185
ogdf::ILPClusterPlanarity::m_numSubSelected
int m_numSubSelected
Definition: ILPClusterPlanarity.h:257
ogdf::ILPClusterPlanarity::getTotalWTime
double getTotalWTime()
Definition: ILPClusterPlanarity.h:167
Module.h
Declares base class for all module types.
ogdf::ILPClusterPlanarity::getNumLPs
int getNumLPs()
Returns number of optimized LPs (only LP-relaxations)
Definition: ILPClusterPlanarity.h:176
ogdf::ILPClusterPlanarity::setHeuristicLevel
void setHeuristicLevel(int i)
Definition: ILPClusterPlanarity.h:116
ogdf::ILPClusterPlanarity::m_numBCs
int m_numBCs
Definition: ILPClusterPlanarity.h:256
ogdf::ILPClusterPlanarity::~ILPClusterPlanarity
~ILPClusterPlanarity()
Definition: ILPClusterPlanarity.h:100
ogdf::ClusterGraph
Representation of clustered graphs.
Definition: ClusterGraph.h:339
ogdf::ILPClusterPlanarity::m_solmeth
solmeth m_solmeth
Solution method, see description of solmeth.
Definition: ILPClusterPlanarity.h:233
ogdf::ClusterPlanarityModule
Definition: ClusterPlanarityModule.h:41
ogdf::ILPClusterPlanarity::m_strongConstraintViolation
double m_strongConstraintViolation
Definition: ILPClusterPlanarity.h:230
ogdf::ILPClusterPlanarity::setNumberOfSupportGraphs
void setNumberOfSupportGraphs(int i)
Definition: ILPClusterPlanarity.h:128
ogdf::ILPClusterPlanarity::m_totalTime
double m_totalTime
Definition: ILPClusterPlanarity.h:247