Instructions for running the project directly with Python 3 on Linux (no Docker).
Before following the steps below, install the system dependencies, set up SUMO, and install the Python requirements.
-
Install system dependencies (requires sudo)
Installs the libraries required by the libsumo C++ extension as well as SUMO and its tools.
apt-get update && apt-get install -y --no-install-recommends \ libx11-6 \ libxext6 \ libxrender1 \ libgl1 \ libatomic1 \ libfontconfig1 \ sumo \ sumo-tools \ && rm -rf /var/lib/apt/lists/*
-
Set the
SUMO_HOMEenvironment variablePoint
SUMO_HOMEto the installed SUMO directory.export SUMO_HOME=/usr/share/sumo -
Install Python dependencies
pip install --no-cache-dir -r requirements.txt
-
Run GA with PyGad
This will run the PyGad Implementation of the Genetic Algorithm.
python3 -m src.algorithms.simple_genetic_algorithm
-
View map statistics
Will display statistics of the downloaded map and traffic network
python3 -m src.sumo_setup.statistics
-
Generate network data
This will generate network data that will have phase durations assigned for individual TLS. This is required step to run the optimization algorithm.
python3 -m src.sumo_setup.generation
-
Generate map
This will generate a new map following
osm.netccfgconfigurations.cd src/sumo_setup && netconvert -c osm.netccfg
-
Configure Simulator variables
Configure SUMO Simulator variables when running every simulation. We are now using precalculated routes. this step is not necessary.
cd src/sumo_setup && python3 $SUMO_HOME/tools/randomTrips.py -n osm.net.xml.gz -o [name of your routes file].rou.xml
You can change from random trips to a specific configuration such as setting the specific number of cars generated per second or setting the total number of cars within every simulation.
-
Discover TLS linkage
This will discover linkage of TLS by Direct Linkage Empirical Discovery.
python3 -m src.decomposition.dled_optimizer
-
Execute DG2 Grouping
This will execute Differential Grouping method as an alternative to linkage discovery. Theoretically it is faster than Embpirical Linkage Learning.
python3 -m src.decomposition.DG2_grouping
-
Execute IRRG
python3 -m src.decomposition.IRRG
-
Execute Random Search
Performs random search of n solutions and m evaluations for each solutions.
python3 -m src.algorithms.random_search
-
Execute Custom Optimizer
Runs the Custom Optimizer algorithm which was implemented based on LT-GOMEA.
python3 -m src.algorithms.custom_optimizer
-
Generate Distance Matrices
Calculates the network distance matrices (Shortest, Euclidian, Fastest) used by the optimizer.
python3 -m src.plot.tls_distances
-
Generate Clustering Dendrograms
Generates hierarchical clustering dendrogram plots to visualize the linkage tree structure.
python3 -m src.plot.plot_dendrograms
-
Analyze Linkage Statistics
Analyzes the calculated distance matrices to determine the optimal clustering thresholds, calculating max valid non-singleton clusters and the median cluster size for each distance metric.
python3 -m src.algorithms.linkage_analyzer
-
Run Baseline Configuration
Evaluates the current configuration of the instance map.
python3 -m src.algorithms.evaluate_baseline
-
Run LT-GA with PyGad
This will run the PyGad Implementation of the custom LT - Genetic Algorithm.
python3 -m src.algorithms.lt_genetic_algorithm
-
Run Differential Evolution (SHADE)
Runs the EvoX SHADE implementation on the baseline TLS configuration. Behavior depends on
NOVEL_MUTATIONinconfig.py: whenFalse, a single plain SHADE run is performed; whenTrue, three runs are executed (one per Ward distance tree: shortest / euclidian / fastest) with end-of-generation pair-cluster mutation applied to aMUTATION_RATEfraction of the population. Requires step 11 (distance matrices) whenNOVEL_MUTATION=True.python3 -m src.algorithms.differential_evolution
If you would like to setup the whole pipeline, please complete the prerequisites above, then run steps 3, 4, 11, and 10 in order.