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第三方库


热门话题
在IE10中重新加载另一个帧时,internet explorer Java小程序失败/消失   ThreadLocal变量的java性能   java系统。出来println不是打印输出   java从JAXB类获取元素属性   java组织。天啊。科尔巴。包裹。InvalidName:IDL:omg。org/CORBA/ORB/InvalidName:1.0   java有没有办法让非事务连接抛出异常?   java是否有任何方法可以使用JdbcTemplate和查询/条件Fluent API   javajpa级联类型。刷新不工作?   未考虑java Maven依赖关系管理   java MySQL MBR包含抛出MySQLExceptionError的语句   java验证整数并将其设为5位数   java发现了循环依赖的问题   java Hibernate left join fetch到使用@ManyToMany关联映射的softdeleted实体生成无效查询?   JavaH:commandButton多个操作:下载文件并呈现ajax表   Google Contacts API在Java、C#、Python或Ruby中是否有一个Hello World示例?