FMU机器学习模型
FMU machine learning model
我通过外部 C 函数在模拟环境(在此上下文中为 OpenModelica)中部署我的机器学习模型(已训练)取得了一些成功。
但是,为了使过程标准化,我的目标是使用 FMI 标准而不是外部 C 函数。因此,我需要将我的 ML 模型包装为 FMU。
有什么办法可以做到吗?我阅读了 PyFMI,但是,它似乎只控制 Python 环境中的协同仿真,而不是将您的 ML 模型包装为 FMU。
目标是从经过训练的 ML 模型生成 FMU,然后将此 FMU 部署到模拟环境(例如 OpenModelica)中。非常感谢任何帮助。
谢谢
假设您有两个 Modelica 模型 A
和 B
。
model A
output Real x (start=1,fixed=true);
equation
der(x) = 2*x;
end A;
model B
input Real x;
Real y;
function myExternalFunction
input Real x;
output Real y;
external "C" annotation(Library="myExternalLib");
end myExternalFunction;
equation
y = myExternalFunction(x);
end B;
其中 B
正在使用来自 myExternalLib.dll
的一些外部函数 myExternalFunction
。这可能是一个函数,使用您训练有素的网络从某个值 x
.
预测某些 y
Modelica 中的外部函数已标准化,请参阅 Modelica specification 3.4, Section 12.9。
现在您当然可以在新的 Modelica 模型中连接这些模型
model connectedAB
A a;
B b;
equation
a.x = b.x;
end connectedAB;
现在是 FMU。 Functional Mock-up Interface 是定义容器以交换动态模型的标准。
有不同的工具可用,有些可以将动态模型导出为 FMU(例如 OpenModelica、Dymola 等),有些可以导入 FMU 来模拟它们(例如 PyFMI、OMSimulator)。当然,有些工具可以做到这两点。
因此模型 A
和 B
可以导出为 FMU。
但是,它并不打算导出单个外部函数,例如 myExternalFunction
.
因此在 OpenModelica 中您可以导出 A.fmu
和 B.fmu
,创建一个新的强连接 SSP 模型并将这些 FMU 添加为子模型。在引擎盖下 OMEdit 将使用 OMSimulator 来模拟 SSP/FMUs.
即使不打算这样做,您仍然可以将外部函数导出为 FMU。只需创建一个只调用外部函数的微型模型(或多或少就像我在 B
中所做的那样)。但是你不会从中得到任何好处。
我通过外部 C 函数在模拟环境(在此上下文中为 OpenModelica)中部署我的机器学习模型(已训练)取得了一些成功。
但是,为了使过程标准化,我的目标是使用 FMI 标准而不是外部 C 函数。因此,我需要将我的 ML 模型包装为 FMU。
有什么办法可以做到吗?我阅读了 PyFMI,但是,它似乎只控制 Python 环境中的协同仿真,而不是将您的 ML 模型包装为 FMU。
目标是从经过训练的 ML 模型生成 FMU,然后将此 FMU 部署到模拟环境(例如 OpenModelica)中。非常感谢任何帮助。
谢谢
假设您有两个 Modelica 模型 A
和 B
。
model A
output Real x (start=1,fixed=true);
equation
der(x) = 2*x;
end A;
model B
input Real x;
Real y;
function myExternalFunction
input Real x;
output Real y;
external "C" annotation(Library="myExternalLib");
end myExternalFunction;
equation
y = myExternalFunction(x);
end B;
其中 B
正在使用来自 myExternalLib.dll
的一些外部函数 myExternalFunction
。这可能是一个函数,使用您训练有素的网络从某个值 x
.
y
Modelica 中的外部函数已标准化,请参阅 Modelica specification 3.4, Section 12.9。
现在您当然可以在新的 Modelica 模型中连接这些模型
model connectedAB
A a;
B b;
equation
a.x = b.x;
end connectedAB;
现在是 FMU。 Functional Mock-up Interface 是定义容器以交换动态模型的标准。
有不同的工具可用,有些可以将动态模型导出为 FMU(例如 OpenModelica、Dymola 等),有些可以导入 FMU 来模拟它们(例如 PyFMI、OMSimulator)。当然,有些工具可以做到这两点。
因此模型 A
和 B
可以导出为 FMU。
但是,它并不打算导出单个外部函数,例如 myExternalFunction
.
因此在 OpenModelica 中您可以导出 A.fmu
和 B.fmu
,创建一个新的强连接 SSP 模型并将这些 FMU 添加为子模型。在引擎盖下 OMEdit 将使用 OMSimulator 来模拟 SSP/FMUs.
即使不打算这样做,您仍然可以将外部函数导出为 FMU。只需创建一个只调用外部函数的微型模型(或多或少就像我在 B
中所做的那样)。但是你不会从中得到任何好处。