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用户邮件列表。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java FloatingAction按钮与RecyclerView中的CardView重叠   java如何计算CardLayout中的卡数   从远程系统上传MySQL数据库并访问Java应用程序   java调用堆栈如何处理带或不带返回类型的递归?   Springboot中的java组计数聚集   java如何在javafx textarea中使用richtextfx   获取与Mockito相关的错误时出现Java问题   java如何将JaxRS响应转换为Wiremock响应   Hadoop集群java。net ConnectionException:连接被拒绝错误   java如何加载文件私有文件类型是pem   java在元空间中的提升和加载的类   如何将系统属性传递给从HTML启动的Java小程序   java如何从网页中获取值并在主类中使用它?安卓应用   java在春天,advisor和aspect之间有什么区别?   java如何检测文件是否已重命名?   java消息驱动Bean何时使用