使用OMPython在OpenModelica中进行参数扫描

使用OMPython在OpenModelica中进行参数扫描,python,modelica,openmodelica,Python,Modelica,Openmodelica,我正在尝试使用OMPython在OpenModelica中运行参数扫描。假设我有一个Modelica model my_model.mo属于库my_library。该模型有两个参数:a和b。 我使用以下代码成功地运行了单个参数运行: from OMPython import OMCSessionZMQ omc = OMCSessionZMQ() omc.sendExpression('loadModel(my_library)') omc.sendExpression('simulate(my_

我正在尝试使用OMPython在OpenModelica中运行参数扫描。假设我有一个Modelica model my_model.mo属于库my_library。该模型有两个参数:a和b。 我使用以下代码成功地运行了单个参数运行:

from OMPython import OMCSessionZMQ
omc = OMCSessionZMQ()
omc.sendExpression('loadModel(my_library)')
omc.sendExpression('simulate(my_library.my_model, simflags="-overrideFile=parameter_sweep.txt", stopTime=86400)')
其中,文件参数_sweep.txt为:

a=5
b=6
现在的问题是:如何运行多个参数化运行?我可以在代码中再添加一行,其中使用了一个新的txt文件(parameter_sweep1.txt),其中包含一组新的参数值:

from OMPython import OMCSessionZMQ
omc = OMCSessionZMQ()
omc.sendExpression('loadModel(my_library)')
omc.sendExpression('simulate(my_library.my_model, simflags="-overrideFile=parameter_sweep.txt", stopTime=86400)')
omc.sendExpression('simulate(my_library.my_model, simflags="-overrideFile=parameter_sweep1.txt", stopTime=86400)')

不过,我恐怕有需要以这种方式重新编译。有没有一种方法可以执行多个参数运行并避免重新编译?

使用
buildModel
命令而不是
simulate
,然后在Python中使用库(如
subprocess
)手动启动进程。该命令很简单,类似于:

["./my_library.my_model", "-overrideFile=parameter_sweep.txt"]

(如果您使用Windows,我相信您也需要更新PATH环境变量,以便找到使用过的DLL。如果您使用Linux,它就可以正常工作。)

谢谢您的回答。问题是,我正在尝试创建一个完全自动化的流程,其他用户也可以轻松地运行该流程。因此,我不确定这种方法是否适用于我的情况……一种解决方案可能是以某种方式调整此处建议的代码,但我不确定如何在OMPython代码中实现for循环(或者通常如何通过OMPython运行.mos脚本)。您可以使用sendExpression运行整个mos脚本。或者更好:在Python中创建for循环等。通过使用Python编写,您可以更好地控制出现错误时的操作。如果所有的事情都是一个大的mos脚本,那么你就不知道在一个循环中是否成功了。