这是一个相当普遍的问题。我试图根据实验测量的数据验证Modelica模型。在过去,我只是简单地添加了CombiTable,并将数据复制到组件中。但是,我将使用至少15列我希望匹配和比较的数据。用于校准和验证Modelica模型的测量和模拟数据比较的方法
我的问题是,您推荐什么方法,提示和技巧来比较测量和模拟数据,以便于校准和验证Modelica模型?
这是一个相当普遍的问题。我试图根据实验测量的数据验证Modelica模型。在过去,我只是简单地添加了CombiTable,并将数据复制到组件中。但是,我将使用至少15列我希望匹配和比较的数据。用于校准和验证Modelica模型的测量和模拟数据比较的方法
我的问题是,您推荐什么方法,提示和技巧来比较测量和模拟数据,以便于校准和验证Modelica模型?
我一直好奇别人是怎么做到这一点,以及...
对我来说,我创建了我把我所有的例子,做了回归测试,并吐出了上通报告的模型/失败。 “正确的”数据可以从combiTable中输入(可以根据需要选择多个维度),也可以直接作为输入变量。
回归测试是一个函数,它带有一个容差的数组。
当然,您可以使用mat文件结果(如BuildingsPy)或两者都可以将Modelica之外的东西带到Python等。
下面是代表什么对我来说,到目前为止的工作:
model TestCheck
parameter Integer n "Length of variable vector";
parameter Real tolerance = 100;
input Real[n] x_1 "Values of interest" annotation(Dialog(group="Input Variables:"));
input Real[n] x_2 "Reference values" annotation(Dialog(group="Input Variables:"));
Real passedTest "if 0 (false) then expected and actual values do not match within the expected error";
Real Error_rms "Root Mean Square error sqrt(sum(Error_abs.^2)/n)";
Real[n] Error_abs "Absolute error (x_1 - x_2)";
SIadd.nonDim[n] Error_rel "Relative error (x_1 - x_2)/x_2";
Boolean allPassed(start=true);
equation
(Error_rms,Error_abs,Error_rel,passedTest) = ErrorTestFunction(x_1,x_2, tolerance);
when passedTest < 1 then
allPassed = false;
end when;
end TestCheck;
嗨斯科特,非常有趣代码块。这是一个很好的检查,非常有用。您可能会发现Modelica中的'assert'函数可以很好地处理您的'passedTest'和'allPassed'变量。 –
确实。不过,我还有一些额外的代码,它不会将输出发送到一个文件,然后每天晚上检查版本控制。但是,也许警告状态的断言会很有用......我也有一个红色vs绿色,在gui上显示视觉阙。 –
Scott,您是否参加过上一次北美Modelica用户组会议?我记得你的介绍!你有没有任何资源可供在线参考? –
对于模型校准和验证,我们把模型输出到FMU和其他工具做到了,我们成功地使用例如MATLAB或Mathematica。
在过去的大学研究项目中,我们开发了基于集合边界估计复杂模型的模型参数的工具。从MATLAB优化工具箱借用的遗传算法尝试几十到几千次仿真,以获得尽可能接近的结果。后端.NET,前端HTML 5,通过REST API进行的Javascript + Jquery通信,独立的计算节点通过REST API暴露FMU。有限的演示在app.physiovalues.org
更多选项或至少收集什么是可以在这里找到:https://stackoverflow.com/questions/36157220/unit-testing-modelica-component-library – Christoph