Skip to content

Thogsit/TE_SR_WAN_simulation

 
 

Repository files navigation

Traffic Engineering with Joint Link Weight and Segment Optimization

Overview

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).

Dependencies and Requirements

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.

Structure

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)

Prerequisites

Conda

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

Gurobi

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.

Real-World Data

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.

SNDLib Data

We use traffic and topology data from SNDLib, which we redistribute under the ZIB ACADEMIC LICENSE. The data is stored in the directory data/.

TopologyZoo 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:

  1. Download the whole dataset: Download
  2. Unzip the data
  3. Save the *.graphml files in the directory data/topologies/topology_zoo)

Install Python & Dependencies

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

Run Tests

Navigate to source code root:

cd ./src

Start

Run evaluation with:

python3 main.py

Output

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.

Plot Results

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

Contact Me or visit University of Vienna | Communication Technologies for more infos.

This project is licensed under the MIT License.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%