← Past problems · 2019 set

2019 · Problem A — Charge!

Logistic growth Facility location Forecasting Graphs

Read the official PDF →

The prompt, restated

As electric vehicles transition from a niche product to mass-market transportation, the limiting bottleneck shifts from vehicle availability to public charging-station access — a classic "range anxiety" / chicken-and-egg dynamic. The team is asked to model the United States' transition to an EV-majority fleet over the next decade, then plan the public charging network needed to support that transition. The plan must distinguish between fast DC chargers (typically along highway corridors for long trips) and slower Level-2 chargers (typically at workplaces, malls, apartment complexes).

Specifically, the team must (1) forecast US EV adoption through 2030 under at least two scenarios, (2) estimate the number of public chargers needed at each year, broken down by type, (3) recommend how those chargers should be distributed geographically — by state, by urban/rural split, or along the interstate network — (4) discuss equity, cost, and grid implications, and (5) write a one-page memo to a US Department of Transportation policy director.

Key modeling idea

This is a forecasting + facility-location stack. The forecasting layer is a logistic-growth model for EV market share. The facility-location layer is either a coverage model (every interstate corridor needs a fast charger every X miles) or a p-median model (minimize average drive-to-charger distance subject to a budget).

Suggested approach

  • Step 1 — EV fleet forecast. Fit a logistic growth curve to historical US EV-sales share (2011–2019). Project to 2030 under low / central / high adoption scenarios.
  • Step 2 — Charger demand per vehicle. Use a rule like 1 fast-charge port per 30 EVs and 1 L2 port per 10 EVs (justify against IEA Global EV Outlook). Multiply through to get totals.
  • Step 3 — Interstate corridor coverage. Treat the US interstate network as a graph (technique 12); place fast chargers so no segment longer than ~80 miles is uncovered. Solve as a set-cover.
  • Step 4 — Urban L2 distribution. Allocate Level-2 chargers across MSAs proportional to EV count, then sub-allocate by population density. A p-median / weighted-centroid heuristic is fine.
  • Step 5 — Equity and grid. Show charger density by income decile and a back-of-envelope grid-load impact (MW of simultaneous charging) per state.

Data sources to consider

SourceWhat you get
AFDC (DOE Alternative Fuels Data Center)Every public charger in the US — type, location, owner
IEA Global EV OutlookAdoption-curve benchmarks across countries
EV Volumes / InsideEVs sales trackerHistorical monthly US EV sales 2011+
FHWA Highway Performance Monitoring SystemInterstate mileage and traffic by segment
US Census Bureau MSA dataPopulation by metro area for L2 allocation
EIA state-level grid mixGrid intensity and capacity headroom

Common pitfalls and judge commentary patterns

  • Linear extrapolation. EV adoption is clearly S-shaped; linear fits over- or under-shoot dramatically.
  • One charger type only. The problem explicitly distinguishes fast vs. L2; blending them is a red flag.
  • Geographic uniformity. Putting the same chargers in Wyoming and New Jersey ignores population density.
  • No grid sanity check. 350 kW fast chargers add up; a state-level simultaneous-charging load estimate is expected.
  • Skipping the equity question. The prompt asks about it.

Python sketch

Fit logistic adoption, then a tiny interstate set-cover heuristic.

import numpy as np
from scipy.optimize import curve_fit

# historical US EV share of new sales (illustrative)
years = np.arange(2011, 2020)
share = np.array([0.001, 0.004, 0.006, 0.007, 0.007, 0.009, 0.011, 0.020, 0.020])

def logistic(t, K, r, t0):
    return K / (1 + np.exp(-r*(t - t0)))

(K, r, t0), _ = curve_fit(logistic, years, share, p0=[0.6, 0.4, 2028], maxfev=10000)
future = np.arange(2020, 2031)
proj = logistic(future, K, r, t0)
print("2030 EV share central scenario:", round(proj[-1], 3))

# tiny corridor set-cover: cities along I-80, must have fast charger every <=80 mi
cities_mile = [0, 50, 110, 180, 250, 320, 410, 480, 560, 640, 720, 810]   # mile-posts
placed, last = [], -1e9
for m in cities_mile:
    if m - last > 80:
        placed.append(m); last = m
print("fast-charge stations placed:", placed)

Sensitivity & validation checklist

  • Refit logistic parameters with one year held out; check 1-year-ahead error.
  • Run low / central / high adoption — does the charger count differ by >2× between low and high?
  • Vary the "EVs per fast port" ratio from 20 to 50; does corridor count change?
  • Check against AFDC current counts (~50k public stations as of 2019) — does the model hindcast the 2019 number?
  • Compare urban allocation to actual AFDC density: New York vs. Wyoming.

Related pages