THE PLAN. 500 new fast-charging sites in the United States bring 14,959,825 more people within 10 km of one, lifting coverage from 83.22% to 87.73%. The same budget in Mexico brings 24,965,167 people into range, lifting coverage from 66.04% to 85.85%. The sites are chosen, not described: each is a census tract or locality centre, and the full selection is reproducible from the published code.
A charger siting plan, and a proof that almost nothing beats it
Given a budget of 500 new fast-charging sites, where should they go to bring the most people within 10 km of one — and how far from optimal is the answer?
What the analysis found, including the results that went against us
Each of these came out of the run. None has been softened.
Coverage gained per site budget
Percentage points of population newly brought within range, against the number of new sites, for the United States and Mexico. Mexico gains far more per site because it starts from a much thinner network.
run.py section 6: greedy plus local search at each budget.
AND A PROOF THAT ALMOST NOTHING BEATS IT. No arrangement of 500 sites anywhere in either country covers more than 0.63% more people than this plan does. That is not a solver's claim — the bound is the Lagrangian of the relaxed problem, valid for any non-negative multipliers, so three lines of numpy verify it independently of whether the solver converged. Maximum coverage is NP-hard and a tool asserting optimality at this size would be wrong; a certificate is what can honestly be offered instead. At 2,000 sites the Mexican plan is proven optimal outright, with a gap of exactly zero.
Certified optimality gap
The proven distance between the published plan and the best any plan of the same size could achieve, as a percentage. Under one per cent throughout.
run.py section 6: LP dual certificate against the greedy lower bound.
A WIDELY REPRODUCIBLE STATISTIC ABOUT THE MEXICAN REGISTRY IS WRONG. Measuring a station's coordinate against the median coordinate of its own state suggests 27% are badly placed — but that measures how large a state is, not how wrong a coordinate is, and a state with ten stations spread across it scores 100%. Judged against the nearest INEGI locality instead, 186 of 2,046 stations (9.09%) fall in a different state than the one they claim.
Coverage by radius
Existing population coverage at four travel radii, for the United States and Mexico. The radius is an assumption, so it is swept rather than chosen.
run.py section 7: baseline coverage at each radius.
AND MOST OF WHAT LOOKS LIKE ERROR IS VOCABULARY. Comparing the two registries' state names directly gives 23.95%. Four pairs differ by wording rather than by place — one registry writes the state of Mexico, Veracruz, Michoacan and Coahuila in their short forms and the other in their constitutional ones. Crosswalking those four takes the measured error to 9.09%. Without that step this project would have published an error rate about itself that was seventy per cent too high.
THE FILTER COSTS ALMOST NO COVERAGE AND NO GEOGRAPHY. Dropping the wrong-state stations and the 12 carrying the country's geographic centroid as a placeholder keeps 1,859 of 2,046 stations (90.9%), retains all 32 states, and shifts which states are represented by only 2.54 percentage points. The data supports siting, once it is cleaned in a way that can be checked.
CANADA'S CHARGER REGISTRY IS AN AMERICAN SYSTEM THAT EXCLUDES CANADA. Canada's demand side is complete and verified here — 56,686 dissemination areas totalling 36,991,981 people, with 0 missing coordinates. What is missing is the stations. The only registry obtainable without a key is the US Department of Transportation's mirror, and it contains 0 Canadian rows. Canada's own national locator is the same American service embedded in a Canadian page. So Canada gets a demand layer and no plan, and the reason is registry access rather than Canadian statistics.
SOME PEOPLE CANNOT BE REACHED BY ANY BUDGET. 4,247,037 people in the United States and 8,429,625 in Mexico live more than 10 km from any settlement of 2,500 or more. No number of new sites reaches them under this model, because the constraint is where settlements are rather than where chargers are. That is a fact about population geography, and it bounds what any siting exercise can promise.
THE SAME BUDGET BUYS FAR MORE IN MEXICO. 500 sites move Mexican coverage by 19.81 percentage points against 4.51 in the United States, because Mexico starts from 66.04% against 83.22%. The two figures are computed by one method but they are not a league table: a US tract and a Mexican locality are different objects, and a locality can be a single household.
Full results tables
The plan, at four budgets
| New sites | US newly covered | US total | Mexico newly covered | Mexico total | Worst certified gap |
|---|---|---|---|---|---|
| 250 | 9,634,976 | 86.12% | 18,278,863 | 80.55% | 0.431% |
| 500 | 14,959,825 | 87.73% | 24,965,167 | 85.85% | 0.626% |
| 1000 | 22,313,475 | 89.95% | 31,623,417 | 91.14% | 0.540% |
| 2000 | 31,458,867 | 92.71% | 34,361,233 | 93.31% | 0.539% |
Coverage radius is an assumption
| Radius | US covered now | US gain | Mexico covered now | Mexico gain |
|---|---|---|---|---|
| 10 km | 83.22% | +4.51pp | 66.04% | +19.81pp |
| 15 km | 89.47% | +4.11pp | 72.86% | +19.77pp |
| 25 km | 95.37% | +3.20pp | 81.18% | +17.11pp |
| 40 km | 98.45% | +1.45pp | 88.61% | +10.95pp |
What the mexican coordinate filter does
| Measure | Value |
|---|---|
| Stations registered | 2,046 |
| Coordinates landing in the wrong state | 186 (9.09%) |
| Same measure without the state-name crosswalk | 23.95% |
| Placeholder coordinates at the country centroid | 12 |
| Stations kept | 1,859 (90.9%) |
| States still represented | 32 of 32 |
| Shift in which states are represented | 2.54 pp |
Limitations
Stated by the analysis, not added afterwards. A project without these is not finished.
- Proximity is not demand, and this is the limitation that matters most. No station-level utilisation data is published for any of the three countries, so the model maximises the population living near a charger rather than the charging actually served. A plan that maximises covered population may put chargers where few people charge — near homes with driveways rather than on corridors, or in towns whose residents drive combustion cars.
- There is no public dataset of charger installation costs, so the budget is denominated in sites and not in money. Every claim here is 'for this many sites', never 'for this many dollars'. A cost-aware plan would trade fast chargers against slow ones and would look different; that trade cannot be priced from anything published.
- The certificate is specific to these instances. The maximum coverage problem's linear relaxation has a worst-case integrality gap of about 36.8%, so no bound of this kind can promise sub-one-per-cent performance in general. The gaps reported here are proven for these two countries at these budgets and radii, and nothing more.
- The US station snapshot is a mirror rather than the source. The primary AFDC download is behind a form requiring a name, an email address and acceptance of terms, which no script can complete and therefore no reader could reproduce. The USDOT mirror is used instead, and it is a state of the world as at 2026-05-29 — reproducibility bought at the cost of currency.
- The Mexican registry carries no per-row date, so the filing cutoff used elsewhere in this portfolio cannot be applied to it. A digest is the only protection, and the publisher warns that records may be revised retroactively. If the file is republished, the figures here become unreproducible rather than merely stale, and that is stated rather than engineered around.
- Candidate sites are population centres, not parcels of land. Nothing here models grid capacity, land availability, permitting, interconnection queues or the cost of trenching to a substation — all of which decide whether a site on this list could actually be built. The urban threshold of 2,500 is INEGI's own definition rather than a tuned parameter, applied identically in both countries.
- US and Mexican demand units are not comparable objects. A US census tract holds a few thousand people by design; an INEGI locality can be a single dwelling. Coverage percentages are computed per country by one shared method and should be read within a country, not across them.
- Distances are haversine on a sphere, which differs from the WGS84 ellipsoid by roughly half a per cent, and they are straight lines rather than road distance. Real driving distance is longer and varies with the network, so the coverage reported here is an optimistic bound on coverage as a driver would experience it.
Data: Five public registries joined for one siting model: US AFDC alternative fuel stations (USDOT NTAD mirror); US Census 2020 tract centers of population; CFE Electrolineras Publicas en Mexico; INEGI ITER 2020 localities; Statistics Canada 2021 Geographic Attribute File, Five public registries joined for one siting model: US AFDC alternative fuel stations (USDOT NTAD mirror); US Census 2020 tract centers of population; CFE Electrolineras Publicas en Mexico; INEGI ITER 2020 localities; Statistics Canada 2021 Geographic Attribute File, Five public registries joined for one siting model: US AFDC alternative fuel stations (USDOT NTAD mirror); US Census 2020 tract centers of population; CFE Electrolineras Publicas en Mexico; INEGI ITER 2020 localities; Statistics Canada 2021 Geographic Attribute File, Five public registries joined for one siting model: US AFDC alternative fuel stations (USDOT NTAD mirror); US Census 2020 tract centers of population; CFE Electrolineras Publicas en Mexico; INEGI ITER 2020 localities; Statistics Canada 2021 Geographic Attribute File, Five public registries joined for one siting model: US AFDC alternative fuel stations (USDOT NTAD mirror); US Census 2020 tract centers of population; CFE Electrolineras Publicas en Mexico; INEGI ITER 2020 localities; Statistics Canada 2021 Geographic Attribute File, US Government work (17 USC 101) | INEGI Terminos de Libre Uso, which permits commercial exploitation | CC BY 4.0 | Statistics Canada Open Licence. 380,000 rows, US census 2020, Mexico census 2020, Canada census 2021, stations as at 2026-05-29.
Libraries and methods this analysis used
Read from this project's own run.py when the page was built — 721 lines of it. Not a list of everything we know; a list of what this analysis imports and calls.
16 names from NumPy appear in this analysis.
- arcsin
- argmax
- bincount
- clip
- concatenate
- cos
- fromiter
- int32
- int8
- maximum
- ones
- radians
- repeat
- sin
- sort
- sqrt
12 names from pandas appear in this analysis.
- Timestamp
- agg
- astype
- dropna
- fillna
- groupby
- isin
- read_csv
- reset_index
- sort_values
- to_numeric
- value_counts
5 names from SciPy appear in this analysis.
- csr_matrix
- hstack
- identity
- linprog
- vstack
1 names from scikit-learn appear in this analysis.
- BallTree
How every number on this page is checked
A script deletes each result file, re-runs the project and diffs the output. If a headline figure moves, the check fails, and the page does not ship. That is the only reason to believe anything on this page.
Running this method on your own data
The method above transfers; the result will not. Send us a extract and we will tell you what is forecastable in it and what is not, before anyone signs anything.