← Past problems · 2017 set

2017 · Problem B — Ski Slope

Network flow Queueing Terrain / DEM Simulation

Read the official PDF →

The prompt, restated

A resort developer owns a parcel of mountainous land and wants to lay out a new ski area on it. The team must design the resort: choose where on the terrain to put ski runs, where to put chairlifts, what capacity each lift should have, and how to balance run difficulty (beginner / intermediate / expert) so the resort attracts a mixed market. The developer also wants the design to be safe — too many skiers per acre creates collisions and lift-line backups; too few wastes the investment.

The team is asked to (1) build a model that takes a piece of terrain (a digital elevation model, DEM, or a stylized contour map provided in the problem) and produces a candidate run layout, including a difficulty classification rule based on slope and width; (2) decide how many chairlifts, of what capacity, and where to place their base and summit stations; (3) simulate a peak day with a stated number of skiers and estimate throughput, average wait time at lifts, and on-slope density; (4) recommend a design and write a one-page memo to the developer covering capacity, safety, and what would have to change if climate warming shortens the operating season.

Key modeling idea

Two coupled subproblems. First, terrain $\to$ runs is a geometric / routing problem on a DEM: a run is a polyline from a high node to a lower node whose slope stays inside a target band (e.g., 25–40% grade for intermediate). Second, runs + lifts + skiers is a queueing network — each lift is an M/M/c server with capacity $c$ chairs per hour, each run is a "service station" with mean transit time depending on skier skill and slope. Steady-state throughput is bounded by the slowest lift or by an on-slope density limit.

Suggested approach

  • Step 1 — Build the slope field. From the DEM (e.g., USGS 3DEP 10 m tiles), compute slope and aspect at every cell. Classify cells as green (< 25% grade), blue (25–40%), black (40–60%), or unusable (> 60% or wrong aspect for sun exposure).
  • Step 2 — Route candidate runs. Treat each cell as a node in a weighted graph; edges go downhill only. Use shortest-path / minimum-cost paths (technique 7) from candidate summit points to base lodge candidates, with cost penalizing slope changes (skiers dislike flats and sudden drop-offs). Target ~6–10 runs across a balanced difficulty mix.
  • Step 3 — Place lifts. Each lift connects a base elevation to a summit; lift capacity is roughly $c = N_{\text{chairs}} \times s_{\text{seats}} \times 3600 / \tau$ where $\tau$ is the loop time. Industry capacities: fixed-grip quad ~1,800 pph, detachable six-pack ~3,000 pph, gondola ~3,600 pph.
  • Step 4 — Simulate a peak day. Each skier follows a Markov / random policy over runs they prefer; arrival at lift bottom is an M/M/c queue. Discrete-event sim for 1,000–5,000 skiers (technique 11). Outputs: lift wait time distribution, on-slope density (skiers per acre, target < 20).
  • Step 5 — Recommendation. Trade off capex (~\$3M per fixed quad, ~\$10–15M per detachable six-pack [illustrative]) vs. ticket revenue vs. a comfort score (mean wait < 5 min, density below regulator threshold). Add a climate-warming stress test: raise the freezing line by 200 m and re-evaluate which lower runs remain skiable.

Data sources to consider

SourceWhat you get
USGS 3DEP elevation tiles10 m or 1 m DEM for any real US site (Vail, Snowbird, etc.)
NOAA / NRCS SNOTEL stationsSnow-water-equivalent and base-depth time series at real ski resorts
NSAA (National Ski Areas Association) factsVisitor counts, capex norms, ski area injury baselines
Lift industry catalogs (Doppelmayr, Leitner-Poma)Real chair capacities, line speeds, costs
OpenStreetMap "piste" tagReal run polylines from existing resorts — great for validation

Common pitfalls

  • Designing on a flat grid. The problem is fundamentally about elevation; if you do not use a DEM (or at least a 2D contour map) you've already lost the geometry.
  • Confusing capacity and throughput. Installed lift capacity in passengers-per-hour is an upper bound; real throughput is limited by run length and ski speed. Bring both into the calculation.
  • No on-slope density check. Many teams optimize lift capacity and forget that dumping 3,000 skiers/hour onto a single beginner run is dangerous. Target < 20 skiers/acre.
  • Skill mix ignored. A resort that is 80% expert terrain will fail commercially. Industry mix is roughly 25% green, 50% blue, 25% black.
  • No climate sensitivity. 2017 judges flagged teams that did not address how a warming climate threatens low-elevation runs and snow-making demand.

Python sketch

Toy DEM, slope classification, and a single-lift M/M/c queue.

import numpy as np
from math import factorial

# --- 1. synthetic DEM: a conical mountain ---
N = 200
x, y = np.meshgrid(np.linspace(-1, 1, N), np.linspace(-1, 1, N))
r = np.sqrt(x**2 + y**2)
elev = 1000 + 800 * np.exp(-1.5 * r)             # metres, peak ~1800 m

# --- 2. slope field (rise/run, %) ---
dz_dy, dz_dx = np.gradient(elev, 50.0, 50.0)     # 50 m cell size
slope = np.hypot(dz_dx, dz_dy) * 100             # percent grade

green  = slope < 25
blue   = (slope >= 25) & (slope < 40)
black  = (slope >= 40) & (slope < 60)
print(f"green {green.mean():.1%}  blue {blue.mean():.1%}  black {black.mean():.1%}")

# --- 3. M/M/c lift queue: detachable six-pack ---
def mmc_wait(lam, mu, c):
    """Mean wait in queue (Erlang-C)."""
    rho = lam / (c * mu)
    if rho >= 1: return float("inf")
    s = sum((c*rho)**k / factorial(k) for k in range(c))
    p0 = 1 / (s + (c*rho)**c / (factorial(c) * (1 - rho)))
    pq = ((c*rho)**c / (factorial(c) * (1 - rho))) * p0
    return pq / (c*mu - lam)

lam = 2400 / 60          # 2,400 skiers/hour arriving, per minute
mu  = 1 / 6              # service rate: 6-minute lift ride
c   = 300                # six-pack carries 6 per chair, ~50 chairs in transit
print(f"avg lift wait = {mmc_wait(lam, mu, c)*60:.1f} s")

Sensitivity & validation checklist

  • Vary peak-day skier count from 50% to 150% of design — does any lift saturate?
  • Vary skill mix: 20/60/20 vs. 30/50/20 vs. 25/40/35; does revenue or wait time flip the recommended layout?
  • Run climate stress: snow base < 30 cm closes runs below 1,400 m. What fraction of vertical drop survives a +2 °C scenario?
  • Validate run geometry against a real comparable resort using OSM piste data — your total run length and lift count should be within a factor of ~2.
  • Spot-check the queue model: at $\rho \to 1$, the Erlang-C wait time should explode.

Related pages