Python 如何使用PyFMI定义依赖于模拟FMU输出的输入功能?

Python 如何使用PyFMI定义依赖于模拟FMU输出的输入功能?,python,fmi,Python,Fmi,我有一个FMU要用PyFMI模拟。如何创建依赖于模拟FMU输出的输入函数?本文档仅提供依赖于外部变量的输入函数示例,例如: #生成输入 t=N.linspace(0,10,100) u=N.cos(t) u_traj=N.转置(N.vstack((t,u))) #创建输入对象 输入对象=('u',u\u traj) #模拟 res=model.simulate(final_time=30,input=input_对象,options={'ncp':3000}) 如果我希望我的输入函数u_tra

我有一个FMU要用PyFMI模拟。如何创建依赖于模拟FMU输出的输入函数?本文档仅提供依赖于外部变量的输入函数示例,例如:

#生成输入
t=N.linspace(0,10,100)
u=N.cos(t)
u_traj=N.转置(N.vstack((t,u)))
#创建输入对象
输入对象=('u',u\u traj)
#模拟
res=model.simulate(final_time=30,input=input_对象,options={'ncp':3000})

如果我希望我的输入函数u_traj依赖于模型的输出“y”而不是t,我该怎么办?

这是可能的。在PyFMI中,允许将输入指定为函数,而不是数据矩阵

model = load_fmu(...)

def input_function(t):
    global model
    #Get values from the model using e.g. "model.get("my_parameter")"
    p = model.get("my_paramater")
    return t*p

input_object = ("u", input_function)

res = model.simulate(final_time=30, input=input_object, options={'ncp':3000})

但正如我在评论中所说的,这必须小心,因为可能会产生循环并使问题无法解决。也可能是这样,您可能需要保护(在input_函数中)对它的第一次调用,因为模型可能尚未初始化,因此您需要检索的值可能不可用。

输出取决于什么?必须小心谨慎,以避免使用此方法创建循环approach@ChristianWinther基本上,输出是一个速度,输入是一个制动指令,所以我认为你的猜测是正确的,因为这样可以创建一个循环。但无论如何,是否可以使用PyFMI使输入函数依赖于模拟变量?此外,依赖性可能会发生阶跃变化,即输出(t)依赖于输入(t-1),这将解决循环依赖性问题,对吗?