pymgrid
pymgrid(Python MicroGRID)是一个python库,用于生成和模拟大量的微电网。
关于更多的背景,请看在气候变化AI做的演讲。
安装
安装pymgrid的最简单方法是使用pip。
pip install -U pymgrid
另外,你也可以从源代码安装。首先克隆该版本。
git clone https://github.com/Total-RD/pymgrid.git
然后导航到pymgrid的根目录,调用
pip install .
开始使用
微电网可以直接从头开始生成。只需定义一些模块并将它们传递给微电网。
import numpy as np
from pymgrid import Microgrid
from pymgrid.microgrid.modules import GensetModule, BatteryModule, LoadModule, RenewableModule
genset = GensetModule(running_min_production=10,
running_max_production=50,
genset_cost=0.5)
battery = BatteryModule(min_capacity=0,
max_capacity=100,
max_charge=50,
max_discharge=50,
efficiency=1.0,
init_soc=0.5)
# Using random data
renewable = RenewableModule(time_series=50*np.random.rand(100))
load = LoadModule(time_series=60*np.random.rand(100),
loss_load_cost=10)
microgrid = Microgrid([genset, battery, ("pv", renewable), load])
这就创建了一个具有上述定义的模块的微电网,以及一个不平衡能源模块--用于调节能源需求与供应不匹配的情况。
打印微电网可以得到它的结构。
>> microgrid
Microgrid([genset x 1, load x 1, battery x 1, pv x 1, balancing x 1])
一个微电网包含固定模块和灵活模块。有些模块可以同时具备这两种功能,例如GridModule,但不能同时具备。
固定*模块需要提前申请一定量的能源,然后尝试生产或消耗上述数量。 LoadModule "就是这样一个例子;你必须告诉它要消耗一定量的能量,然后它就会这样做。
另一方面,一个灵活的模块,能够适应满足需求。 RenewableModule "就是一个例子,因为它允许缩减任何多余的可再生资源生产。
一个微电网会告诉你哪些模块是什么。
>> microgrid.fixed_modules
{
"发电机组"。"[GensetModule(running_min_production=10, running_max_production=50, genset_cost=0.5, co2_per_unit=0, cost_per_unit_co2=0, start_up_time=0, wind_down_time=0, allow_abortion=True, init_start_up=True, raise_errors=False, provided_energy_name=genset_production)]" 。
"加载"。"[LoadModule(time_series=<class 'numpy.ndarray'>, loss_load_cost=10, forecaster=NoForecaster, forecast_horizon=0, forecaster_increase_uncertainty=False, raise_errors=False)]"。
"电池"。"[BatteryModule(min_capacity=0, max_capacity=100, max_charge=50, max_discharge=50, efficiency=1.0, battery_cost_cycle=0.0, battery_transition_model=None, init_charge=None, init_soc=0.5, raise_errors=False)]"
}
>>microgrid.flex_modules
{
"pv": "[RenewableModule(time_series=<class 'numpy.ndarray'>, raise_errors=False, forecaster=NoForecaster, forecast_horizon=0, forecaster_increase_uncertainty=False, provided_energy_name=renewable_used)]" 。
"平衡"。"[UnbalancedEnergyModule(raise_errors=False, loss_load_cost=10, overgeneration_cost=2)]"
}
运行微电网是很简单的。只需将每个固定模块的动作传递给microgrid.run。微电网也可以通过调用microgrid.sample_action提供一个随机动作。`一旦微电网运行了一定数量的步骤,可以通过调用microgrid.get_log查看结果。
>> for j in range(10):
>> action = microgrid.sample_action(strict_bound=True)
>> microgrid.run(action)
>> microgrid.get_log(drop_singleton_key=True)
genset ... balance
reward ... fixed_absorbed_by_microgrid
0 -5.000000 ... 10.672095
1 -14.344353 ... 50.626726
2 -5.000000 ... 17.538018
3 -0.000000 ... 15.492778
4 -0.000000 ... 35.748724
5 -0.000000 ... 30.302300
6 -5.000000 ... 36.451662
7 -0.000000 ... 66.533872
8 -0.000000 ... 20.645077
9 -0.000000 ... 10.632957
基准测试
pymgrid还预装了一套25个微电网,用于基准测试。这些微电网的配置文件可在data/scenario/pymgrid25中找到。只需反序列化其中一个yaml文件,就可以加载其中一个已保存的微电网;例如,要加载第4个微电网。
import yaml
from pymgrid import PROJECT_PATH
yaml_file = PROJECT_PATH / 'data/scenario/pymgrid25/microgrid_0/microgrid_0.yaml' 。
microgrid = yaml.safe_load(yaml_file.open('r'))
另外,Microgrid.load(yaml_file.open('r'))将执行同样的反序列化。
数据
pymgrid中的数据是基于TMY3的(基于代表性天气的数据)。光伏数据来自DOE/NREL/ALLIANCE(nsrdb.nrel.gov/about/tmy.h…),负荷数据来自OpenEI(openei.org/doe-opendat…)。
二氧化碳数据来自Jacque de Chalendar和他的Gridemissions API。