PyFMI:从结果文件重新启动耦合模拟
PyFMI: Restart coupled simulation from result file
我正在使用 PyFMI 来模拟两个 FMU(Control.fmu 和 Plant.fmu)的耦合模拟,如下所示。
import matplotlib.pyplot as plt
from pyfmi import load_fmu
fmu_control = load_fmu('Control.fmu'); fmu_plant = load_fmu('Plant.fmu')
# List models
models = [fmu_control, fmu_plant]
# Set up connections between models
connections = [(fmu_control, 'y1', fmu_plant, 'u1'), (fmu_control, 'y2', fmu_plant, 'u2'),
(fmu_plant, 'y1', fmu_control, 'u1'), (fmu_plant, 'y2', fmu_control, 'u2')]
# Create coupled co-simulation object
from pyfmi.master import Master
coupled_simulation = Master(models, connections)
opts = coupled_simulation.simulate_options()
opts['step_size'] = 0.01; opts['linear_correction'] = False
opts['block_initialization'] = True; opts['initialize'] = False
coupled_simulation.initialize(start_time = 0.0, final_time = 0.01, opts = opts)
res = coupled_simulation.simulate(options=opts, final_time = 1.0)
Plant_u1 = res[fmu_plant]['u1']; Plant_u2 = res[fmu_plant]['u2']
Plant_y1 = res[fmu_plant]['y1']; Plant_y2 = res[fmu_plant]['y2']
time = res[fmu_plant]['time']
有没有办法在模拟中实现重启功能?我想加载结果文件并使用它们继续模拟(即,从我在上一步中断的地方开始)。我一直在使用以下方法读取结果文件:
from pyfmi.common.io import ResultDymolaTextual
res_control = ResultDymolaTextual('Control_0_result.txt')
res_plant = ResultDymolaTextual('Plant_1_result.txt')
但我不知道如何将这些结果定义为我下一步模拟的初始条件。
为了完全支持重启功能,FMU 本身需要支持可选功能 get/set FMU 状态,这在规范中有所描述,请参阅 https://fmi-standard.org/downloads/。在一般情况下,仅仅使用结果文件来重新启动仿真是不够的,因为 FMU 中通常有内部变量没有暴露在结果文件中,但对 FMU 的实际状态有重大影响。例如布尔开关通常不在结果文件中。
我正在使用 PyFMI 来模拟两个 FMU(Control.fmu 和 Plant.fmu)的耦合模拟,如下所示。
import matplotlib.pyplot as plt
from pyfmi import load_fmu
fmu_control = load_fmu('Control.fmu'); fmu_plant = load_fmu('Plant.fmu')
# List models
models = [fmu_control, fmu_plant]
# Set up connections between models
connections = [(fmu_control, 'y1', fmu_plant, 'u1'), (fmu_control, 'y2', fmu_plant, 'u2'),
(fmu_plant, 'y1', fmu_control, 'u1'), (fmu_plant, 'y2', fmu_control, 'u2')]
# Create coupled co-simulation object
from pyfmi.master import Master
coupled_simulation = Master(models, connections)
opts = coupled_simulation.simulate_options()
opts['step_size'] = 0.01; opts['linear_correction'] = False
opts['block_initialization'] = True; opts['initialize'] = False
coupled_simulation.initialize(start_time = 0.0, final_time = 0.01, opts = opts)
res = coupled_simulation.simulate(options=opts, final_time = 1.0)
Plant_u1 = res[fmu_plant]['u1']; Plant_u2 = res[fmu_plant]['u2']
Plant_y1 = res[fmu_plant]['y1']; Plant_y2 = res[fmu_plant]['y2']
time = res[fmu_plant]['time']
有没有办法在模拟中实现重启功能?我想加载结果文件并使用它们继续模拟(即,从我在上一步中断的地方开始)。我一直在使用以下方法读取结果文件:
from pyfmi.common.io import ResultDymolaTextual
res_control = ResultDymolaTextual('Control_0_result.txt')
res_plant = ResultDymolaTextual('Plant_1_result.txt')
但我不知道如何将这些结果定义为我下一步模拟的初始条件。
为了完全支持重启功能,FMU 本身需要支持可选功能 get/set FMU 状态,这在规范中有所描述,请参阅 https://fmi-standard.org/downloads/。在一般情况下,仅仅使用结果文件来重新启动仿真是不够的,因为 FMU 中通常有内部变量没有暴露在结果文件中,但对 FMU 的实际状态有重大影响。例如布尔开关通常不在结果文件中。