The PhD thesis was developed at EPFL between November 2017 and November 2021 by Stefano Bortolomiol, under the supervision of Michel Bierlaire and Virginie Lurkin.
This repository contains all the code related to the experiments contained in the PhD thesis. The thesis is composed of three core sections.
-
Chapter 2, based on the following article: Bortolomiol, S., Lurkin, V., Bierlaire, M. (2021). A simulation-based heuristic to find approximate equilibria with disaggregate demand models. Transportation Science, 55(5):1025–1045.
-
Chapter 3, based on the following article: Bortolomiol, S., Lurkin, V., Bierlaire, M. (2021). Price-based regulation of oligopolistic markets under discrete choice models of demand. Transportation.
-
Chapter 4, which builds upon the work presented in the following conference paper: Bortolomiol, S., Lurkin, V., Bierlaire, M., Bongiovanni, C. (2021). Benders decomposition for choice-based optimization problems with discrete upper-level variables. In Proceedings of the 21st Swiss Transport Research Conference, Ascona, Switzerland.
When using this algorithm (or part of it) in derived academic studies, please cite the above-mentioned works.
All algorithms are coded in Python, and all MILPs are solved using CPLEX. As of January 2022, CPLEX is available free of charge to all academic users through the IBM ILOG Optimization Academic Initiative.
There are five folders in the main repository. The following table outlines the relationship between the various case studies and the corresponding sections of the thesis:
Case study | Thesis section |
---|---|
case-study-Lin-Sibdari | 2.5.1 |
case-study-parking | 2.5.2 |
case-study-HSR | 2.5.3 |
case-study-intercity-travel | 3.4 |
benders-facility-location-pricing | 4.2 + 4.6 |
Three numerical experiments are performed: (i) Data_LinSibdari_MNL.py contains the original data as in the benchmark experiments by Lin and Sibdari (2009); (ii) Data_LinSibdari_ObservedHet.py proposes a variation with observed heterogeneity (MNL with 3 segments); (iii) Data_LinSibdari_UnobservedHet.py proposes a variation with unobserved heterogeneity (mixed logit). case-study-Lin-Sibdari/main.py runs the simulation-based heuristic to find approximate equilibrium solutions for the competitive market (Algorithm 1).
data_parking.py contains the dataset. The 50 customers defined in the function demand() are grouped in 11 categories. case-study-parking/main.py runs the simulation-based heuristic to find approximate equilibrium solutions for the competitive market (Algorithm 1).
data_HSR_nested_logit.py contains the dataset. case-study-HSR/main.py runs the simulation-based heuristic to find approximate equilibrium solutions for the competitive market (Algorithm 1).
Case study on regulated competition. The parameters concerning regulation are contained in the function regulator() of the file case-study-intercity-travel/data_intercity_nested_logit.py. To run a single instance, run case-study-intercity-travel/algorithm_regulation.py as main file. To run a sensitivity analysis (e.g. by varying the value of the social cost of carbon on a predefined range), run case-study-intercity-travel/main.py with appropriate parameters.
File model_continuous_assortment.py solves the optimization problem with assortment and continuous price variables (ACPP, Section 4.2.2.1). File model_discrete_assortment.py solves the optimization problem with assortment and discrete price variables (ADPP, Section 4.2.2.2). File benders_discrete.py runs the branch-and-Benders-cut algorithm for the optimization problem with discrete supply variables (Section 4.5)
Please write to Stefano Bortolomiol if you have comments or questions. stefano(dot)bortolomiol(at)epfl(dot)ch
- MIT License
- Copyright(c) 2022 Stefano Bortolomiol