DEV Community

dosanko_tousan
dosanko_tousan

Posted on

Hokkaido EV Special Zone Vol.6 (Final): Five Arrows — Policy Design, Cost & Roadmap

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).

Complete series: Vol.1 Physics · Vol.2 Na-ion · Vol.3 Solid-state · Vol.4 Operation · Vol.5 Infrastructure · Vol.6 Policy (Final)


Introduction: From Physics to Policy

Vol.1 started with the Arrhenius equation. At -31°C, lithium-ion battery ionic conductivity drops to 6.7% of room temperature.

Vol.6 is where that physical fact becomes actionable policy. Specifications clear enough to start tomorrow.

For each of the Five Arrows:

  1. Legal basis — which laws and ordinances enable implementation
  2. Financing — prefecture / national / private mix
  3. KPIs — how to measure success
  4. Implementation — who does what by when

Vol.1–5 built the physics, engineering, and infrastructure foundation. Here it converts into institutional design.


1. The Five Arrows — Complete Design Overview

from dataclasses import dataclass, field
from typing import List

@dataclass
class PolicyArrow:
    number: int
    name: str
    problem_solved: str
    mechanism: str
    legal_basis: str
    budget_5yr_jpy: int
    primary_actor: str
    kpi: str
    target_year: int
    vol_reference: str

arrows = [
    PolicyArrow(
        1, "Right to Charge — Legal Framework",
        "EV charging blocked in condominiums and office buildings",
        "Amend condominium ownership law — make refusal to install chargers illegal by default",
        "Building Unit Ownership Act amendment + Hokkaido EV Special Zone Ordinance",
        500_000_000,
        "Hokkaido Prefecture + National government (for legal amendment)",
        "New condo charger installation approval rate ≥ 90%",
        2026,
        "Vol.1"
    ),
    PolicyArrow(
        2, "Cold-Climate Coefficient Subsidy",
        "30–46% winter range loss suppresses EV purchase decisions",
        "Subsidy add-on proportional to NAF-measured winter range loss rate",
        "CEV subsidy regional special provision (METI + MLIT)",
        31_875_000_000,
        "Hokkaido + METI + MLIT",
        "EV share of new vehicle sales: 15% by 2030",
        2030,
        "Vol.1 · Vol.2 · Vol.3"
    ),
    PolicyArrow(
        3, "V2H Disaster Subsidy",
        "Loss of heating during blackout (lesson: 2018 Hokkaido earthquake)",
        "V2H equipment purchase subsidy + mandatory disaster BCP registration",
        "Disaster Basic Act + Hokkaido EV Special Zone Ordinance",
        4_000_000_000,
        "Hokkaido + municipalities",
        "V2H-equipped households: 10,000 by 2030",
        2030,
        "Vol.4"
    ),
    PolicyArrow(
        4, "Charging Dead Zone Elimination",
        "Multiple road corridors with >50km charging gaps",
        "Profitability-inverse subsidy + disaster-base premium draws private investment",
        "Road Act + Regional Public Transport Revitalization Act + Hokkaido EV Ordinance",
        1_344_000_000,
        "Hokkaido + road operators + private business",
        "Charging dead zone elimination rate: 100% by 2029",
        2029,
        "Vol.5"
    ),
    PolicyArrow(
        5, "Renewable Energy Demand Response Integration",
        "Hokkaido has Japan's largest renewable curtailment — EVs and grids uncoordinated",
        "DR system using EV batteries as renewable adjustment resource",
        "Electricity Business Act + Hokkaido Renewable Energy Promotion Ordinance",
        2_000_000_000,
        "Hokkaido Electric Power + Prefecture + METI",
        "Renewable curtailment reduction: 50% by 2031",
        2031,
        "Vol.4 · Vol.5"
    ),
]

total = sum(a.budget_5yr_jpy for a in arrows)

print("=" * 72)
print("Hokkaido EV Special Zone — Five Arrows Policy Design Summary")
print("=" * 72)

for a in arrows:
    print(f"\n[Arrow {a.number}] {a.name}")
    print(f"  Problem   : {a.problem_solved}")
    print(f"  Mechanism : {a.mechanism}")
    print(f"  Legal     : {a.legal_basis}")
    print(f"  5yr budget: ¥{a.budget_5yr_jpy/1e8:.1f}B")
    print(f"  Actor     : {a.primary_actor}")
    print(f"  KPI       : {a.kpi}")
    print(f"  Target    : {a.target_year}")

print(f"\n{'='*72}")
print(f"Total 5yr investment: ¥{total/1e8:.1f}B")
print(f"Annual average:       ¥{total/5/1e8:.1f}B/year")
print(f"% of Hokkaido budget: {total/1.4e12*100:.2f}%")
Enter fullscreen mode Exit fullscreen mode

2. Arrow ① — Right to Charge: Legal Design

The Structural Problem

In Japan, installing a charger in a condominium typically requires a supermajority vote (≥3/4 of unit owners). Even one resistant quarter can block it. Result: condo residents effectively can't own EVs.

The Fix

def right_to_charge_design():
    levels = {
        "National level": {
            "method": "Amend Building Unit Ownership Act — reclassify charger installation as 'minor modification'",
            "status": "Ministry of Land reviewed 2023-2024, amendment pending",
            "challenge": "Legislative timeline is slow",
        },
        "Hokkaido Special Zone": {
            "method": "Prefectural ordinance ahead of national law",
            "content": [
                "Management associations must accept charger installation applications by default",
                "Refusal without reasonable grounds prohibited by ordinance",
                "Individual metering for shared electricity — standardized",
            ],
            "legal_basis": "Local Autonomy Act + Hokkaido EV Special Zone application",
            "timeline": "2025–2026",
        },
        "Private standardization": {
            "method": "Create ready-to-adopt model management rules",
            "content": "Templates management associations can adopt directly",
        },
    }

    print("[Arrow ①] Right to Charge — Legal Framework")
    for level, detail in levels.items():
        print(f"\n  [{level}]")
        if isinstance(detail.get("content"), list):
            print(f"    Method: {detail['method']}")
            for item in detail["content"]:
                print(f"{item}")
        else:
            for k, v in detail.items():
                print(f"    {k}: {v}")

right_to_charge_design()
Enter fullscreen mode Exit fullscreen mode

3. Arrow ② — Cold-Climate Coefficient Subsidy: Dynamic Design

Converting Physics to Policy

The physical finding from Vol.1: Hokkaido winter range loss ranges from -25% to -46% by vehicle and temperature.

The subsidy directly encodes this loss rate:

def cold_climate_subsidy(
    wltp_range_km: float,
    winter_range_km: float,    # from real-world test (NAF equivalent)
    base_cev_subsidy_jpy: int = 850_000,
    max_add_rate: float = 1.0,
) -> dict:
    """
    Cold-climate coefficient subsidy design

    Subsidy add-on proportional to actual measured winter range loss.
    Requires third-party standardized test (NAF-equivalent protocol).
    Coefficient recalibrated as battery technology improves.
    """
    loss_pct = (1 - winter_range_km / wltp_range_km) * 100
    add_rate = min(loss_pct / 10 * 0.10, max_add_rate)
    add_subsidy = int(base_cev_subsidy_jpy * add_rate)
    total = base_cev_subsidy_jpy + add_subsidy
    return {
        "loss_pct": round(loss_pct, 1),
        "total_subsidy": total,
        "coefficient": round(total / base_cev_subsidy_jpy, 2),
    }

print("=" * 72)
print("Arrow ② Cold-Climate Coefficient Subsidy Design")
print("Based on NAF -31°C real-world test data")
print("=" * 72)

vehicles = [
    ("Best performer (-29%)",         500, 355),
    ("Average (-39%)",                400, 244),
    ("Worst performer (-46%)",        350, 189),
    ("Na-Naxtra est. (-15%, rated)",  500, 425),
]

for label, wltp, winter in vehicles:
    r = cold_climate_subsidy(wltp, winter)
    print(f"\n{label}")
    print(f"  Winter loss: -{r['loss_pct']}% / Total subsidy: ¥{r['total_subsidy']:,}{r['coefficient']})")
Enter fullscreen mode Exit fullscreen mode

Technology-Adaptive Design

Phase 1 (2025–2026): Li-ion — coefficient from NAF 2026 data
Phase 2 (2027–2029): Add Na-ion table when independent data available
Phase 3 (2030+):     Solid-state table after interface verification
Enter fullscreen mode Exit fullscreen mode

Key principle: Coefficients are data-driven. Updated when independent test data arrives — not on assumption.


4. Arrow ③ — V2H Disaster Subsidy Design

Physical Basis (from Vol.4)

Oil boiler + EV (V2H): ~71 hours survival (conservative) — exceeds 2018 Hokkaido blackout (45 hours).

All-electric EV only: ~29 hours — insufficient.

def v2h_subsidy_design():
    design = {
        "Base subsidy": "¥400,000/unit (~50% of V2H equipment cost)",
        "Add-ons": [
            "+¥100,000: Registered in municipal disaster BCP (participate in community power sharing during outages)",
            "+¥50,000:  Annual disaster drill participation",
            "+¥50,000:  5-year V2H maintenance contract",
        ],
        "Maximum": "¥600,000/unit",
        "Conditions": [
            "Purchased with EV or existing EV owner (Arrow ② recipients prioritized)",
            "Cold-climate rated V2H equipment",
            "5-year operation and maintenance obligation",
        ],
        "Financing": "Hokkaido 30% + Municipality 10% + National disaster funds 60%",
        "Annual target": "2,000 units/year (10,000 total by 2030)",
    }

    print("[Arrow ③] V2H Disaster Subsidy Design")
    for k, v in design.items():
        if isinstance(v, list):
            print(f"\n  {k}:")
            for item in v:
                print(f"{item}")
        else:
            print(f"  {k}: {v}")

v2h_subsidy_design()
Enter fullscreen mode Exit fullscreen mode

5. Arrow ④ — Charging Dead Zone Subsidy: Market Failure Correction

Profitability-Inverse Continuous Subsidy

Vol.5 showed mountain-area chargers lose money (annual -¥360K). Markets won't place them there — government must.

import numpy as np

def dead_zone_subsidy(
    daily_sessions: float,
    avg_kwh: float = 25,
    price: float = 35,
    install_cost: int = 8_000_000,
    annual_maintenance: int = 300_000,  # includes snow removal
    lifespan: int = 10,
) -> dict:
    """
    Profitability-inverse continuous subsidy (Arrow ④ revised)

    Three improvements over step-function design:
    ① Continuous sigmoid function — eliminates threshold gaming incentive
    ② OPEX included in maintenance (snow removal, demand charges)
    ③ Clawback mechanism: actual usage data adjusts subsidy ex-post
    """
    revenue = daily_sessions * avg_kwh * price * 365
    fixed_cost = annual_maintenance + install_cost / lifespan
    profitability = revenue / fixed_cost

    # ① Continuous sigmoid — no jump discontinuities
    rate = 0.10 + 0.80 / (1 + np.exp(3 * (profitability - 0.8)))
    rate = max(0.10, min(0.90, rate))

    return {
        "profitability": round(profitability, 2),
        "subsidy_rate_pct": round(rate * 100, 1),
        "subsidy_amount": int(install_cost * rate),
        "clawback": "3-yr actual usage log → reconcile: overshoot = return, undershoot = ops supplement",
    }

print("=" * 65)
print("Arrow ④ Profitability-Inverse Continuous Subsidy")
print("OPEX includes snow removal — critical for Hokkaido")
print("=" * 65)
print(f"{'Location':<30} {'Profitability':>14} {'Subsidy Rate':>13} {'Amount':>12}")
print("-" * 65)

for label, sessions in [
    ("Highway SA (15/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),
]:
    r = dead_zone_subsidy(sessions)
    print(f"{label:<30} {r['profitability']:>12.2f}× {r['subsidy_rate_pct']:>11.1f}% ¥{r['subsidy_amount']:>9,}")

print("\n[Design principles]")
print("① Continuous function: eliminates threshold gaming by operators")
print("② OPEX coverage: prevents 'installed but abandoned' failure mode")
print("③ Clawback: actual usage data corrects ex-ante estimates")
print("④ Winter operation obligation: 80% winter uptime · 48h repair SLA · snow removal plan")
Enter fullscreen mode Exit fullscreen mode

6. Cost–Benefit Overview

def total_cost_benefit():
    costs = {
        "Arrow ① Right to Charge":          500_000_000,
        "Arrow ② Cold-climate subsidy":  31_875_000_000,
        "Arrow ③ V2H disaster":           4_000_000_000,
        "Arrow ④ Charging dead zones":    1_344_000_000,
        "Arrow ⑤ Renewable DR":           2_000_000_000,
    }
    total_cost = sum(costs.values())

    # Benefits at 15% EV penetration (2030) — conceptual estimates
    ev_2030 = 330_000
    # EV electricity: 0.20 kWh/km × 30 ¥/kWh = 6 ¥/km
    # Gasoline: 160 ¥/L ÷ 10 km/L = 16 ¥/km
    # Saving: 10 ¥/km
    annual_fuel_saving = ev_2030 * 10_000 * (16 - 6)
    co2_tons = ev_2030 * 10_000 / 10 * 2.3 / 1000
    co2_value = co2_tons * 10_000

    total_benefit_5yr = (annual_fuel_saving + co2_value) * 5

    print("=" * 68)
    print("Five Arrows: 5-Year Cost–Benefit Overview")
    print("Benefits at 15% EV penetration (2030) × 5 years")
    print("Saving: ¥10/km (gas ¥16 - electricity ¥6) × 10,000km × 330,000 EVs")
    print("=" * 68)

    print("\n[Cost breakdown]")
    for k, v in costs.items():
        print(f"  {k}: ¥{v/1e8:.1f}B")
    print(f"  Total: ¥{total_cost/1e8:.1f}B (5yr) · ¥{total_cost/5/1e8:.1f}B/yr avg")
    print(f"  % Hokkaido budget: {total_cost/1.4e12*100:.2f}%")

    print("\n[Benefits — conceptual]")
    print(f"  Annual fuel savings: ¥{annual_fuel_saving/1e8:.0f}B/yr (330K EVs × ¥10/km × 10,000km)")
    print(f"  CO₂ reduction: {co2_tons/1e4:.1f}M tons/yr")
    print(f"  CO₂ value (@¥10k/t): ¥{co2_value/1e8:.0f}B/yr (conceptual)")
    print(f"\n  5yr cumulative benefit: ¥{total_benefit_5yr/1e8:.0f}B")
    print(f"  B/C ratio (conceptual): {total_benefit_5yr/total_cost:.1f}")
    print(f"  (Discount rate, phase-in, fuel tax revenue change → B/C will vary)")

    print("\n  ⚠️  Disaster value, employment effects, industrial clustering not included.")
    print("  ⚠️  Full policy evaluation requires professional economic modeling.")

total_cost_benefit()
Enter fullscreen mode Exit fullscreen mode

7. Implementation Structure and Roadmap

def implementation_roadmap():
    roadmap = {
        2025: {
            "Q1": ["Submit EV Special Zone application", "Establish promotion HQ (Gov. direct)", "Set up external review committee"],
            "Q2": ["Arrow ① ordinance enacted", "Arrow ④ subsidy scheme launched"],
            "Q3": ["Arrow ② design finalized · applications open", "Arrow ③ V2H subsidy launched"],
            "Q4": ["Michi-no-eki charging batch 1 (30 sites)", "Winter data collection begins"],
        },
        2026: {
            "Q1": ["NAF winter test results → Arrow ② coefficient update"],
            "Q3": ["Michi-no-eki charging: all 129 sites completed (target)"],
            "Q4": ["Mid-term KPI review · subsidy rate revision"],
        },
        2027: {
            "Annual": ["Na-ion vehicle launch → Arrow ② table added",
                       "Arrow ④ remaining 151 sites progress",
                       "Arrow ⑤ DR system operational"],
        },
        2029: {
            "Annual": ["Charging dead zone elimination 100% target"],
        },
        2030: {
            "Annual": ["15% EV penetration evaluation",
                       "10,000 V2H households evaluation",
                       "Next 5-year plan (2031–2035) formulation"],
        },
    }

    print("[Five Arrows Implementation Roadmap]")
    for year, quarters in roadmap.items():
        print(f"\n{year}:")
        for q, items in quarters.items():
            print(f"  {q}:")
            for item in items:
                print(f"{item}")

implementation_roadmap()
Enter fullscreen mode Exit fullscreen mode

8. KPI Dashboard — "Data Updates Policy"

kpis = [
    ("EV new vehicle sales share",    "0.6% (2024 est.)", "15%",        2030),
    ("Charging dead zone elimination","0% (baseline)",    "100%",       2029),
    ("Winter charging success rate",  "Not measured",     "≥ 95%",      2027),
    ("V2H households",                "~few hundred",     "10,000",     2030),
    ("Renewable curtailment",         "~800 GWh/yr",      "-50% cut",   2031),
    ("Cold-climate range improvement","worst -46% @-31°C","worst ≤-30%",2030),
]

print("=" * 72)
print("Hokkaido EV Special Zone: KPI Dashboard")
print("'Data updates policy' — the only design that keeps pace with technology")
print("=" * 72)
print(f"{'KPI':<35} {'Current':>12} {'Target':>10} {'Year':>6}")
print("-" * 72)
for name, current, target, year in kpis:
    print(f"{name:<35} {current:>12} {target:>10} {year:>6}")
Enter fullscreen mode Exit fullscreen mode

Series Conclusion: From Physics to Policy

Vol.1 used the Arrhenius equation to show that at -31°C, Li-ion conductivity falls to 6.7%.

Six volumes later, that physical fact has become an institutional design.

flowchart LR
    A[Vol.1\nBattery Physics] -->|Ea values| B[Vol.2\nNa-ion]
    B -->|Conductivity comparison| C[Vol.3\nSolid-state]
    C -->|Interface resistance| D[Vol.4\nOperation Eng.]
    D -->|COP · V2H hours| E[Vol.5\nInfra Design]
    E -->|ROI · gap analysis| F[Vol.6\nPolicy Design]
    F -->|KPIs · institutions| G[Hokkaido becomes\nEV Special Zone]
    style A fill:#1a5276,color:#fff
    style G fill:#1a472a,color:#fff
Enter fullscreen mode Exit fullscreen mode

The strength of this chain: every link is grounded in physical fact.

Subsidy coefficients come from NAF test data, not political judgment. The 50km spacing rule is derived from worst-case range loss calculations. V2H subsidy justification comes from the 71-hour survival calculation.

"Hokkaido should be Japan's EV Special Zone" — this argument, from beginning to end, rests on physics.


A Final Word — From a Coal Town

I was born in Iwamizawa. A coal town.

I watched the mines close. Watched the town shrink. Energy transitions change the fate of regions.

If Hokkaido becomes an EV Special Zone, there's a chance it could become central to the next energy transition. A land that holds enormous renewable energy potential, bottled up by grid constraints and winter challenges — EVs as "rolling batteries" can release that potential.

A person raised in a coal town writes the blueprint for the next energy transition.

The causality holds together.


Complete Series

Vol. Topic Keywords
Vol.1 Cold-climate battery physics Arrhenius · NAF · Five Arrows
Vol.2 Sodium-ion batteries Naxtra · Solvation energy · Ether electrolyte
Vol.3 Solid-state batteries The solid paradox · Interface resistance
Vol.4 Operation engineering Heat pump COP · Preconditioning · V2H
Vol.5 Charging infrastructure Norway comparison · Michi-no-Eki · ROI
Vol.6 (this) Policy proposal (final) Five Arrows · Cost · KPIs · Roadmap

:::message
MIT License — All articles in this series are open.
Free to cite, republish, modify, and use commercially. If you work on Hokkaido EV policy — use this data. That's why it was written.
:::


MIT License — All concepts, code, frameworks free to use, modify, distribute.

Zenodo DOI: 10.5281/zenodo.18691357 · dosanko_tousan + Claude (Anthropic claude-sonnet-4-6)


"Hokkaido should be Japan's EV Special Zone." — Physics to policy, six volumes, one causal chain.

Top comments (0)