Skip to content

DiceNameIsMy/ski-resort-replication-study

Repository files navigation

Ski Resort Simulation Study

Purpose and Impact

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.

Overview

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.

Project Structure

.
├── 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

Technologies Used

  • Core Simulation: C++11 with SIMLIB/C++ Simulation Library.
  • Build System: CMake and Make.
  • Data Analysis: Python 3 (NumPy, Matplotlib).
  • Documentation: LaTeX.

Getting Started

Prerequisites

  • OS: Linux environment (required for SIMLIB).
  • Compiler: GCC or Clang with C++11 support.
  • Build Tools: CMake, Make.
  • Libraries: SIMLIB (included in 3rd_party or installed systematically).
  • Python: Python 3.x with matplotlib and numpy.

Installation

  1. Clone the repository:

    git clone <repository-url>
    cd <repository-directory>
  2. Install Python dependencies:

    pip install -r requirements.txt

    (Note: If requirements.txt is missing, ensure you have numpy and matplotlib installed).

Running the Simulation

You can run the simulation in two modes: single run or full experiment suite.

1. Single Simulation Run

To build and run a single instance of the simulation with default parameters:

make run

This command compiles the C++ project and executes the binary simple_ski_simulation.

2. Full Experiment Suite (Recommended)

To reproduce the full study, including running batch simulations and generating all analysis plots:

./run_simulations.sh

This script will:

  1. Build the project.
  2. Run the simulation across various parameters (skier counts 100-3000, different lift speeds).
  3. 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.

Key Results

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

Authors

  • Nurdaulet Turar (xturarn00)
  • Ivan Savin (xsavini00)

Developed as a project for the Modelling and Simulation (IMS) course at Brno University of Technology.

About

A replication study of a skiing resort simulation utilizing a different simulation paradigm.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors