PyFMI 模型交换和协同仿真之间的不同结果?

PyFMI different results between model exchange and co-simulation?

在 PyFMI 中将 cartpole 问题模拟为 FMU 时,根据我使用 "model exchange" 还是 "co-simulation",我在给出相同输入的情况下得到不同的结果。 ME结果是正确的,CS结果似乎完全不对。

模型交换结果

model = load_fmu(fmu='CartPole.fmu', 
                 kind='ME')

model.set('theta_0', 0)
model.set('m_cart', 20)
model.set('m_pole', 5)
model.set('length', 2)
model.set('poleCartConnection.density', 0)
model.set('f', 0)
res = model.simulate(start_time=0, final_time=10)


plt.plot(res['f'])
plt.plot(res['x'])
plt.plot(res['x_dot'])
plt.plot(res['theta'])
plt.plot(res['theta_dot'])
plt.legend(['f', 'x', 'x_dot', 'theta', 'theta_dot'])
plt.show() 

与(即完全相同但使用 CS 而不是 ME)相比

model = load_fmu(fmu='CartPole.fmu', 
                 kind='CS')

model.set('theta_0', 0)
model.set('m_cart', 20)
model.set('m_pole', 5)
model.set('length', 2)
model.set('poleCartConnection.density', 0)
model.set('f', 0)
res = model.simulate(start_time=0, final_time=10)


plt.plot(res['f'])
plt.plot(res['x'])
plt.plot(res['x_dot'])
plt.plot(res['theta'])
plt.plot(res['theta_dot'])
plt.legend(['f', 'x', 'x_dot', 'theta', 'theta_dot'])
plt.show()

使用默认 ncp 的联合仿真结果

我怀疑是求解器设置的问题,但是在CS的情况下不能设置这些?当我将 'ncp' 设置为非常高的数字时,错误会减少。 非常感谢您的回复!

具有高 ncp 的协同仿真结果

干杯

在 OpenModelica 中,Euler 是当前导出联合仿真 FMU 时唯一支持的求解器 as stated here。 OpenModelica 1.16 版本应该可以解决这个问题。