The overall organization is as follows:
graph_library/stores the graph library including implementation of all graph algorithms and data structures.data_generation/stores the code to generate data.data/stores the (generated) data.experiments/stores all the code and scripts for experiments.
- Implementation for the graph data structure and basic algorithms:
Graph.h. - Meta-heuristics (e.g., greedy, ILS, VNS) implementation:
meta_heuristics.h. With multi-threading (much faster):meta_heuristics_multithreads.h. - Directed Evolution (DE) implementation:
directed_evolution.h. With multi-threading (much faster):directed_evolution_multithreads.h. - Evolutionary Algorithm (EA) implementation:
evolutionary_algorithm.h. With multi-threading (much faster):evolutionary_algorithm_multithreads.h. - Ant Colony Optimization (ACO) implementation:
ant_colony_optimization.h. With multi-threading (much faster):ant_colony_optimization_multithreads.h. - Brute-Force / Back-Tracking implementation:
brute_force.h. With multi-threading (much faster):brute_force_multithreads.h.
- Data generation is based on paper "The Chinese Postman Problem with Load-Dependent Costs" https://pubsonline.informs.org/doi/abs/10.1287/trsc.2017.0774
- Implementation to generate Eulerian cases:
gen_eulerian.cpp. - Implementation to generate Rural Postmam Problem (RPP) cases:
gen_rural.cpp. - In the
data/directory: PrefixEdenotes the Eulerian cases. PrefixCdenotes the cases based on Christofides et al. PrefixHdenotes the cases based on Hertz et al.
Tests for the basic graph algorithms and data structures:
- Example of how to load / save graph from / to file, use the object and run the Floyd's algorithm:
test_graph.cpp. - Test the dynamic programming for finding the optimal directions of edges:
test_dp.cpp.
Meta-heuristics:
- Test the Greedy Constructive Heuristics:
test_greedy.cpp. Usage:g++ test_greedy.cpp -o test_greedy, then./test_greedy [file name]. - Test the Iterative Local Search (ILS):
test_ils.cpp. Usage:g++ test_ils.cpp -o test_ils, then./test_ils [file name]. - Test the Iterative Local Search (ILS) with multi-threading (much faster):
test_ils_multithreads.cpp. Usage:g++ test_ils_multithreads.cpp -lpthread, then./a.out [file name]. - Test the Variable Neighborhood Search (VNS):
test_vns.cpp. Usage:g++ test_vns.cpp -o test_vns, then./test_vns [file name].
Directed Evolution (DE):
- Test the Directed Evolution:
test_ea.cpp. Usage:g++ test_de.cpp -o test_de, then./test_de [file name] [k = 3, 4, 5, ...]. - Test the Directed Evolution with multi-threading (much faster):
test_de_multithreads.cpp. Usage:g++ test_de_multithreads.cpp -lpthread, then./a.out [file name] [k = 3, 4, 5, ...].
Evolutionary Algorithm (EA):
- Test the Evolutionary Algorithm:
test_ea.cpp. Usage:g++ test_ea.cpp -o test_ea, then./test_ea [file name]. - Test the Evolutionary Algorithm with multi-threading (much faster):
test_ea_multithreads.cpp. Usage:g++ test_ea_multithreads.cpp -lpthread, then./a.out [file name].
Ant Colony Optimization (ACO):
- Test the Ant Colony Optimization:
test_aco.cpp. Usage:g++ test_aco.cpp -o test_aco, then./test_aco [file name]. - Test the Ant Colony Optimization with multi-threading (much faster):
test_aco_multithreads.cpp. Usage:g++ test_aco_multithreads.cpp -lpthread, then./a.out [file name].
Brute-Force / Back-Tracking:
- Test the Brute-Force / Back-Tracking:
test_brute_force.cpp. Usage:g++ test_brute_force.cpp -o test_brute_force, then./test_brute_force [file name]. - Test the Brute-Force / Back-Tracking with multi-threading (much faster):
test_brute_force_multithreads.cpp. Usage:g++ test_brute_force_multithreads.cpp -lpthread, then./a.out [file name].
Scripts:
- Example (script) of running all the baselines including brute-force:
test_all_baselines.sh. Usage:sh test_all_baselines.sh. - Example (script) of running only meta-heuristics, evolutionary algorithm and ant colony optimization:
test_heuristics.sh. Usage:sh test_heuristics.sh. - C++ code to run all baselines:
run_all.cpp