| Parameter | Explanation |
|---|---|
-m |
Flag to indicate whether multiple files are to be processed. Defaults to false. |
-i |
Relative path to the input directory or file. |
-o |
Relative path to the output directory or file. |
-c |
Relative path to the configuration directory or file. Defaults to ./config/. |
-t |
Number of minutes after which termination is forced. Defaults to 50. |
-s |
Specification of the strategies to be applied. If a sequence is to be executed, multiple can be listed using a "+" separator. |
The present project consists of four different folders. The directory ./source/ contains all classes that manage
drawings or the execution of strategies, as well as the file ./source/dependencies.h, which includes all source files
in bulk. Additionally, the subdirectory ./source/external/ contains all open-source libraries that have been utilized.
The optimization algorithms themselves are located separately in the ./strategies/ folder. To consider various
parametrization without causing complex console commands, configurations are saved in JSON files. The standard
directory for these is ./config/, which contains blueprints for further configurations. The application should be
compiled within the ./production/ directory to ensure that all default paths can be used without issues:
cmake -B . -S .. && make
To optimize PSEs, the main executable must then be called within the production folder. Inputs and outputs are
organized with additional directory paths, which must be specified according to the instruction overview in
Table 1. If the -m flag is set, the program expects a directory path for parameter -i, in which each PSE file
is will be read and optimized in a separate thread. Otherwise, the program will process a single file in a single thread.
Scanned files must comply with the JSON format of the GDC, because otherwise the parser is going to throw errors.
Generated (intermediate) results are stored in the specified output path and are named based on the previously scanned
file names. It is possible to specify a different folder for -c that contains configurations different from the
default settings.
Ultimately, the specific strategies to be applied sequentially can be specified using a "+"-separated string. In addition, a notation with square brackets was selected for the selection of sub-strategies. The examples below should illustrate this even better and provide a template for the most common use cases at the same time.
| Description | Command |
|---|---|
| Executes brute-force for a single PSE and forces termination after 30 minutes. | ./main -s bruteforce -i ./input/ -o ./output/ -t 30 |
| Executes greedy assignment for a single PSE with non-standard configurations. | ./main -s greedy -i ./input/ -o ./output/ -c ./config/ |
Executes Eades' spring embedding and greedy embedding sequentially. Multiple PSEs are processed in parallel because the -m flag is set. |
./main -s fda[spring]+greedy -i ./input/ -o ./output/ -m |
Executes the combined approach utilizing SA with random walk and FR. Since the -t flag is not set, termination will be forced after 50 minutes. |
./main -s fda[fr]+greedy+sa[walk] -i ./input/ -o ./output/ -m |