求助:Dymola simulateMultiResultsModel函数随机终止模拟实例
Dymola simulateMultiResultsModel 多核参数化仿真随机崩溃问题
问题详情
我需要对模型中Modelica.Blocks.Logical.LessThreshold块的lesThrTOut.threshold参数执行多核参数化仿真,调用simulateMultiResultsModel函数执行如下命令:
simulateMultiResultsModel( "Thesis_Project.Experiments.HHSElecGasUsageCalib", stopTime=604800, method="Radau", tolerance=1e-06, numberOfIntervals=500, resultFile="HHSElecGasUsageCalib", initialNames={"lesThrTOut.threshold"}, initialValues=[3:1:9]);
执行后Dymola底部提示“Failed”,随机数量的dymosim.exe进程无日志崩溃,剩余实例继续运行(本次需仿真7个参数版本,完成数量在1到5之间波动)。
选择simulateMultiResultsModel的原因:Dymola自带的参数扫描工具不支持多核,而该函数支持多核并行仿真。
已尝试的排查操作
- 调整初始值的设置方式
- 更换其他参数进行扰动测试
- 将阈值参数绑定到自定义参数
foo,通过修改foo间接调整阈值
可能的解决方向
1. 检查模型并行安全性
- 排查模型中是否存在全局变量、共享资源或非线程安全的自定义外部代码,多核仿真时多个
dymosim.exe实例可能因资源冲突崩溃。 - 针对
LessThreshold块的离散事件触发场景,给阈值参数添加微小偏移(比如3.001:1:9.001),避免边界条件下的事件触发冲突。
2. 调整并行仿真配置
- 在
Options > Simulation > Multi-core中降低并行实例数量(比如从默认核心数改为4),避免系统资源过载导致随机崩溃。 - 启用详细日志:在函数调用中添加
logLevel="verbose"参数,或在Options > Simulation > Logging中开启dymosim日志记录,尝试捕获崩溃实例的错误信息(部分日志可能写入临时文件)。
3. 优化仿真参数
- 更换求解器:将
method="Radau"改为"CVode"或"DASSL",不同求解器对离散事件和并行仿真的兼容性存在差异。 - 调整数值参数:适当放宽容差(比如
1e-05)或增加区间数,减少仿真过程中的数值不稳定情况。
4. 模型重构优化
- 将目标阈值参数提升为顶层模型参数,避免直接修改子块参数可能带来的路径解析问题。
- 尝试用
simulateExtendedModel配合脚本循环实现多核仿真,手动控制并行实例的启动和错误捕获。
内容的提问来源于stack exchange,提问作者Daniel Jakob
相关产品推荐
相关产品推荐

