← 2023 Problem B outline · All past problems

Worked sample paper · HiMCM 2023 Problem B

A complete, judge-style reference paper for Charging Ahead with E-buses. This is not an official COMAP solution — it is a learning artifact written so a student can see what every section of a HiMCM paper should actually contain. Read it after attempting the problem yourself.

How to use this document. Try the problem cold first (a weekend is enough for a 5-page sketch). Then read this paper alongside your draft. Every assumption, equation, table, and sensitivity result is labelled so you can map it back to the anatomy-of-a-paper skeleton. Numbers that could not be derived in a 14-day contest window are flagged [illustrative] — they are plausible placeholders, not authoritative findings.
NPV / discounted cash flow Life-cycle CO₂ MILP roadmap Monte Carlo sensitivity

Summary Sheet

Problem restated. A mid-sized city wants to convert its diesel transit-bus fleet to battery-electric by 2033. We must (i) build an ecological-impact model that quantifies the CO₂ (and co-pollutant) reduction of going electric, accounting for a grid that decarbonises over the 10-year horizon; (ii) build a financial model that values upfront capex, operating savings, residual value, and up to 50% external funding; (iii) combine the two into a 10-year procurement roadmap for one anchor city plus two contrasting cities; and (iv) close with a one-page recommendation letter to the transit board.

Approach. We treat the ecological side as a per-bus life-cycle CO₂ delta with a time-varying grid intensity egrid(t), summed over the fleet. The financial side is a 15-year Net Present Value (NPV) on each year's procurement cohort, with subsidy share s ≤ 0.5 on upfront cost. We close the loop by solving a mixed-integer linear program (MILP) for the procurement schedule xt (buses electrified in year t) that maximises a weighted sum of NPV and avoided cumulative CO₂, subject to a depot/charger capacity ramp, a "full-conversion-by-2033" terminal constraint, and a working-fleet-size constraint. The three cities we benchmark — Bogotá (Colombia), Berlin (Germany), and Houston (USA) — span the realistic axes of grid intensity, subsidy availability, and route demand.

Key findings.

  • Per-bus 12-year cumulative CO₂ reduction [illustrative]: Berlin ≈ 940 tCO₂ (clean grid, high mileage); Bogotá ≈ 720 tCO₂; Houston ≈ 510 tCO₂ (fossil-heavy grid in the early years recovers later as Texas wind/solar share grows). The Berlin-vs-Houston gap shrinks from 1.9× in 2024 to 1.3× by 2033 as the US grid decarbonises.
  • Per-bus NPV at s = 0.5 and r = 4% [illustrative]: Berlin ≈ +USD 165k (positive — electrification pays for itself); Bogotá ≈ +USD 60k; Houston ≈ −USD 80k (negative without a carbon-credit revenue stream).
  • The MILP roadmap is not linear: optimal Berlin schedule front-loads procurement (electrify ≈ 65% of fleet by 2028) to capture larger early CO₂ reductions against the slowly-decarbonising baseline. Houston back-loads (≈ 35% by 2028, 100% by 2033) because the financial case improves as battery prices fall and the ERCOT grid cleans up. Bogotá is roughly linear at ~10% / year because depot capacity, not finance, is the binding constraint.
  • Sensitivity: NPV is most sensitive to (a) the discount rate r (Spearman ρ = −0.61 against NPV across Monte Carlo), (b) the diesel-price trajectory, and (c) the subsidy share s. Grid intensity matters for CO₂ but not for NPV. Battery replacement cost in year 8 is the largest single operating-cost lever.
  • Carbon-credit revenue at USD 50/tCO₂ flips Houston's per-bus NPV from −USD 80k to +USD 35k [illustrative]. This is the single largest policy lever for fossil-heavy-grid cities.

Recommendations.

  1. Pursue a city-specific roadmap: front-load in clean-grid cities, back-load in fossil-grid cities, near-linear where depot capacity binds. A single "10% / year" rule destroys roughly 15–25% of the available NPV [illustrative].
  2. For boards that have to choose one number: plan around the depot/charger ramp, not the bus procurement. Charger installation lead time is the most common binding constraint we observed in the MILP across realistic parameter sweeps.
  3. Make the carbon-credit revenue stream explicit in the financial model. Without it, fossil-grid cities appear to lose money on electrification even though life-cycle emissions clearly fall.
  4. Re-solve the MILP each year as battery prices, grid intensity, and subsidy programs update — the 10-year plan is a rolling plan, not a fixed plan.

1. Introduction and Background

Urban bus fleets are responsible for a disproportionate share of municipal greenhouse-gas emissions: a typical 40-foot diesel transit bus drives ~40,000 miles per year at ~4.5 mpg, producing roughly 100 tCO₂/year per bus, plus NOx and PM2.5 that disproportionately affect inner-city neighbourhoods (APTA, 2023; EPA, 2023). At the same time, battery-electric transit buses (BEBs) have crossed the threshold of operational viability: ranges of 150–250 miles per charge cover most urban duty cycles (NREL FleetDNA, 2023), and total-cost-of-ownership parity with diesel has been documented in multiple pilots (BloombergNEF, 2023; ICCT, 2023).

The remaining question is therefore not whether to electrify but how fast and in what order. This is a classic operations-research problem: a finite procurement budget over a finite horizon, a capacity-constrained supply chain (chargers and depots, not buses), a stochastic stream of operating savings, and an environmental objective whose value depends on a baseline (diesel + grid) that is itself changing over time.

This paper builds a three-stage model. Part 1 quantifies the per-bus annual CO₂ delta with a time-varying grid intensity, then sums across the fleet to give cumulative emissions saved. Part 2 computes per-cohort NPV with subsidy, fuel/maintenance savings, residual value, and battery-replacement cost. Part 3 combines the two in a MILP that produces a year-by-year procurement schedule. We then apply the model to Bogotá, Berlin, and Houston, and close with a one-page letter to the transit board (Appendix A).

The framing matters for the contest: judges have flagged in past commentaries (COMAP press releases, 2023–24) that they reward papers which (a) treat the grid as time-varying, (b) treat depot capacity as a real constraint, and (c) produce differentiated recommendations across the three cities. A paper that produces the same "linear 10%/year" plan for all three cities is leaving most of the modelling value on the table.

2. Assumptions and Justifications

Every assumption below is used somewhere in Section 4 — we cite the equation where it enters.

  1. Bus duty cycle is constant over the analysis horizon: M = 40,000 mi/bus/year for Houston/Bogotá, 32,000 for Berlin. Why: APTA Public Transportation Fact Book reports US transit-bus mileage in the 35–45k range; European fleets average lower because route density is higher and per-bus utilisation lower (UITP, 2022). Holding mileage constant lets us isolate the electrification effect. (Used in Eq. 1.)
  2. Diesel emissions factor ediesel = 2.68 kgCO₂ per mile. Why: EPA emissions factor of 10.18 kgCO₂ per gallon ÷ 3.8 mpg (transit-bus average, FleetDNA) ≈ 2.68. Includes well-to-wheel via the standard EPA upstream multiplier (1.20×). (Used in Eq. 1.)
  3. Battery-electric bus energy use η = 2.1 kWh per mile, plug-to-wheel. Why: NREL FleetDNA reports a 1.9–2.4 kWh/mi range across 40-ft BEBs in real US service, median 2.1; we use the median and test the range in Section 7. (Used in Eq. 1.)
  4. Grid intensity egrid(t) declines linearly from a city-specific 2024 value to a city-specific 2033 value. Why: IEA World Energy Outlook 2023 projects a roughly linear decline in OECD grid intensity 2020–2035 in the Stated-Policies scenario; the linear fit is within ±10% of the IEA curve over our window. (Used in Eq. 1.)
  5. Upfront cost per BEB is USD 750k in 2024, falling 3%/year (real) to USD 575k in 2033. Why: ICCT (2023) and BloombergNEF (2023) bus-price surveys; 3%/year is the consensus learning rate for BEBs in this decade. Depot/charger capex is treated separately at USD 150k per bus equivalent. (Used in Eq. 3.)
  6. Diesel price trajectory follows EIA AEO 2023 reference case in real USD/gallon. Why: AEO is the standard scenario for US planning; we apply local price levels (Bogotá, Berlin) by a country-specific multiplier reported in IEA energy prices and taxes. (Used in Eq. 4.)
  7. BEB battery is replaced once in year 8 at 35% of original bus capex. Why: Proterra and BYD spec sheets quote 6–10 year battery-warranty windows; transit operators budget for one mid-life replacement. 35% of capex matches the BloombergNEF 2023 pack price relative to bus price. (Used in Eq. 4.)
  8. Discount rate r = 4% real for municipalities. Why: US municipal bond yields (10-yr AAA) net of inflation sit at ~3–4% in 2024; FTA cost-benefit guidance defaults to 3–7%. We use 4% and test 3% and 6% in Section 7. (Used in Eq. 5.)
  9. Depot/charger capacity ramps according to a city-specific schedule ct; no more than ct buses can be electrified in year t. Why: Real-world bottleneck — depot upgrades and grid interconnections take 12–36 months and are usually the binding constraint, not bus availability (FTA Low-No reports 2020–2023). (Used in Eq. 7 constraints.)
  10. Subsidy share s applies only to upfront capex, not to operating costs or battery replacement. Why: FTA Low- and No-Emission grants, the EU Clean Vehicles Directive funds, and the Colombian national e-bus program all operate as capex offsets, not opex offsets. (Used in Eq. 3.)

3. Variables and Notation

SymbolMeaningUnits
tYear index (0 = 2024, 9 = 2033, horizon T = 15 for NPV tail)
NTotal fleet size (city-specific)buses
xtBuses procured (electrified) in year tbuses
ntBEBs in service in year t, nt = Στ≤t xτbuses
MAnnual miles per busmi / bus / yr
edieselDiesel emissions factor (well-to-wheel)kgCO₂ / mi
egrid(t)Grid CO₂ intensity in year tkgCO₂ / kWh
ηBEB energy intensity (plug-to-wheel)kWh / mi
ΔEtAnnual per-bus CO₂ saving in year tkgCO₂ / bus / yr
C0(t)Upfront BEB cost in year t (incl. share of depot)USD
sSubsidy share, s ∈ [0, 0.5]
BτAnnual benefit cashflow (fuel + maint. savings + credits)USD / bus / yr
OτAnnual operating-cost delta (electricity + admin)USD / bus / yr
RTResidual value of bus at end of horizonUSD / bus
rReal discount rate
NPVtPer-bus NPV for a bus bought in year tUSD
ctDepot/charger capacity ramp ceiling in year tbuses / yr
pCO₂Carbon credit priceUSD / tCO₂
λMILP trade-off weight (NPV vs. emissions saved)USD / tCO₂

4. Model Formulation

4.1 Part 1 — Per-bus annual CO₂ saving

The diesel baseline burns M/mpg gallons per year, producing M · ediesel kgCO₂. The BEB consumes M · η kWh, producing M · η · egrid(t) kgCO₂. The annual per-bus delta is therefore:

Equation (1) — annual per-bus CO₂ saving:

ΔE_t = M · ( e_diesel  −  η · e_grid(t) )       [kgCO₂ / bus / yr]

This is positive whenever egrid(t) < ediesel / η ≈ 2.68 / 2.1 ≈ 1.28 kgCO₂/kWh. The dirtiest grid in our scenario set (Houston / ERCOT 2024) sits at ~0.40 kgCO₂/kWh, so electrification reduces emissions even on day one in all three cities.

Equation (2) — grid-intensity time path (linear interpolation, IEA WEO 2023 Stated Policies):

e_grid(t) = e_grid(0) + ( e_grid(9) − e_grid(0) ) · ( t / 9 )

Cumulative fleet CO₂ saving over the 10-year horizon, given a schedule nt of BEBs in service in year t:

Equation (3) — fleet cumulative CO₂ saved:

S = Σ_{t=0..9} n_t · ΔE_t                       [kgCO₂]

4.2 Part 2 — Per-cohort NPV

For a bus procured in year t, with subsidy share s, the year-t upfront cost after subsidy is C0(t) · (1 − s). The annual net benefit in year t+τ is BτOτ, with

Equation (4) — annual net benefit cashflow:

B_τ − O_τ  =  ( diesel_cost_τ  −  electricity_cost_τ )
            + ( maint_diesel  −  maint_BEB )
            + p_CO2 · ΔE_{t+τ} / 1000
            − ( battery_repl  if  τ = 8  else  0 )

where diesel_cost is M/mpg · price_dieselτ, electricity_cost is M·η·price_kWhτ, the maintenance delta is roughly USD 0.18/mi savings (NREL FleetDNA 2023), and the battery replacement in year 8 is 35% of the original bus capex.

Equation (5) — per-cohort NPV (15-year horizon from procurement year):

NPV_t  =  −C_0(t) · (1 − s)
       +  Σ_{τ=1..15}  ( B_τ − O_τ ) / (1 + r)^τ
       +  R_T / (1 + r)^15

where RT is the residual value of the bus at end of analysis, set at 10% of original capex (a conservative figure consistent with FTA useful-life guidance of 12 years for transit buses).

4.3 Total programme NPV

Equation (6) — total programme NPV across all cohorts:

NPV_total  =  Σ_{t=0..9}  x_t · NPV_t

Note that NPVt itself depends on t through (a) the upfront cost falling with the learning curve, (b) the grid intensity entering the carbon-credit term, and (c) fuel-price drift. We pre-compute NPVt for each t ∈ {0..9} and treat them as coefficients in the MILP.

4.4 Part 3 — MILP for the procurement schedule

The decision variables are the xt (buses procured in year t), integer and non-negative. The objective trades dollars against emissions through a weight λ in USD-per-tCO₂. Setting λ = pCO₂ reproduces a pure-financial objective with the carbon credit already inside NPVt; setting λ > pCO₂ reflects a board that values avoided emissions above their market price.

Equation (7) — MILP formulation:

maximise   Σ_{t=0..9}  x_t · NPV_t  +  λ · S(x) / 1000

subject to:
   (a)  Σ_{t=0..9} x_t  =  N                       (full conversion by 2033)
   (b)  x_t  ≤  c_t                                (depot capacity ramp)
   (c)  n_t  =  Σ_{τ≤t} x_τ  ≤  N                  (fleet bound, no over-build)
   (d)  Σ_{τ≤t} x_τ  ≥  m_t                        (minimum cumulative, optional policy floor)
   (e)  x_t  ∈  ℤ_{≥0}                             (integer procurement)

where S(x) is the cumulative CO₂ saving (Eq. 3) expressed as a linear function of x. The expression nt = Στ≤t xτ is linear in x, so S(x) is linear and the problem is a pure MILP solvable by PuLP/CBC in < 1 s.

4.5 Differentiating the three cities

The same Equations (1)–(7) apply to all three cities; only the parameters change.

CityN (fleet)M (mi/yr)egrid 2024 → 2033 (kgCO₂/kWh) Subsidy share sDepot ramp ct (buses/yr)
Bogotá1,50040,0000.16 → 0.100.40120 → 220
Berlin1,40032,0000.34 → 0.120.50100 → 200
Houston1,20040,0000.40 → 0.180.2560 → 180

All values [illustrative] — calibrated from TransMilenio, BVG, and METRO annual reports and the IEA grid-intensity dataset (2023). Bogotá's grid is already clean (hydro-dominated); Berlin's decarbonises sharply as coal phases out; Houston's improves more slowly but starts dirty.

5. Solution and Computational Approach

The full pipeline fits in a single Python module: emissions and NPV computation in NumPy/pandas, the MILP in PuLP, and Monte Carlo sensitivity in plain loops. The sketch below contains the core routines a HiMCM team can realistically write and debug inside the 14-day window. It runs end-to-end on three city-parameter dicts assembled from the references.

"""himcm_2023b.py — Life-cycle CO2 + NPV + MILP roadmap for HiMCM 2023 Problem B."""
import numpy as np
import pandas as pd
import pulp

YEARS = list(range(10))                  # 0=2024 .. 9=2033
NPV_HORIZON = 15                         # years of cashflow per bus

CITIES = {
    "Bogota":  dict(N=1500, M=40000, e0=0.16, e9=0.10, s=0.40,
                    cap=np.linspace(120, 220, 10).astype(int),
                    diesel_price=1.05, kwh_price=0.09, mpg=3.8),
    "Berlin":  dict(N=1400, M=32000, e0=0.34, e9=0.12, s=0.50,
                    cap=np.linspace(100, 200, 10).astype(int),
                    diesel_price=1.60, kwh_price=0.22, mpg=3.8),
    "Houston": dict(N=1200, M=40000, e0=0.40, e9=0.18, s=0.25,
                    cap=np.linspace(60, 180, 10).astype(int),
                    diesel_price=0.95, kwh_price=0.11, mpg=3.8),
}

# Shared parameters
E_DIESEL = 2.68          # kgCO2 / mi (EPA well-to-wheel)
ETA = 2.10               # kWh / mi  (NREL FleetDNA)
C0_2024 = 750_000        # USD per BEB
LEARN = 0.97             # 3% annual cost decline
MAINT_DELTA = 0.18       # USD/mi savings (diesel - BEB)
BATT_FRAC = 0.35         # battery replacement = 35% of C0
RESIDUAL = 0.10
DISCOUNT = 0.04
P_CO2 = 50.0             # USD / tCO2 (illustrative credit price)
LAMBDA = 50.0            # MILP weight, USD/tCO2

def grid_intensity(city, t):
    return city["e0"] + (city["e9"] - city["e0"]) * (t / 9.0)

def annual_co2_saving(city, t):
    """kgCO2 saved per bus in year t (relative to diesel baseline)."""
    return city["M"] * (E_DIESEL - ETA * grid_intensity(city, t))

def npv_cohort(city, t_buy):
    """Per-bus NPV for a bus procured in year t_buy, 15-yr horizon."""
    C0 = C0_2024 * (LEARN ** t_buy)
    npv = -C0 * (1 - city["s"])
    for tau in range(1, NPV_HORIZON + 1):
        t = min(t_buy + tau, 9)                  # post-2033 grid frozen at 2033 level
        # fuel + maintenance savings
        diesel_cost = city["M"] / city["mpg"] * city["diesel_price"] * (1.02 ** tau)
        elec_cost   = city["M"] * ETA * city["kwh_price"] * (1.01 ** tau)
        maint_sav   = city["M"] * MAINT_DELTA
        credit      = P_CO2 * annual_co2_saving(city, t) / 1000.0
        cash = (diesel_cost - elec_cost) + maint_sav + credit
        if tau == 8:
            cash -= BATT_FRAC * C0
        npv += cash / (1 + DISCOUNT) ** tau
    npv += RESIDUAL * C0 / (1 + DISCOUNT) ** NPV_HORIZON
    return npv

def solve_roadmap(city):
    """MILP: choose x_t to maximise NPV + lambda * cumulative CO2 saved."""
    npv_t  = [npv_cohort(city, t) for t in YEARS]
    save_t = [annual_co2_saving(city, t) for t in YEARS]   # kg/bus/yr in year t
    prob = pulp.LpProblem("roadmap", pulp.LpMaximize)
    x = [pulp.LpVariable(f"x_{t}", lowBound=0, cat="Integer") for t in YEARS]
    # cumulative buses in service in year t = sum_{tau<=t} x_tau
    # cumulative CO2 = sum_t (sum_{tau<=t} x_tau) * save_t
    co2 = pulp.lpSum(pulp.lpSum(x[tau] for tau in range(t + 1)) * save_t[t] for t in YEARS)
    prob += pulp.lpSum(x[t] * npv_t[t] for t in YEARS) + LAMBDA * co2 / 1000.0
    prob += pulp.lpSum(x[t] for t in YEARS) == city["N"]
    for t in YEARS:
        prob += x[t] <= int(city["cap"][t])
    prob.solve(pulp.PULP_CBC_CMD(msg=0))
    schedule = [int(pulp.value(v)) for v in x]
    return dict(schedule=schedule, npv_t=npv_t, save_t=save_t,
                total_npv=sum(s * n for s, n in zip(schedule, npv_t)),
                total_co2=sum(sum(schedule[:t+1]) * save_t[t] for t in YEARS))

if __name__ == "__main__":
    rows = []
    for name, par in CITIES.items():
        res = solve_roadmap(par)
        rows.append(dict(city=name, schedule=res["schedule"],
                         npv_per_bus=round(res["total_npv"] / par["N"]),
                         co2_kt=round(res["total_co2"] / 1e6, 1)))
    print(pd.DataFrame(rows).to_string(index=False))

The Monte Carlo wrapper for Section 7 is ~25 additional lines: sample r, diesel_price, η, and battery_replacement_year from triangular distributions, re-solve the MILP, record total NPV and total CO₂, and rank by Spearman correlation. CBC solves all three city instances in under one second on a laptop.

6. Results

6.1 Part 1 — cumulative CO₂ saved

CityPer-bus annual saving 20242033 10-yr fleet saving under optimal schedule
Bogotá93 tCO₂99 tCO₂510 kt
Berlin63 tCO₂78 tCO₂590 kt
Houston74 tCO₂92 tCO₂380 kt

All values [illustrative]. Berlin's fleet saving exceeds Bogotá's despite a higher 2024 grid intensity because the Berlin grid decarbonises so sharply over the horizon. Houston's lower total reflects a smaller fleet and a slower grid transition.

[Figure 1: line plot of annual per-bus CO₂ saving 2024–2033 for each city. Bogotá nearly flat (already clean grid), Berlin steep upward slope (grid cleaning), Houston gentle upward slope.]

6.2 Part 2 — per-cohort NPV

CityNPV 2024 cohortNPV 2033 cohortCohort with highest NPV
Bogotá+USD 45k+USD 90k2031 (USD 96k)
Berlin+USD 180k+USD 150k2024 (USD 180k)
Houston−USD 110k+USD 5k2033 (USD 5k)

All values [illustrative]. The cohort with the highest NPV is the one the MILP front-loads (subject to the depot ramp). Berlin's 2024 cohort wins because high diesel price + high subsidy + fast-cleaning grid stack favourably; Houston's earliest cohorts are NPV-negative because the credit revenue does not cover the early-year capex differential.

6.3 Part 3 — MILP roadmap

Year20242025202620272028 20292030203120322033Total
Bogotá xt 120130140150160 1701801401501601,500
Berlin xt 100120160180200 20018014080401,400
Houston xt 607080100120 1401601701801201,200

All values [illustrative]. Bogotá is roughly linear (depot-limited each year). Berlin front-loads aggressively because every NPVt is positive and 2024 dollars beat 2033 dollars. Houston back-loads because the early-year NPV is negative; the MILP buys as few buses as the terminal constraint allows in 2024–2027 and ramps up only once NPVt turns positive in ~2029.

[Figure 2: stacked bar chart of fleet composition 2024–2033 by city, BEB share rising from 0% to 100%.]

[Figure 3: efficient frontier of total programme NPV vs. cumulative CO₂ saved as λ sweeps from 0 to USD 200/tCO₂. Houston's curve is the steepest — small NPV concessions buy large CO₂ gains — and Berlin's is the flattest because Berlin is already on the high-NPV / high-CO₂ corner.]

7. Sensitivity Analysis

We vary three parameter families and report how the conclusions change.

7.1 Discount rate and subsidy share

ScenarioBogotá NPV/busBerlin NPV/busHouston NPV/bus
Baseline (r=4%, s as table)+60k+165k−80k
r = 3%+85k+205k−40k
r = 6%+20k+105k−135k
s = 0 (no subsidy)−240k−210k−270k
s = 0.5 (max)+105k+165k+15k

All values [illustrative]. Conclusion: subsidy share is the single biggest finance lever — removing the subsidy makes electrification NPV-negative in all three cities. The discount rate matters but does not flip signs at realistic values. The order-of-cities (Berlin > Bogotá > Houston) is preserved across all scenarios.

7.2 Carbon credit price

Sweep pCO₂ ∈ {0, 25, 50, 100} USD/tCO₂. Houston's per-bus NPV crosses zero at pCO₂ ≈ 70 USD/tCO₂ [illustrative]; below that, electrification depends entirely on the subsidy. Berlin's NPV is essentially flat in pCO₂ because the financial case is already strong from fuel + maintenance savings alone. Policy implication: carbon-pricing debates matter most in fossil-grid cities.

7.3 Monte Carlo Spearman ranking

1,000 Monte Carlo draws over (r, diesel_price, η, battery_replacement_year, egrid). Spearman ρ between each parameter and total programme NPV, pooled across cities:

ParameterSpearman ρ vs. NPVInterpretation
Discount rate r−0.61Strongest single driver.
Diesel price trajectory+0.48Higher diesel ⇒ bigger savings.
Subsidy share s+0.44Direct capex offset.
Battery replacement year+0.21Later replacement ⇒ deeper discount.
BEB energy use η−0.18Higher kWh/mi ⇒ smaller savings.
Grid intensity egrid−0.07Matters for CO₂, not NPV.

All values [illustrative]. The decoupling of grid intensity (drives CO₂) from NPV is the single most useful diagnostic in the model — it tells boards that the financial case and the environmental case have different sensitivities and need to be advocated for separately.

8. Strengths and Weaknesses

Strengths

  • Time-varying grid intensity. Most student papers freeze egrid at the 2024 value. Allowing it to decline over the horizon reverses the Berlin-vs-Houston comparison by 2033 and changes the MILP's preferred timing — a real modelling insight.
  • MILP, not just NPV. The schedule xt is an output, not an input. Many submissions assume a linear 10%/year rollout; we show the optimum is strongly non-linear and city- specific.
  • Three structurally different cities. Front-loaded (Berlin), back-loaded (Houston), capacity-limited linear (Bogotá) — every term in the model is doing real work in at least one city.
  • Depot/charger ramp as a hard constraint. Real-world transit electrification is almost always charger-limited, not bus-limited. Treating this as an inequality rather than ignoring it changes the optimum materially.
  • Carbon credit treated as a parameter, not a fact. Boards can read the trade-off directly from Section 7.2.

Weaknesses

  • Deterministic NPV. Diesel prices and grid intensity are treated as known trajectories. A real-options framing with stochastic prices would tighten the case for delaying procurement in Houston (and weaken it in Berlin).
  • Single battery-replacement event. Real BEB battery degradation is gradual; modelling it as a step at year 8 understates early-life range loss and the operational fleet-availability hit.
  • No route-level routing. The model assumes any BEB can replace any diesel bus. In practice, long routes (≥ 200 mi/day) may exceed the BEB range envelope; a route-level assignment problem sits below this fleet-level model.
  • Subsidy treated as exogenous and constant. Real subsidies are competitive grants with annual application cycles; the assumption that s applies uniformly is optimistic.
  • Co-pollutants ignored in the headline. NOx and PM2.5 are often the most defensible health justification for electrification, but we only report CO₂. An extension would add a monetised health-damage term to the objective.

9. Future Improvements

  1. Replace the deterministic NPV with a stochastic-DCF (real options) treatment, with diesel price and battery price as correlated GBMs. This justifies a "wait-and-see" option value for Houston's early cohorts.
  2. Couple the fleet-level MILP to a route-level vehicle-scheduling problem (VSP) that respects per-route range and depot-return constraints. The output would be a route-by-route electrification ranking, not just a count per year.
  3. Add monetised NOx and PM2.5 damages from EPA BenMAP / EU CAFE values to the objective. Public-health benefits often dominate CO₂ benefits in dense urban centres.
  4. Build an interactive Streamlit dashboard where transit-board members slide subsidy share, carbon price, and discount rate to see the roadmap shift live.
  5. Extend to mixed fleets (BEB + hydrogen + plug-in hybrid) as a second decision variable per cohort, appropriate for cities with very long routes (e.g., Houston Park-and-Ride).

10. References

  • COMAP (2023). HiMCM 2023 Problem B: Charging Ahead with E-buses. contest.comap.com.
  • American Public Transportation Association (2023). 2023 Public Transportation Fact Book. apta.com.
  • NREL FleetDNA (2023). Commercial Fleet Vehicle Operating Data — Transit Bus. nrel.gov/fleetdna.
  • US EPA (2023). Emission Factors for Greenhouse Gas Inventories. epa.gov/climateleadership.
  • US DOE Alternative Fuels Data Center (2024). Electric Vehicle Benefits and Considerations: Transit Buses. afdc.energy.gov.
  • International Energy Agency (2023). World Energy Outlook 2023. Paris: IEA. iea.org.
  • International Council on Clean Transportation (2023). Total cost of ownership of electric transit buses in the United States, 2023 update. theicct.org.
  • BloombergNEF (2023). Electric Vehicle Outlook 2023. about.bnef.com.
  • Proterra (2022). Catalyst E2 / ZX5 Transit Bus Specifications. Burlingame, CA: Proterra Inc. (Spec sheets available via Proterra press releases.)
  • BYD Auto (2023). K9 / K7M Transit Bus Specifications. Shenzhen: BYD Company Ltd.
  • Federal Transit Administration (2023). Low- and No-Emission Vehicle Program (Section 5339(c)) — Project Selections FY 2020–2023. transit.dot.gov/lowno.
  • UITP (2022). World Metro Figures and Bus Sector Statistics. Brussels: International Association of Public Transport.
  • US EIA (2023). Annual Energy Outlook 2023. eia.gov/outlooks/aeo.
  • Mitchell, S., O'Sullivan, M., & Dunning, I. (2011). PuLP: a linear programming toolkit for Python. University of Auckland. github.com/coin-or/pulp.
  • Forrest, J., et al. (2024). COIN-OR Branch and Cut (CBC) Solver. github.com/coin-or/Cbc.
  • TransMilenio S.A. (2023). Informe de Gestión 2022. Bogotá D.C.
  • Berliner Verkehrsbetriebe (BVG) (2023). Geschäftsbericht 2022 — E-Bus-Strategie. Berlin.
  • METRO Houston (2023). Zero Emissions Bus Roadmap — Board Workshop Materials. Houston, TX.
  • Saltelli, A., Ratto, M., Andres, T., et al. (2008). Global Sensitivity Analysis: The Primer. Wiley.

11. Report on Use of AI (Appendix, does not count toward 25 pages)

Per COMAP rules in effect for the 2023 contest cycle, all generative-AI use must be disclosed.

#ToolWhere usedPrompt summaryHow the team verified output
1ChatGPT (GPT-4)Section 4.2, NPV formulation"Refresh: standard form of a per-cohort discounted-cashflow NPV with residual value and a mid-life step replacement cost."Cross-checked against Brealey, Myers & Allen Principles of Corporate Finance, 12th ed. Worked one cohort by hand against the formula.
2ChatGPT (GPT-4)Section 5, PuLP skeleton"MILP in PuLP: integer x_t with sum equal to N, per-year ceiling, maximise linear objective with a cumulative term."Read line-by-line; rewrote the cumulative-CO₂ expression in the form lpSum(lpSum(...)) to keep linearity; validated against a brute-force enumeration on a small N=12, 10-year toy problem.
3GitHub CopilotSection 5, plotting and Monte Carlo wrapperAutocomplete on matplotlib stacked-bar code and the Spearman-correlation reporting loop.Inspected each figure visually; verified Spearman ρ against scipy.stats.spearmanr on a held-out subset of draws.
4NoneSections 1–3, 6 narrative, 8–9, recommendation letterWritten manually by team members; AI not consulted.

The full prompt/response logs are included in appendix_AI_logs.pdf (separate file submitted alongside this paper, also outside the 25-page limit).

Reminder to the reader. The numerical results in this document are illustrative. They show what a complete HiMCM paper looks like when filled with plausible numbers — not what a proper run on a calibrated dataset would produce. Treat this as scaffolding: replace every value flagged [illustrative] with your own computation before submitting anything.