在anylogic中运行N次仿真

Runnig N times the simulation in anylogic

在我的anylogic Project中,我想终止我的执行和运行模拟N次。在每个模拟中,我将输出存储在 excel 文件中,该文件取决于 运行 计数。 我不想通过单击停止和 运行ning,而是想自动执行。我怎样才能做到这一点? 我尝试使用事件并通过 while 循环 (myparm<=N) 编写,在循环中我编写了 getEngine().运行,但它没有用! 如果可能请帮助我。

谢谢

下面概述了如何使用 AnyLogic 使用的现有仿真框架来实现这一点的方法

您需要使用模拟设置才能 运行 多个 运行 模型并保存输出。我建议的设置如下:

在您的模拟实验页面(运行构建模型时看到的第一页)上有一个按钮,您将使用它来启动多个模型 运行s。在这里,您使用

将引擎设置为在实时模式下不 运行
getEngine().setRealTimeMode(false);

您可能还想设置初始种子和其他一些您可能还想更改并可能在模型执行后保存的模型参数。当您按照您想要的方式设置模型后,使用 运行() 开始 运行 模型。

现在,在 'Java actions' 部分下的模拟实验设置页面下,您需要指定模型在完成 运行 模型后必须执行的操作。在 'After simulation run' 部分编写一些代码以将模型中的数据保存到 Excel 文件中。要从模型中访问变量和对象,请使用 root,例如

saveSomeData(root.myDataset);

其中 saveSomeData 是模拟页面上的一个函数,用于将我在模型上找到的名为 myDataset 的数据集保存到 Excel 文件中。如果您更改了任何内容,最好将种子和特定参数保存到 Excel 文件以供将来参考。

保存模型的数据输出后,您可以指定一个新的种子并可能再次更改参数,然后再次调用 运行() 以 运行 模型进行另一次迭代。当模型完成 运行ning 时,它将再次调用此处的 'After simulation run' 代码,因此请设置一个停止条件,否则它只会继续 运行ning 一次又一次的迭代。您可以使用

访问模型 运行 的数量

getEngine().getRunCount()

此外,您的模型需要有一些停止条件,否则一旦启动 运行ning 它将永远不会停止。您可以在 'Model time' 部分下的模拟实验页面中或使用

在您的模型中以编程方式指定它
finishSimulation();

为了运行模型循环,请在超时触发事件的Action字段或顶级代理的On destroy字段中使用以下代码:

new Thread(){
    public void run(){
        // stops the model
        getExperiment().stop();
        try {
            // delay
            this.sleep(1000);
        } catch(Exception e) {};
        // runs it again
        ((Simulation) getExperiment()).button.action();
    }
}.start();

在执行此代码之前,应将模型结果写入 Excel 文件。 正如 Jaco-Ben 建议的那样,您可以将 getEngine().getRunCount() 指定为重新启动模拟实验的条件。