← 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.
[illustrative] — they are plausible
placeholders, not authoritative findings.
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.
- 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]. - 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.
- 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.
- 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.
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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
| Symbol | Meaning | Units |
|---|---|---|
| t | Year index (0 = 2024, 9 = 2033, horizon T = 15 for NPV tail) | — |
| N | Total fleet size (city-specific) | buses |
| xt | Buses procured (electrified) in year t | buses |
| nt | BEBs in service in year t, nt = Στ≤t xτ | buses |
| M | Annual miles per bus | mi / bus / yr |
| ediesel | Diesel emissions factor (well-to-wheel) | kgCO₂ / mi |
| egrid(t) | Grid CO₂ intensity in year t | kgCO₂ / kWh |
| η | BEB energy intensity (plug-to-wheel) | kWh / mi |
| ΔEt | Annual per-bus CO₂ saving in year t | kgCO₂ / bus / yr |
| C0(t) | Upfront BEB cost in year t (incl. share of depot) | USD |
| s | Subsidy 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 |
| RT | Residual value of bus at end of horizon | USD / bus |
| r | Real discount rate | — |
| NPVt | Per-bus NPV for a bus bought in year t | USD |
| ct | Depot/charger capacity ramp ceiling in year t | buses / yr |
| pCO₂ | Carbon credit price | USD / 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.
| City | N (fleet) | M (mi/yr) | egrid 2024 → 2033 (kgCO₂/kWh) | Subsidy share s | Depot ramp ct (buses/yr) |
|---|---|---|---|---|---|
| Bogotá | 1,500 | 40,000 | 0.16 → 0.10 | 0.40 | 120 → 220 |
| Berlin | 1,400 | 32,000 | 0.34 → 0.12 | 0.50 | 100 → 200 |
| Houston | 1,200 | 40,000 | 0.40 → 0.18 | 0.25 | 60 → 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
| City | Per-bus annual saving 2024 | 2033 | 10-yr fleet saving under optimal schedule |
|---|---|---|---|
| Bogotá | 93 tCO₂ | 99 tCO₂ | 510 kt |
| Berlin | 63 tCO₂ | 78 tCO₂ | 590 kt |
| Houston | 74 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
| City | NPV 2024 cohort | NPV 2033 cohort | Cohort with highest NPV |
|---|---|---|---|
| Bogotá | +USD 45k | +USD 90k | 2031 (USD 96k) |
| Berlin | +USD 180k | +USD 150k | 2024 (USD 180k) |
| Houston | −USD 110k | +USD 5k | 2033 (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
| Year | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 | 2030 | 2031 | 2032 | 2033 | Total |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Bogotá xt | 120 | 130 | 140 | 150 | 160 | 170 | 180 | 140 | 150 | 160 | 1,500 |
| Berlin xt | 100 | 120 | 160 | 180 | 200 | 200 | 180 | 140 | 80 | 40 | 1,400 |
| Houston xt | 60 | 70 | 80 | 100 | 120 | 140 | 160 | 170 | 180 | 120 | 1,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
| Scenario | Bogotá NPV/bus | Berlin NPV/bus | Houston 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:
| Parameter | Spearman ρ vs. NPV | Interpretation |
|---|---|---|
| Discount rate r | −0.61 | Strongest single driver. |
| Diesel price trajectory | +0.48 | Higher diesel ⇒ bigger savings. |
| Subsidy share s | +0.44 | Direct capex offset. |
| Battery replacement year | +0.21 | Later replacement ⇒ deeper discount. |
| BEB energy use η | −0.18 | Higher kWh/mi ⇒ smaller savings. |
| Grid intensity egrid | −0.07 | Matters 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
- 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.
- 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.
- 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.
- Build an interactive Streamlit dashboard where transit-board members slide subsidy share, carbon price, and discount rate to see the roadmap shift live.
- 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.
| # | Tool | Where used | Prompt summary | How the team verified output |
|---|---|---|---|---|
| 1 | ChatGPT (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. |
| 2 | ChatGPT (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. |
| 3 | GitHub Copilot | Section 5, plotting and Monte Carlo wrapper | Autocomplete 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. |
| 4 | None | Sections 1–3, 6 narrative, 8–9, recommendation letter | — | Written 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).
[illustrative] with your own computation before submitting anything.