About the author
dosanko_tousan. 50-year-old stay-at-home dad from Iwamizawa, Hokkaido. Independent AI alignment researcher (GLG Network · Zenodo DOI: 10.5281/zenodo.18691357).
Introduction: "Just Install Chargers" Is Not Enough
Vol.1–4 covered battery physics and operation engineering.
Vol.5 is about infrastructure design.
"Just install chargers" — correct but insufficient. Three questions must be answered for Hokkaido's charging infrastructure to function in winter:
- Where — Geographic design to eliminate charging dead zones
- How fast — Speed vs. user experience tradeoffs
- Does it work in winter? — Equipment specs and maintenance design
Norway achieved 97% EV penetration with 24,000 chargers. Hokkaido's area is about one-quarter of Norway's. Population is about one-tenth.
Question: What would it take for Hokkaido to achieve Norway-level charging density? Is the cost realistic?
1. Norway vs Hokkaido — The Gap in Numbers
from dataclasses import dataclass
@dataclass
class EVInfrastructure:
name: str
ev_count: int
charger_count: int
area_km2: float
population: int
ev_penetration_pct: float
norway = EVInfrastructure("Norway", 700_000, 24_000, 323_802, 5_400_000, 97.0)
hokkaido = EVInfrastructure("Hokkaido", 15_000, 800, 83_424, 5_200_000, 0.6)
def analyze(infra):
return {
"ev_per_charger": round(infra.ev_count / infra.charger_count, 1),
"density_per_1000km2": round(infra.charger_count / infra.area_km2 * 1000, 1),
"per_100k_pop": round(infra.charger_count / infra.population * 100_000, 1),
}
print("=" * 60)
print("Norway vs Hokkaido: EV Charging Infrastructure Comparison")
print("Note: Figures are estimates/approximations")
print("=" * 60)
for infra in [norway, hokkaido]:
a = analyze(infra)
print(f"\n[{infra.name}]")
print(f" EV count : {infra.ev_count:>10,}")
print(f" Charger count : {infra.charger_count:>10,}")
print(f" EV penetration : {infra.ev_penetration_pct:>10.1f}%")
print(f" EVs per charger : {a['ev_per_charger']:>10.1f}")
print(f" Charger density : {a['density_per_1000km2']:>10.1f} /1000km²")
print(f" Chargers per 100k : {a['per_100k_pop']:>10.1f}")
print("\nCharger density gap: ~8× (Norway 74.1 vs Hokkaido 9.6 per 1000km²)")
print("But: uniform distribution is inefficient.")
print("→ Road-corridor charging gap elimination is the right approach.")
2. Geographic Design — Eliminating Charging Dead Zones
2.1 The Physical Basis for the 50km Spacing Rule
From Vol.1's cold-climate range analysis, worst-case scenario at NAF -31°C:
| Vehicle class | Winter range (from NAF data) | Practical range (SOC 80%→20%) |
|---|---|---|
| Best performer | ~355 km | ~213 km |
| Average | ~306 km | ~184 km |
| Worst (older EVs) | ~270 km | ~162 km |
def charging_interval_physics(
wltp_range_km: float = 500,
cold_loss_pct: float = 0.50, # NAF -31°C worst case
soc_buffer_pct: float = 0.20, # 20% reserve on arrival
soc_start_pct: float = 0.80, # 80% on departure
safety_factor: float = 0.80, # Getting lost, traffic, unexpected drain
) -> dict:
"""
Safe charging interval calculation
Designed for worst-case vehicle at worst temperature.
Infrastructure must serve the most vulnerable user.
"""
winter_range = wltp_range_km * (1 - cold_loss_pct)
usable_soc = soc_start_pct - soc_buffer_pct
practical_range = winter_range * usable_soc
safe_interval = practical_range * safety_factor
return {
"winter_range_km": round(winter_range),
"practical_range_km": round(practical_range),
"safe_interval_km": round(safe_interval),
}
print("=" * 65)
print("Charging Interval Physics (NAF -31°C worst case)")
print("Design for the worst case — infrastructure serves all users")
print("=" * 65)
for wltp in [300, 400, 500, 600]:
r = charging_interval_physics(wltp_range_km=wltp)
print(f"\nWLTP {wltp}km:")
print(f" Winter range (-31°C, -50%): {r['winter_range_km']}km")
print(f" Practical (SOC 80%→20%): {r['practical_range_km']}km")
print(f" Safe charging interval: {r['safe_interval_km']}km")
print("\n→ 50km spacing rule covers all vehicles including older WLTP-300km EVs")
print(" (WLTP 500km current vehicles: safe interval ~96km, well above 50km)")
"50km spacing rule" is a conservative design for legacy EVs (WLTP ~300km). Modern 500km+ vehicles could manage 100km intervals theoretically — but infrastructure is designed for the most vulnerable user.
2.2 Hokkaido's Secret Weapon: Michi-no-Eki (Roadside Stations)
Japan's "Michi-no-Eki" (道の駅) roadside rest stations function like highway service areas on regular roads. Hokkaido has 129 of them — the most of any prefecture in Japan.
Average spacing: 50–70km along major routes — almost perfectly aligned with the 50km charging interval rule.
def hokkaido_network_plan(
michi_no_eki: int = 129, # Hokkaido roadside stations (national record)
main_road_km: float = 14_000, # Major road network (estimated)
target_spacing_km: float = 50,
current_chargers: int = 800,
rapid_charger_cost_jpy: int = 8_000_000, # 50kW, installed
) -> dict:
required_spots = main_road_km / target_spacing_km
coverage_pct = min(michi_no_eki / required_spots * 100, 100)
additional = max(required_spots - michi_no_eki, 0)
cost_michi = michi_no_eki * rapid_charger_cost_jpy
cost_additional = additional * rapid_charger_cost_jpy
total_cost = cost_michi + cost_additional
return {
"required_spots": round(required_spots),
"michi_no_eki_coverage_pct": round(coverage_pct, 1),
"additional_spots_needed": round(additional),
"total_cost_jpy": total_cost,
}
plan = hokkaido_network_plan()
print("=" * 60)
print("Hokkaido Charging Network Plan — Michi-no-Eki as Backbone")
print("Approximate estimates. Detailed site surveys required.")
print("=" * 60)
print(f"\nRequired charging spots (50km spacing): {plan['required_spots']}")
print(f"Michi-no-Eki coverage: {plan['michi_no_eki_coverage_pct']}%")
print(f"Additional spots needed: {plan['additional_spots_needed']}")
print(f"\nTotal cost estimate: ¥{plan['total_cost_jpy']/1e8:.1f}B (¥{plan['total_cost_jpy']:,})")
print(f"Hokkaido annual budget (~¥1.4T): {plan['total_cost_jpy']/1.4e12*100:.2f}%")
print(f"\n→ ~¥14B (0.1% of annual budget) largely eliminates charging dead zones")
¥14 billion — 0.1% of Hokkaido's annual budget — to largely eliminate charging dead zones. Hokkaido's 129 michi-no-eki (a national record) are the natural backbone.
3. Winter-Ready Equipment Specifications
3.1 Problems Specific to Hokkaido Winters
Standard chargers don't work in Hokkaido winters:
① Snow burial
→ Connector, panel buried → unusable
→ Fix: Covered installation · snow-melt heaters · elevated mounting
② Freezing
→ Connector/cable freezes → can't insert
→ Fix: Insulated case · heated connector (built-in)
③ Cold-weather equipment failure
→ Power electronics degrade below -20°C · startup fails
→ Fix: Heated equipment enclosure · cold-climate certification
④ Blackout risk (winter storms, earthquakes)
→ EV users stranded without power
→ Fix: UPS · solar+battery backup · V2H capability
3.2 Charger Spec Comparison
from dataclasses import dataclass, field
from typing import List
@dataclass
class ChargerSpec:
name: str
power_kw: float
cold_rated: bool
has_roof: bool
has_heating: bool
has_ups: bool
cost_jpy: int
locations: List[str]
specs = [
ChargerSpec("Standard rapid (50kW)",
50, False, False, False, False, 5_000_000,
["Urban · indoor parking"]),
ChargerSpec("Cold-climate rapid (50kW)",
50, True, True, True, False, 8_000_000,
["Michi-no-Eki · highways · suburban"]),
ChargerSpec("Disaster-ready rapid (90kW)",
90, True, True, True, True, 15_000_000,
["Evacuation centers · hospitals · major michi-no-eki"]),
ChargerSpec("Ultra-rapid (150kW, highway)",
150, True, True, True, False, 20_000_000,
["Highway service areas · major hubs"]),
]
print("=" * 65)
print("Hokkaido Charger Specification Comparison")
print("=" * 65)
for spec in specs:
charge_time = 60 * 0.6 / spec.power_kw * 60
features = [f for f, v in [
("Cold-certified", spec.cold_rated),
("Covered", spec.has_roof),
("Heated", spec.has_heating),
("UPS", spec.has_ups),
] if v]
print(f"\n[{spec.name}]")
print(f" Output: {spec.power_kw}kW · Charge time (20%→80%): {charge_time:.0f}min")
print(f" Cost: ¥{spec.cost_jpy:,}")
print(f" Features: {', '.join(features) if features else 'Standard only'}")
print(f" Best for: {', '.join(spec.locations)}")
print("\n→ Minimum spec for michi-no-eki / highways: Cold-climate rapid (50kW)")
print(" Disaster-designated sites / evacuation centers: 90kW with UPS")
4. ROI Analysis — Why Markets Fail Rural Areas
import numpy as np
def charger_roi(
daily_sessions: float,
avg_kwh: float = 25,
price_jpy_kwh: float = 35,
install_cost: int = 8_000_000,
annual_maintenance: int = 300_000, # includes snow removal, OPEX
lifespan_years: int = 10,
) -> dict:
"""
Charger ROI calculation (conceptual)
Actual returns depend heavily on location, EV penetration, and competition.
Maintenance includes snow removal — critical for Hokkaido.
"""
annual_revenue = daily_sessions * avg_kwh * price_jpy_kwh * 365
annual_cost = annual_maintenance + install_cost / lifespan_years
annual_profit = annual_revenue - annual_cost
profitability = annual_revenue / annual_cost
breakeven = annual_cost / 365 / avg_kwh / price_jpy_kwh
return {
"annual_revenue": round(annual_revenue),
"annual_profit": round(annual_profit),
"profitability": round(profitability, 2),
"breakeven_sessions": round(breakeven, 1),
}
print("=" * 68)
print("Charger ROI by Location Type — Why Markets Fail Rural Areas")
print("Maintenance includes snow removal (Hokkaido essential)")
print("=" * 68)
print(f"{'Location':<30} {'Revenue':>12} {'Profit':>12} {'Profitability':>14}")
print("-" * 68)
locations = [
("Highway SA (15 sessions/day)", 15),
("Major michi-no-eki (8/day)", 8),
("Suburban michi-no-eki (4/day)", 4),
("Mountain michi-no-eki (2/day)", 2),
("Remote area (0.5/day)", 0.5),
]
for label, sessions in locations:
r = charger_roi(sessions)
print(f"{label:<30} {r['annual_revenue']:>10,}¥ {r['annual_profit']:>10,}¥ {r['profitability']:>12.2f}")
print("=" * 68)
print("\n→ Mountain and remote locations: unprofitable (market failure)")
print(" This is WHY Arrow ④ (charging gap subsidy) is needed.")
print(" Markets won't place chargers there — policy must fill the gap.")
5. What to Learn from Norway — Structure, Not Copy-Paste
5.1 Why Norway Really Succeeded
flowchart TD
A[Norway EV Policy Core] --> B[Purchase incentives\ntax exemptions]
A --> C[Charging infra\nfront-loaded investment]
A --> D[Charging non-taxed]
A --> E[Petroleum fund\nfinancing EV transition]
C --> F[Chicken-and-egg solved:\ngovernment placed chargers first]
E --> G[Oil revenue reinvested\ninto post-oil transition — irony]
style F fill:#1a472a,color:#fff
style G fill:#1a472a,color:#fff
Most important lesson: Norway designed for simultaneous growth of chargers and vehicles. Japan's current approach ("add chargers after vehicles arrive") reverses this — and explains why EV adoption lags.
5.2 Hokkaido's Advantages Over Norway
| Element | Norway | Hokkaido applicability |
|---|---|---|
| Tax exemption on EV purchase | ✅ Implemented | ❌ National tax — hard for prefecture alone |
| Charger front-loading | ✅ Government-placed first | ✅ Possible with prefectural budget |
| Michi-no-eki network | ❌ Doesn't exist | ✅ 129 sites — national record, ready backbone |
| Cold-climate coefficient subsidy | ❌ No equivalent | ✅ Hokkaido-specific policy opportunity |
| Oil boiler + EV disaster synergy | ❌ Less relevant | ✅ Unique Hokkaido advantage |
Hokkaido's unique position: The michi-no-eki network provides a ready backbone that Norway never had. Paired with oil-boiler disaster resilience — a Hokkaido-specific advantage — the model can exceed Norway in cost-effectiveness.
Vol.5 Summary
Fact 1: Charger density gap is ~8× vs Norway. But uniform distribution is wrong — road-corridor gap elimination is the right target.
Fact 2: Hokkaido's 129 michi-no-eki (national record) align naturally with the 50km charging interval rule. They're the natural backbone.
Fact 3: Michi-no-eki equipping + 151 additional sites covers virtually all charging dead zones. Estimated cost: ~¥14B = 0.1% of Hokkaido's annual budget.
Fact 4: Mountain/remote areas are unprofitable (negative ROI). This market failure is exactly why Arrow ④ (charging gap subsidy) is needed.
Fact 5: Cold-climate certified equipment (covered, heated, cold-rated) is the minimum spec — standard equipment fails in Hokkaido winters.
Series Structure
| Vol. | Topic | Keywords |
|---|---|---|
| Vol.1 | Cold-climate battery physics | Arrhenius · NAF · Five Arrows |
| Vol.2 | Sodium-ion batteries | Naxtra · Solvation energy |
| Vol.3 | Solid-state batteries | The solid paradox · Interface resistance |
| Vol.4 | Operation engineering | Heat pump COP · Preconditioning · V2H |
| Vol.5 (this) | Charging infrastructure | Norway comparison · Michi-no-Eki · ROI |
| Vol.6 | Policy proposal (final) | Five Arrows · Cost · KPIs · Roadmap |
MIT License — All code and concepts free to use, modify, distribute.
Zenodo DOI: 10.5281/zenodo.18691357 · dosanko_tousan + Claude (claude-sonnet-4-6)
"Just install chargers" is where the plan starts, not ends. The physics, geography, and economics tell you where, what spec, and why markets won't do it alone.
Top comments (0)