The code has been the basis for computational evaluations within the publication 'Traffic Engineering with Joint Link Weight and Segment Optimization'. This repository contains all implemented algorithms, traffic and topology generators. Additionally, we provide the raw results (JSON), and the plotting script used for Fig. (3)-(5).
We implemented the proposed algorithms in Python (3.7.10) leveraging the library NetworkX (2.5.1) and NetworKit (8.1).
To solve the ILP we used Gurobi (9.1.2).
We used conda (4.8.2) as a package manager. See the conda environment.yml for further details of packages used in this repository.
The code is tested on Ubuntu and MacOS. The python library NetworKit does not support Microsoft Windows in version 8.1. The host machine in our evaluations was running Ubuntu 18.04.5 LTS.
Directory | Description |
---|---|
data/ | Target directory for real-world traffic/topologies from SNDLib and TopologyZoo |
results_paper/ | Raw result data (json) used in the evaluations shown in the paper |
out/ | To store json results and plots |
src/ | Source root containing main.py and plot_results.py |
src/algorithm/ | WAN Routing algorithms (link weight and/or segment optimizations) |
src/topology/ | Topology provider (reads/prepares available real-world topology data) |
src/demand/ | Reader for real world traffic data and synthetic traffic generator |
src/utility/ | Globally shared statics/consts and helper classes (e.g. JSON reader/writer) |
We use Conda as package manager and provide an environment.yml defining the conda environment used in the evaluations. For details go to: install conda
We used Gurobi to solve linear problems. To reproduce the results a licence is required (academic licences are freely available here: info). Download and install the Gurobi Optimizer (9.1.2) from download.
To tune our experiments interestingly, we use real world data for both - topologies and demands from SNDLib and TopologyZoo.
Overview of real-world data usage
- Fig. 3 (all topologies): Topology data from SNDLib and TopologyZoo.
- Fig. 4 (all algorithms): Topology data from SNDLib.
- Fig. 5 (real demands): Topology and traffic data from SNDLib.
We use traffic and topology data from SNDLib, which we redistribute under the ZIB ACADEMIC LICENSE. The data is stored in the directory data/.
Additionally, we use the topology data available from TopologyZoo.
Note: The data from topology zoo is NOT included in the repository and must be manually added:
- Download the whole dataset: Download
- Unzip the data
- Save the *.graphml files in the directory data/topologies/topology_zoo)
Create a conda environment and install all python dependencies using the provided environment.yml file:
conda env create -f environment.yml
The created environment is named 'wan_sr', activate with:
conda activate wan_sr
Navigate to source code root:
cd ./src
Run evaluation with:
python3 main.py
The results are stored in a JSON file located in out/ after running the main.py script. Note: In the directory results_paper/ we provide the raw results obtained during our evaluations which we used in the publication.
Create Plots from provided raw result data
python3 plot_results.py [optional <data-dir> containing json result data]
Note: By default, the script plots the raw result data used in Fig.3-5 in the paper. To plot the data created by running the main.py script, you can pass the directory containing the json files as parameter to the plotting script. E.g.:
python3 plot_results.py "../out/"
Contact Me or visit University of Vienna | Communication Technologies for more infos.
This project is licensed under the MIT License.