From 00ce484c5875cbabaf633855db202cb2571c333b Mon Sep 17 00:00:00 2001 From: Richard Wong Date: Mon, 5 Feb 2024 11:02:44 +0900 Subject: [PATCH] build: added makefile for deferred_planarity_test --- .gitignore | 6 +- deferred_planarity_test/{ => include}/mps.h | 0 deferred_planarity_test/makefile | 34 +++++++++ deferred_planarity_test/{ => src}/main.cpp | 10 +-- deferred_planarity_test/{ => src}/mps.cpp | 2 +- .../{ => src}/mps_test.cpp | 2 +- deferred_planarity_test/{ => src}/node.cpp | 0 make_planar/make_planar.cpp | 4 +- make_planar/ogdf_mps_exact.cpp | 74 +++++++++++++++++++ make_planar/ogdf_mps_simple.cpp | 68 +++++++++++++++++ 10 files changed, 191 insertions(+), 9 deletions(-) rename deferred_planarity_test/{ => include}/mps.h (100%) create mode 100644 deferred_planarity_test/makefile rename deferred_planarity_test/{ => src}/main.cpp (92%) rename deferred_planarity_test/{ => src}/mps.cpp (97%) rename deferred_planarity_test/{ => src}/mps_test.cpp (95%) rename deferred_planarity_test/{ => src}/node.cpp (100%) create mode 100644 make_planar/ogdf_mps_exact.cpp create mode 100644 make_planar/ogdf_mps_simple.cpp diff --git a/.gitignore b/.gitignore index 254131b..7cfc30d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,11 @@ .vscode -deferred_planarity_test/bin +deferred_planarity_test/build make_graphs/bin make_graphs/test_graphs make_planar/bin test_area dpt + +# remove build intermediate files +deferred_planarity_test/obj/ +deferred_planarity_test/bin/ diff --git a/deferred_planarity_test/mps.h b/deferred_planarity_test/include/mps.h similarity index 100% rename from deferred_planarity_test/mps.h rename to deferred_planarity_test/include/mps.h diff --git a/deferred_planarity_test/makefile b/deferred_planarity_test/makefile new file mode 100644 index 0000000..8a8fac8 --- /dev/null +++ b/deferred_planarity_test/makefile @@ -0,0 +1,34 @@ +SRC_DIR := src +OBJ_DIR := obj +BIN_DIR := bin + +TARGET := $(BIN_DIR)/dpt_planarizer +SRCS := $(wildcard $(SRC_DIR)/*.cpp) +OBJS := $(SRCS:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o) +DEPS := $(OBJS:.o=.d) + +# compiler and flags +CXX := g++ +CPPFLAGS := -Iinclude -MMD -MP +CXXFLAGS := -std=c++14 -Wall +LDFLAGS := -lOGDF + +build: $(TARGET) + +# build target executable +$(TARGET): $(OBJS) | $(BIN_DIR) + $(CXX) $^ -o $@ $(LDFLAGS) + +# compile source to object files +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ + +$(BIN_DIR) $(OBJ_DIR): + mkdir -p $@ + +# include dependency files +-include $(DEPS) + +.PHONY: clean +clean: + rm -r $(BIN_DIR) $(OBJ_DIR) diff --git a/deferred_planarity_test/main.cpp b/deferred_planarity_test/src/main.cpp similarity index 92% rename from deferred_planarity_test/main.cpp rename to deferred_planarity_test/src/main.cpp index affd72c..cce7b9d 100644 --- a/deferred_planarity_test/main.cpp +++ b/deferred_planarity_test/src/main.cpp @@ -13,6 +13,7 @@ #include #include +#define START_TEMP 100 using namespace std; @@ -39,20 +40,19 @@ vector sa_solve(string input_file, int k_max) { int e_new = 0; int delta = 0; // initialize terms - double temp = 100; + double temp; for (int k = 0; k < k_max; ++k) { - temp = temp_decay(k, k_max); + temp = START_TEMP * temp_decay(k, k_max); state_new = generate_mutated_post_order(input_file, state_old); e_new = compute_removed_edge_size(input_file, state_new); delta = e_new - e_old; if (std::exp( -(delta) / temp) > distribution(rng)) { - state_old = state_new; - e_old = e_new; + state_old = state_new; + e_old = e_new; } - // std::cout << "temp: " << temp << ", score: " << e_old << std::endl; } return state_old; diff --git a/deferred_planarity_test/mps.cpp b/deferred_planarity_test/src/mps.cpp similarity index 97% rename from deferred_planarity_test/mps.cpp rename to deferred_planarity_test/src/mps.cpp index 1f61ee8..ab5a1ce 100644 --- a/deferred_planarity_test/mps.cpp +++ b/deferred_planarity_test/src/mps.cpp @@ -4,7 +4,7 @@ #include "mps.h" -//Empty constructor +// constructor can be made empty maximal_planar_subgraph_finder::maximal_planar_subgraph_finder() {} //Destructor diff --git a/deferred_planarity_test/mps_test.cpp b/deferred_planarity_test/src/mps_test.cpp similarity index 95% rename from deferred_planarity_test/mps_test.cpp rename to deferred_planarity_test/src/mps_test.cpp index 7f0148d..fec6000 100644 --- a/deferred_planarity_test/mps_test.cpp +++ b/deferred_planarity_test/src/mps_test.cpp @@ -108,7 +108,7 @@ void maximal_planar_subgraph_finder::read_from_gml(string input_file) { -//Output a maximal planar subgraph in the same format as input. +// count the number of removed edges int maximal_planar_subgraph_finder::output_removed_edge_size() { int sum = 0; for (int i = 0; i < _back_edge_list.size(); ++i) { diff --git a/deferred_planarity_test/node.cpp b/deferred_planarity_test/src/node.cpp similarity index 100% rename from deferred_planarity_test/node.cpp rename to deferred_planarity_test/src/node.cpp diff --git a/make_planar/make_planar.cpp b/make_planar/make_planar.cpp index a78c93e..dd8adb7 100644 --- a/make_planar/make_planar.cpp +++ b/make_planar/make_planar.cpp @@ -302,9 +302,11 @@ int main(int argc, char* argv[]) std::cout << "Edges removed:" << delEdges->size() << std::endl; + + // delete removed edges for (edge e: *delEdges) { // print removed edges - std::cout << e->adjSource() << std::endl; + // std::cout << e->adjSource() << std::endl; G.delEdge(e); } diff --git a/make_planar/ogdf_mps_exact.cpp b/make_planar/ogdf_mps_exact.cpp new file mode 100644 index 0000000..5b72893 --- /dev/null +++ b/make_planar/ogdf_mps_exact.cpp @@ -0,0 +1,74 @@ +#include +#include +// #include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace ogdf; + + +int main(int argc, char* argv[]) +{ + + string inputFile = argv[1]; + Graph G; + + if (!GraphIO::read(G, inputFile, GraphIO::readGML)) { + std::cerr << "Could not read input.gml" << std::endl; + return 1; + } + + + NodeArray numbering(G); + int num = computeSTNumbering(G, numbering, nullptr, nullptr, true); + OGDF_ASSERT(num == G.numberOfNodes()); + + // print after input + // graphPrinter(G); + std::cout << "G Planarity: " << ogdf::isPlanar(G) << std::endl; + std::cout << "Original number of nodes: " << G.numberOfNodes() << std::endl; + std::cout << "Original number of edges: " << G.numberOfEdges() << std::endl; + + // separator for planarization + // <--------------> + + // PQ implementation to make planar subgraph + std::cout << "start planarization" << std::endl; + List *delEdges = new List; // empty list + + std::cout << "running maximum" << std::endl; + ogdf::MaximumPlanarSubgraph mps; + mps.call(G, *delEdges); + + + std::cout << "Edges removed:" << delEdges->size() << std::endl; + + + // delete removed edges + for (edge e: *delEdges) { + // print removed edges + // std::cout << e->adjSource() << std::endl; + G.delEdge(e); + } + + + // write processed graph to new gml file + // GraphIO::write(G, "output.gml", GraphIO::writeGML); + + + std::cout << "G planarity: " << ogdf::isPlanar(G) << std::endl; + std::cout << "Original number of nodes: " << G.numberOfNodes() << std::endl; + std::cout << "Subgraph number of edges: " << G.numberOfEdges() << std::endl; + + + return 0; +} diff --git a/make_planar/ogdf_mps_simple.cpp b/make_planar/ogdf_mps_simple.cpp new file mode 100644 index 0000000..cfad9e4 --- /dev/null +++ b/make_planar/ogdf_mps_simple.cpp @@ -0,0 +1,68 @@ +#include +#include + +#include +// #include +#include +#include + +#include + +using namespace ogdf; + + +int main(int argc, char* argv[]) +{ + + string inputFile = argv[1]; + Graph G; + + if (!GraphIO::read(G, inputFile, GraphIO::readGML)) { + std::cerr << "Could not read input.gml" << std::endl; + return 1; + } + + + NodeArray numbering(G); + int num = computeSTNumbering(G, numbering, nullptr, nullptr, true); + OGDF_ASSERT(num == G.numberOfNodes()); + + // print after input + // graphPrinter(G); + std::cout << "G Planarity: " << ogdf::isPlanar(G) << std::endl; + std::cout << "Original number of nodes: " << G.numberOfNodes() << std::endl; + std::cout << "Original number of edges: " << G.numberOfEdges() << std::endl; + + // separator for planarization + // <--------------> + + // PQ implementation to make planar subgraph + std::cout << "start planarization" << std::endl; + List *delEdges = new List; // empty list + + ogdf::MaximalPlanarSubgraphSimple mps(*(new PlanarSubgraphFast)); + mps.call(G, *delEdges); + + + std::cout << "Edges removed:" << delEdges->size() << std::endl; + + + // delete removed edges + for (edge e: *delEdges) { + // print removed edges + // std::cout << e->adjSource() << std::endl; + G.delEdge(e); + } + + + // write processed graph to new gml file + // GraphIO::write(G, "output.gml", GraphIO::writeGML); + + + std::cout << "G planarity: " << ogdf::isPlanar(G) << std::endl; + std::cout << "Original number of nodes: " << G.numberOfNodes() << std::endl; + std::cout << "Subgraph number of edges: " << G.numberOfEdges() << std::endl; + + + return 0; +}