This project implements a Discrete Event Simulation (DES) of a ski resort to analyze the critical relationship between ski lift capacities (specifically speed and departure intervals) and skier waiting times. It serves as a replication study of Heinrich et al. (2024), "Simulating the Effects of Increased Ski-lift Capacities on Waiting Times".
The simulation models a closed queuing network of a ski resort, allowing operators to:
- Identify operational bottlenecks in lift systems.
- Quantify the impact of increasing lift speeds on customer wait times.
- Determine the "tipping point" where skier volume overwhelms lift capacity.
By optimizing these parameters, resort operators can significantly improve customer satisfaction and throughput without unnecessary capital expenditure.
The simulation uses the SIMLIB simulation library (C++) to model the flow of skiers between two primary states: queueing/riding the lift and skiing down slopes.
- Model Topology: 2 nodes (Lift Station, Hill Top), 1 lift route, and 3 distinct ski slopes with varying lengths and usage probabilities.
- Agents: Up to 3,000 individual skiers with stochastic behaviors (speed distributions).
- System: A closed-loop system where a fixed number of carriers (99) cycle through the lift route.
- Validation: The model includes warm-up periods to ensure statistical stability and has been validated against the reference study.
.
├── src/ # Source code
│ ├── main.cpp # Core C++ simulation logic (SIMLIB)
│ ├── generate_*.py # Python scripts for running experiments & plotting
│ └── plot_queue_*.py # Visualization scripts
├── scripts/ # Helper scripts
│ └── prepare_to_submit.sh # Packaging script
├── data/ # Output data storage (CSVs, text logs)
├── plots/ # Generated visualization graphs (PNG)
├── 3rd_party/ # External dependencies (SIMLIB library)
├── submission/ # Build artifacts for assignment submission
├── dokumentace.tex # Detailed academic documentation (LaTeX)
├── dokumentace.pdf # Compiled documentation
├── run_simulations.sh # Master script to run full experiment suite
├── Makefile # Make build configuration
└── CMakeLists.txt # CMake build configuration
- Core Simulation: C++11 with SIMLIB/C++ Simulation Library.
- Build System: CMake and Make.
- Data Analysis: Python 3 (NumPy, Matplotlib).
- Documentation: LaTeX.
- OS: Linux environment (required for SIMLIB).
- Compiler: GCC or Clang with C++11 support.
- Build Tools: CMake, Make.
- Libraries: SIMLIB (included in
3rd_partyor installed systematically). - Python: Python 3.x with
matplotlibandnumpy.
-
Clone the repository:
git clone <repository-url> cd <repository-directory>
-
Install Python dependencies:
pip install -r requirements.txt
(Note: If
requirements.txtis missing, ensure you havenumpyandmatplotlibinstalled).
You can run the simulation in two modes: single run or full experiment suite.
To build and run a single instance of the simulation with default parameters:
make runThis command compiles the C++ project and executes the binary simple_ski_simulation.
To reproduce the full study, including running batch simulations and generating all analysis plots:
./run_simulations.shThis script will:
- Build the project.
- Run the simulation across various parameters (skier counts 100-3000, different lift speeds).
- Generate the following plots in the
plots/directory:queue_size_over_time.png: Verifies system stability.waiting_time_vs_skiers.png: Shows the tipping point of congestion.speed_comparison.png: efficiency gains from higher lift speeds.
- Non-Linear Improvement: Increasing lift speed yields diminishing returns. While moving from 3m/s to 5m/s significantly reduces wait times, further increases provide smaller marginal gains.
- Congestion Thresholds: The system handles up to ~1000 skiers comfortably at low speeds. Beyond this threshold, wait times grow super-linearly, confirming the critical need for higher capacity lifts during peak hours.
- Nurdaulet Turar (xturarn00)
- Ivan Savin (xsavini00)
Developed as a project for the Modelling and Simulation (IMS) course at Brno University of Technology.