Skip to content

Repository files navigation

中国家用汽车能源需求模型

English version is here.

本模型模拟中国家庭乘用车市场中电动汽车(BEV)的扩散过程,以及由此带来的家用汽车部门能源需求结构的变化。模型以家庭为智能体,刻画不同家庭在收入、学历、年龄、驾驶行为等方面的异质性,以及社交网络中的同伴效应对购车决策的影响。通过对比不同补贴政策情景,评估政策对电动车扩散速度和能源需求转型路径的影响。

模型概述

目的

本模型回答的核心问题是:随着电动汽车在中国家庭中的扩散,家用汽车部门的能源需求(燃油消耗和电力消耗)将如何变化?不同的补贴政策对这一转型路径有多大影响?

使用 ABM 的原因:

  • 异质性:不同家庭的经济状况、驾驶习惯差异很大,同一政策对不同人的效果完全不同。高里程家庭从 BEV 的运行成本优势中受益更多,低里程家庭则可能觉得 BEV 的购置溢价和低保值率不划算。用均值或代表性消费者会严重失真。
  • 社会交互:同伴效应是技术扩散的关键驱动力。当一个人社交圈中越来越多的人开始用电车,他自己采纳的概率也会升高。这种局部交互如何汇聚成全国性的扩散曲线,需要通过模拟来观察。
  • 有限理性:家庭的购车决策并非严格的成本最优化,而是受多种因素综合影响的有限理性行为。

智能体

Household(家庭)

  • 角色:代表一个拥有或潜在拥有一辆家用汽车的家庭单元
  • 数量:按各省实际家庭数量 1:1000 缩放,全国约 50 万个智能体。数量在模拟期间固定(不新增/退出家庭,只有无车家庭转变为有车家庭)
  • 关键属性:
    • 固定结构特征:省份、收入水平、学历、初始年龄、年行驶里程
    • 动态状态:是否有车、车辆类型(ICE/BEV)、车龄、年龄(每年递增)
  • 异质性:
    • 收入:各省服从不同参数的对数正态分布抽样
    • 学历:各省按学历结构比例抽样
    • 年龄:各省按人口年龄结构抽样
    • 年行驶里程:与收入和省份相关的分布抽样
  • 决策:首次购车(从无车变有车)、换车时的车型选择(ICE vs BEV)

交互机制

  • 交互类型:社交网络中的同伴效应。每个家庭观察其社交网络中邻居的车辆类型,邻居中 BEV 占比越高,自己选择 BEV 的概率越大。
  • 交互结构:基于收入同质性的社交网络。同一省份内,相近收入水平的家庭连接概率更高,但存在跨收入层的连接。不同省份的家庭之间不建立连接。
  • 反馈循环:个体购买 BEV → 社交网络中 BEV 占比上升 → 更多邻居倾向于购买 BEV → 加速扩散。这是经典的正反馈扩散机制。

使用的 Melodie 模块

  • Simulator:运行基于情景的模拟,对比不同补贴政策的效果
  • Network:构建省内社交网络,实现基于收入同质性的同伴效应。各省独立建立网络(省内家庭相连,跨省不连接)。网络拓扑采用随机块模型(stochastic block model),以收入分组为块,组内连接概率高于组间。
  • Calibrator:若获得 2010-2025 年各省 EV 渗透率历史数据,可用于校准行为参数(如决策函数中各因素的敏感度权重),使模型输出匹配历史观测值

模拟设计

时间结构

  • 时间步长:年
  • 时间范围:2010 年至 2060 年
  • 总步数:50

2010-2025 年为历史区间,可用于校准和验证;2025-2060 年为预测区间。

模拟循环(每个时间步)

  1. 更新外生变量:更新当年的政策参数(补贴金额、是否禁售 ICE)、能源价格(油价、电价)、各省充电基础设施覆盖率、车辆购置价格
  2. 计算社会影响:对每个家庭,计算其社交网络邻居中 BEV 的占比
  3. 更新时间状态:所有车辆车龄 +1,所有家庭年龄 +1
  4. 识别购车家庭
    • 新进入者:根据各省的汽车保有率 S 曲线目标,从无车家庭中随机选取一批进入市场
    • 替换购车者:车龄达到寿命上限的家庭进入换车流程
  5. 车型选择决策:每个购车家庭在 ICE 和 BEV 之间做出选择(详见"智能体行为")
  6. 汇总宏观指标:计算各省和全国的 EV 渗透率、燃油总消耗、电力总消耗、碳排放等
  7. 收集数据:记录智能体级别和环境级别的状态数据

智能体初始化

固定属性赋值:

  • 省份:按各省家庭数量 1:1000 分配
  • 收入水平:从各省特定的对数正态分布中抽样(参数来自统计年鉴中各省的人均可支配收入均值和方差)
  • 学历:按各省学历结构比例(大专及以上、高中、初中及以下)随机抽样
  • 年龄:按各省年龄结构分布抽样(聚焦 25-65 岁的主要购车人群)
  • 年行驶里程:从与收入正相关的分布中抽样(高收入家庭平均里程偏高),默认均值约 12,000 km/年

初始车辆状态(2010 年):

  • 有车/无车:按各省 2010 年家庭汽车保有率设定比例(2010 年全国平均约 15%)
  • 车辆类型:2010 年 BEV 保有量可忽略不计,初始车辆几乎全部为 ICE
  • 车龄:在 0 至该类型车辆平均寿命之间均匀分布(假设历史购车均匀分布)

随机抽样参数默认值:

  • ICE 车辆寿命:对数正态分布,均值 15 年,标准差 3 年
  • BEV 车辆寿命:对数正态分布,均值 12 年,标准差 2 年(电池衰减导致经济寿命偏短)

智能体行为

首次购车(市场进入)

  • 触发条件:外生驱动。每个省每年有一个目标汽车保有率(由 S 曲线给出),若当前省内保有率低于目标,从该省的无车家庭中随机抽取一部分进入购车流程。抽取时偏向收入较高的家庭(购车概率与收入正相关)。
  • 选项空间:进入购车流程后,进行下述"车型选择"决策。
  • 政策影响:限购政策(如牌照限制)降低特定省份的年度新增购车数量。

车型选择(ICE vs BEV)

  • 触发条件:首次购车或现有车辆到达使用寿命时触发
  • 选项空间:ICE 或 BEV(二选一)。若当年政策已禁售 ICE,则只能选 BEV。
  • 影响因素
    • 经济成本(负面影响 → 成本越高越不倾向选择)
      • 购置成本差异:BEV 购置价 - ICE 购置价 - 补贴金额
      • 使用成本差异:基于该家庭的年行驶里程,计算 BEV 和 ICE 各自的年度能源费用差异
      • 保值率差异:BEV 残值率低于 ICE,对购买 BEV 产生负面影响
    • 社会影响(正面影响 → 邻居 BEV 比例越高越倾向 BEV)
      • 该家庭社交网络中 BEV 车主的占比
    • 个人特征(调节作用)
      • 收入:高收入家庭对购置成本差异不那么敏感
      • 学历:高学历家庭对 BEV 的接受度偏高
      • 年龄:年轻家庭对新技术接受度偏高
    • 区域因素(正面或负面影响)
      • 充电基础设施:基础设施越完善越利于 BEV(正面)
      • 气候:寒冷地区(如东北、西北)冬季电池性能下降,降低 BEV 吸引力(负面)
  • 理性程度:有限理性。各因素通过响应函数综合为 BEV 的采纳倾向,加入随机扰动项后通过概率抽样决定最终选择。并非总是选成本最低的方案。
  • 政策影响
    • 补贴:直接降低 BEV 的有效购置成本
    • 禁售令:设定某年后 ICE 不可选,强制只能选 BEV
    • 牌照限制:部分城市对 ICE 限牌但 BEV 不限
  • 行为参数:各影响因素的敏感度权重(如经济成本的权重、社会影响的权重等)无法直接测量,需通过校准或预训练确定初始值

情景设计

情景 名称 描述
0 无补贴基准 全期无 BEV 购置补贴,其余条件按趋势外推
1 补贴加速退坡 BEV 补贴从当前水平快速递减,较早年份完全退出
2 补贴延长 BEV 补贴在较长时期内维持较高水平,缓慢退坡

情景参数:

参数 是否随时间变化 是否差异化 对模型的影响
BEV 补贴金额 是(逐年变化路径不同) 统一(全国统一补贴标准) 直接降低 BEV 有效购置成本,影响车型选择
补贴退出年份 否(情景常量) 统一 决定补贴持续时间

其余参数(油价、电价、车辆价格趋势、基础设施建设速度等)三个情景保持一致,从而隔离补贴政策的净效果。

校准与验证

  • 观测数据:如能获得 2010-2025 年各省的新能源汽车销量、渗透率和家庭汽车保有量历史数据,可用于验证模型在历史区间的输出是否合理
  • 参数校准:车型选择决策中的行为参数(各因素的敏感度权重)是关键的不确定参数。若有历史观测数据,可使用 Calibrator 通过遗传算法搜索使模型输出最匹配历史数据的参数组合
  • 行为参数训练:社会影响的敏感度和个人特征的调节强度等参数,初期可基于文献和经验设定默认值,后续视数据可得性决定是否引入 Trainer 进行预训练
  • 收敛性:由于模型包含随机抽样(收入分布、网络生成、决策噪声),每个情景应运行多次(建议 10-30 次),取平均值并检查结果的稳定性

数据设计

数据维度

维度 示例值 描述
情景 0, 1, 2 补贴政策变体
省份 北京, 广东, ... (31 省级单位) 地理区域
车辆类型 ICE, BEV 动力类型
收入分组 低, 中, 高 用于分析输出的分组维度
时间 2010-2060 模拟年份

输出指标

指标 层级 描述
car_type 智能体级 每个家庭每年的车辆类型(None/ICE/BEV)
annual_fuel_consumption 智能体级 每个 ICE 家庭每年的燃油消耗量(升)
annual_electricity_consumption 智能体级 每个 BEV 家庭每年的电力消耗量(kWh)
ev_penetration_rate 环境级 各省每年的 BEV 占有车家庭比例
total_fuel_demand 环境级 各省每年的燃油总需求(万吨)
total_electricity_demand 环境级 各省每年的充电电力总需求(亿 kWh)
total_energy_demand 环境级 各省每年的总能源需求(折算为标准煤,万吨标煤)
total_carbon_emission 环境级 各省每年的碳排放总量(万吨 CO₂)
ev_adoption_by_income 环境级 各省每年按收入分组的 BEV 采纳率

输入数据文件

文件名 维度 说明
SimulatorScenarios.csv 情景 情景定义:id, run_num, period_num, start_year, subsidy_type, agent_scale
Data_ProvinceParams.csv 省份 省份静态参数:家庭户数、收入分布、学历结构、初始保有率、气候因子等
Data_OwnershipTarget.csv 省份 × 年份 S 曲线保有率目标:id_province, time_year, target_rate
Data_VehiclePrice.csv 车型 × 年份 购置价格(万元):id_car_type, time_year, price
Data_VehicleParams.csv 车型 固定参数:能耗率、寿命分布、折旧率
Data_EnergyPrice.csv 年份 油价(元/升)和电价(元/kWh)
Data_Subsidy.csv 情景 × 年份 BEV 补贴金额(万元)
Data_Infrastructure.csv 省份 × 年份 充电基础设施覆盖率(0-1)

所有数据文件可通过 generate_data.py 重新生成。当前为合理近似值,用户可替换为实证数据。

输出数据文件

文件名 粒度 说明
Result_Simulator_Environment.csv 情景 × 年份 全国汇总:有车家庭数、EV 数、渗透率、燃油需求(万升)、电力需求(万kWh)、碳排放(万吨 CO₂)
Result_Simulator_Province.csv 情景 × 年份 × 省份 省级汇总:有车数、EV 数、渗透率、燃油需求、电力需求

模块设计

项目结构

ev/
├── main.py                 # 入口文件
├── generate_data.py        # 输入数据生成脚本
├── README.md
├── source/
│   ├── __init__.py
│   ├── agent.py            # HouseholdAgent — 家庭智能体
│   ├── scenario.py         # EVScenario — 数据加载与查找
│   ├── environment.py      # EVEnvironment — 主逻辑:社会影响、购车决策、能源计算
│   ├── model.py            # EVModel — 编排器:初始化智能体、运行循环、省级输出
│   └── data_collector.py   # EVDataCollector — 数据记录
└── data/
    ├── input/              # 8 个 CSV 输入文件
    └── output/             # 模拟结果

类设计

  • HouseholdAgent(继承 Agent):存储家庭属性和车辆状态,无决策逻辑
  • EVScenario(继承 Scenario):加载所有 CSV 数据,构建查找字典,提供便捷查询方法
  • EVEnvironment(继承 Environment):核心逻辑所在
    • _compute_peer_ev_share():按(省份 × 收入组)参考群体计算 BEV 占比
    • _process_new_buyers():按 S 曲线目标从无车家庭中选取新购车者(收入加权)
    • _process_replacements():到寿命的车辆进入换车流程
    • _make_purchase_decision():基于 logistic 响应函数的有限理性二元选择
    • _compute_bev_utility():综合经济、社会、个人、区域因素计算 BEV 效用差
    • _aggregate_outputs():汇总全国和省级指标
  • EVModel(继承 Model):在 setup() 中生成智能体初始属性(按省抽样),在 run() 中编排每步操作

社会影响实现

当前版本使用参考群体均值场近似(reference group mean-field):每个家庭观察其所在(省份 × 收入组)群体的 BEV 占比(权重 70%)和省级总体占比(权重 30%)。这等价于一个收入同质性的完全子图,计算效率高(O(N) 而非 O(E)),适合 43 万智能体的规模。如需升级为显式社交网络(如随机块模型),可将 Agent 改为 NetworkAgent 并使用 Melodie 的 Network 模块。

行为参数

决策函数中的敏感度权重定义在 EVEnvironment.setup() 中,可直接修改或通过 Calibrator 校准:

参数 默认值 含义
beta_intercept -4.0 基础倾向(负值 = 默认偏好 ICE)
beta_cost 1.5 经济因素(5 年总成本优势/收入)敏感度
beta_social 3.5 同伴效应(邻居 BEV 占比)敏感度
beta_edu 0.4 学历影响(高学历利好 BEV)
beta_age -0.02 年龄影响(年长者更保守)
beta_infra 2.5 充电基础设施覆盖率影响
beta_climate 1.5 气候因子影响(寒冷不利 BEV)

如何运行

安装依赖

pip install Melodie numpy pandas

生成输入数据

python generate_data.py

运行模拟

python main.py

默认运行 3 个情景(无补贴、快速退坡、延长补贴),1:1000 缩放(43.5 万智能体),2010-2060 年。全部运行约 80 秒。

调整规模

data/input/SimulatorScenarios.csv 中修改 agent_scale

  • 1000:正式运行(43.5 万智能体,~80 秒)
  • 10000:快速测试(4.4 万智能体,~7 秒)

About

An EV diffusion model created as an example of `melodie-skills`, in less than 1 hour, without a single line of code touched, pass@1.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages