-
Notifications
You must be signed in to change notification settings - Fork 1
A parallel implementation of the Erickson-Monma-Veinott algorithm for solving the Steiner problem in graphs. It is a parameterised algorithm which runs in edge-linear time and the exponential complexity is restricted to the number of terminals.
License
suhastheju/steiner-edge-linear
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Overview -------- This software repository contains a parallel implementation of the Erickson-Monma-Veinott algorithm for solving the Steiner problem in graphs, and by reduction, the group Steiner problemi in graphs. It is a parameterised algorithm, which runs in edge-linear time and the exponential complexity is restricted to the number of terminals. The software is written in C programming language and OpenMP API for parallelisation. This software was developed as part of my master thesis work "Scalable Parameterised Algorithms for two Steiner Problems" at Aalto University, Finland. The source code is configured for a gcc build for Intel microarchitectures. Other builds are possible but require manual configuration of the 'Makefile'. The source code is subject to MIT license, see 'LICENSE' for details. Building -------- Use GNU make to build the software. Our implementation makes use of preprocessor directives to enable conditional compilation for generating the binaries specific to single or multi threaded variants; optimal cost or optimal solution variants of the software. In addition to this, resource tracking can be enabled using 'TRACK_RESOURCES' compilation flag. Check 'Makefile' for building the software. Testing ------- For testing use 'verify.py' script provided along with the software. The script is written in Python Version 3.0 release and it uses 'networkx' python package. The test instances used for the purpose of testing this software are available in the 'testset' directory. Use the command-line options to verify the optimal cost and optimal solution of the test instances. Optimal cost: ./verify.py -bt reader-el Optimal solution: ./verify.py -bt reader-el --list Experiments ----------- Use 'report.py' script provided along with the software to perform the experiments to verify the scalability of the software. The software is written in Python Version 3.0 release. usage: report.py [-h] [-run] [-parse] [-b] [-bt BUILD_TYPE [BUILD_TYPE ...]] [-m [{cpu-corei5,cpu-hsw,cpu-hsw-largemem,cpu-hsw-hugemem}]] [-e [{reader-el}]] [-rep [REPORT_DIR]] [-arg [{dijkstra,erickson}]] [-list] [-g [{gen-unique,gen-count,gen-natural}]] [-gt [{regular}]] [-ft [{bin,ascii}]] [-n NODES [NODES ...]] [-d DEG [DEG ...]] [-k TERMINALS [TERMINALS ...]] [-al [ALPHA]] [-w [WEIGHT]] [-ew [EDGE_WEIGHT]] [-r [REPEATS]] [-gr [GRAPH_REPEATS]] [-vr [VERTEX_REPEATS]] [-s [SEED]] [-p] [-gp GNUPLOT_FILE [GNUPLOT_FILE ...]] [-err] [-bin] [-tar] [-imp] [-pr] [-log [{r,w,a}]] optional arguments: -h, --help show this help message and exit Usage ----- ./reader-el-in <input graph> <arguments> arguments: -seed : seed value -el : Erickson-Monma-Veinott algorithm -dijkstra : Dijkstra single source shortest path -list : Output Steiner tree ./reader-el -in b01.stp -el -list invoked as: ./reader-el -in b01.stp -el -list no random seed given, defaulting to 123456789 random seed = 123456789 input: n = 50, m = 63, k = 9, cost = 82 [0.10 ms] {peak: 0.00GiB} {curr: 0.00GiB} terminals: 48 49 22 35 27 12 37 34 24 root build: [zero: 2.54 ms] [pos: 0.01 ms] [adj: 0.01 ms] [term: 0.00 ms] done. [2.59 ms] {peak: 0.00GiB} {curr: 0.00GiB} command: Erickson-Monma-Veinott erickson: [zero: 0.13 ms] [kernel: 5.62 ms 0.93GiB/s] [traceback: 0.00 ms] done. [5.85 ms] [cost: 82] {peak: 0.00GiB} {curr: 0.00GiB} solution: ["24 28", "28 18", "18 43", "43 22", "22 12", "22 41", "41 49", "41 37", "22 20", "20 48", "20 35", "20 27", "27 34"] command done [5.99 ms] grand total [9.83 ms] {peak: 0.00GiB} host: cs-119 build: edge-linear kernel, multi-threaded, binary heap list solution: true num threads: 4 compiler: gcc 5.4.0 Input graphs ------------ The input graphs should be in DIMACS STP format. Our implementation accepts the STP file only in ASCII files and the characters must be in lower-case.
About
A parallel implementation of the Erickson-Monma-Veinott algorithm for solving the Steiner problem in graphs. It is a parameterised algorithm which runs in edge-linear time and the exponential complexity is restricted to the number of terminals.
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published