收紧碳排放上限¶
目标。 在不覆盖基线的前提下,运行一个更严格的系统级 CO2 上限的反事实情景。
PREP-SHOT 为 params.json 中的每个输入文件注册了命令行参数。传入 --<param>=<suffix>,PREP-SHOT 会加载 <file>_<suffix>.csv 而非 <file>.csv。输出文件名也会带上同样的后缀。
步骤¶
1. 将基线策略文件复制为新变体。 进入 examples/<scenario>/input/ 后执行:
cd examples/southeast_asia/input
cp policy_carbon_emission_limit.csv policy_carbon_emission_limit_tight.csv
2. 编辑新文件中 2030 年的上限。 表格结构为 (limit_id, year, unit, value, zones)。在编辑器中打开,把上限从 146000000 (基线) 改为 80000000 (约为基线的 55%):
limit_id,year,unit,value,zones
system_cap,2020,tonneCO2,inf,"Cambodia,Laos,Myanmar,Thailand,Vietnam"
system_cap,2030,tonneCO2,80000000.0,"Cambodia,Laos,Myanmar,Thailand,Vietnam"
3. 使用变体参数重新运行。
cd examples/southeast_asia
python -m prepshot --carbon_emission_limit=tight
结果输出至 output/baseline_tight.nc (或你定义的 output_filename 加上 _tight)。
验证¶
通过总成本和 2030 年排放量比较基线与收紧情景:
import xarray as xr
base = xr.open_dataset("output/baseline.nc")
tight = xr.open_dataset("output/baseline_tight.nc")
print(f"Cost delta: ${float(tight.cost) - float(base.cost):,.0f}")
print(f"2030 emissions baseline: {float(base.carbon.sel(year=2030)):,.0f} tCO2")
print(f"2030 emissions tight: {float(tight.carbon.sel(year=2030)):,.0f} tCO2")
更严格的上限迫使模型要么建设更多零碳容量,要么更高强度地调度已有零碳容量,要么从邻近区域进口清洁电力—— 三者中选最便宜的一项。
自定义上限区域¶
zones 列可以接受任意以逗号分隔的子集。例如仅针对越南的上限:
limit_id,year,unit,value,zones
vietnam_cap,2030,tonneCO2,40000000.0,Vietnam
同一年内多行 limit_id 会叠加为附加约束。
常见陷阱¶
给 zones 字符串加引号。 未加引号的 CSV 单元中的逗号会被当作列分隔符。多区域列表务必用双引号包裹。
CLI 后缀必须是合法的文件名后缀。
--carbon_emission_limit=tight会查找policy_carbon_emission_limit_tight.csv,而非policy_carbon_emission_limit-tight.csv。所有上限区域必须使用已有的区域名。 拼写错误会静默生成一个无约束意义的条件 (没有区域贡献),给出错误答案而非报错。请对照
demand.csv仔细核对区域拼写。