能源仿真问题的良好代码架构?

时间:2019-07-17 09:49:47

标签: python simulation

问题与约束

  • 我想建立一个模拟多个实体随时间推移产生和消耗能量的方法

  • 实体可以具有多个传入和传出的能量流

  • 模拟中的一个步骤应模拟一个离散的时间间隔,例如5分钟

  • 模拟中的某些实体应该可以从外部控制

  • 实体的示例包括电池,光伏阵列和生产机器

初稿

我的第一个原始草案代码如下:

battery, machine, pv, grid = entities_from_data(...)

def simulation_step():
    """
    execute one simulation step
    """

    for time in day:

        energy_battery = battery.get_energy()
        energy_pv = pv.get_energy()

        # run machine
        energy_consumption = machine.run()

        # let battery decide what it does
        # in the next step
        battery.charge_or_discharge(energy_pv, energy_consumption)

        # either buy or sell energy
        energy_diff = energy_battery + energy_pv - energy_consumption
        grid.buy_or_sell(energy_diff)

我不喜欢它:

  • 难以测试
  • 不是动态/模块化
  • 状态突变散布在整个代码中

可能的体系结构

我想到的一件事是创建一个Processor基类,该基类根据其用途而具有多个输入和输出流。

然后可以分别通过将输入与输出连接来组成Processor。这将产生一种表示能量流的图形。


是否有针对类似问题的库/框架?

您知道有什么更适合解决python中这个问题的体系结构吗?

1 个答案:

答案 0 :(得分:1)

您可以考虑使用离散事件建模方法,而不是使用时间步长。时间步建模已显示会引入会影响系统行为的建模工件,而离散事件建模则采用了“事物在发生时发生,而不是四舍五入到任意时间步长”的理念。 (请参见https://www.informs-sim.org/wsc11papers/218.pdf

您可以在以下网址下载以Python实现的最小离散事件计划引擎:https://github.com/PaulSanchez/SimpleKit-Python

git仓库具有一个PDF文件,该文件描述了一般建模原理和使用事件图符号的离散事件建模,并通过排队模型实现对方法进行了说明。