HDF5数据库中的大型马赛克模拟数据。
mosaik-hdf5的Python项目详细描述
Mosaik-HDF5
将mosaik仿真数据存储在hdf5数据库中。
mosaik-hdf5存储模拟的关系图,时间序列 连接到它的实体和可选的静态实体和模拟元数据。 数据库结构通常如下:
/ [meta data] | +- Relations | | | +- Sim-0.Entity-1 | | | +- PyPower-0.1-Node-2 | +- Series | +- Sim-0.Entiy-1 [static data] | | | +- val_out | +- PyPower-0.1-Node-2 [static data] | +- P | +- Q
关系 组为每个实体包含一个数据集。对于每个 实体的关系,数据集有一个元组 (路径到关系, 路径到关系系列)
系列 组包含(默认情况下)每个实体一个组。每一个 这些组作为每个属性的一个数据集。
静态实体数据作为属性存储在实体组中。模拟 元数据作为根组的属性存储。
您可以(可选)为序列创建更嵌套的结构, 例如,如果要按模拟器和/或模拟器实例对实体进行分组。 这是通过基于实体id的正则表达式替换来完成的。
安装
mosaik-hdf5 使用 h5py 模块。如果在安装过程中出现错误 如果缺少hdf5.h,请安装hdf5头文件(例如, sudo apt get 安装libhdf5 dev 或brew install hdf5)或使用二进制软件包(例如, 对于 窗口 )
$ pip install mosaik-hdf5
用法
您可以将mosaik-hdf5作为子进程运行,也可以使用 它。以下是两种型号的配置示例:
sim_config={'HDF5-inproc':{'python':'mosaik_hdf5:MosaikHdf5',},'HDF5-subproc':{'cmd':'mosaik-hdf5 %(addr)s',},}
初始化
当您启动mosaik-hdf5时,您必须提供一个 步长 和一个 持续时间 争论。步骤大小定义了收集数据的频率。这个 duration 是模拟结束时间(秒)。它用于计算 每个时间序列的数据集大小。例如,如果 持续时间 是半小时 (1800)并且 步长 为60,每个数据集的长度为30。
您可以选择传递一个 序列路径 元组,该元组包含一个 表达式模式和替换字符串(有关 详细信息)。
例如,默认情况下,实体id sim-0.entity-1 和 pypower-0.1-node-2 将映射到序列路径 /series/sim-0.entity-1 以及 /series/pypower-0.1-node-2。但是你想按 模拟器类型和模拟器实例。另外,由于有一个 mosaik-pypower 实例可以包含多个网格,您还需要处理这个问题。所以 你想要的是这样的: /series/sim/sim-0/sim-0.entity-1 /series/pypower/pypower-0.1/pypower-0.1-node-2 。在这个(相当复杂) 大小写, 序列路径 可以是 (r'((((\w+)-(\d+。\d+)[.-](.*), r'\3/\2/\1') 。很容易,不是吗?
这里有两个例子:
a=world.start('HDF5',step_size=60,duration=1800)pattern=r'(((\w+)-(\d+.\d+|\d+))[.-](.*))'repl=r'\3/\2/\1'b=world.start('HDF5',step_size=1,duration=10,series_path=(pattern,repl))
模型实例化
Mosaik-HDF5的每个实例都允许您创建 数据库 模型(也是提供的唯一模型)。 数据库 以下参数:
gridfile 是将创建的HDF5数据库的文件名。
buf_size (默认值:1000)是每个 系列数据集。mosaik-hdf5为每个数据集缓冲数据,并且仅 在o中将较大的数据块写入磁盘为了提高写作水平 表演。如果实体太多(>;100k),内存太少, 你可以减少这个数字。如果你有很多内存,你可以用更大的 缓冲区大小,看看是否能提高性能。
dataset_opts (默认值:none)是传递参数的字典 到h5py的 创建数据集() 方法。
例如,这可以用于启用压缩(注意 所有HDF5查看器都不支持LZF 压缩。
示例:
# Basic usagehdf5=world.start('HDF5',step_size=1,duration=1)db=hdf5.Database('data.hdf5')# Use gzip compressionhdf5=world.start('HDF5',step_size=1,duration=1)db=hdf5.Database('data.hdf5',dataset_opts={'compression':'gzip','compression_opts':9,})# Use lzf compression and a larger bufferhdf5=world.start('HDF5',step_size=1,duration=1)db=hdf5.Database('data.hdf5',buf_size=1336,dataset_opts={'compression':'lzf'})
存储数据
数据库 模型没有属性,但它接受任何输入。这意味着 你可以把任何东西都连接到它上面。对于每个实体和属性 连接到数据库时,将在 数据库。
mosaik-hdf5还提供了额外的方法,允许您存储一些 仿真元数据和静态实体数据。你只能用这些方法 创建 数据库 模型的实例后。方法 set_meta_data() 获取具有任意键值的单个dict 对。set_static_data()方法接受实体和数据的指令 字典:
在下面的例子中,我们将创建一些(假)光伏实体和一个电网 (有节点和线)。我们想储存光伏的有功和无功功率 (p,q) ,所有节点的节点电压和角度 (vm,va) ,以及 所有分支的复杂电流
pv_pmax=10pvs=make_pvs(pv_pmax,...)# A list of PV entitiesnodes,lines=make_grid(...)# Lists of nodes/lines of a power gridhdf5=world.start('HDF5',step_size=1,duration=10)db=hdf5.Database('data.hdf5')# Store meta and static datahdf5.set_meta_data({'duration':10,'description':'hdf5 demo'}hdf5.set_static_data({pv.full_id:{'p_max':pv_pmax}forpvinpvs})# Connect inputs to databasemosaik.util.connect_many_to_one(world,pvs,db,'P','Q')mosaik.util.connect_many_to_one(world,nodes,db,'Vm','Va')mosaik.util.connect_many_to_one(world,lines,db,'I_real','I_imag')
对于一个真实的例子,您可以查看mosaik demo
获取帮助
如果需要,请访问mosaik用户邮件列表。