控制模型执行 | AnyLogic帮助
当运行AnyLogic模型时,您可以使用控制面板来控制模型的执行,控制面板显示在AnyLogic模型窗口的底部。
控制面板包含用于控制启动模型执行的按钮:
按钮 | 命令 | 描述 |
---|---|---|
运行 | [仅当模型当前未运行时可见] 从当前状态运行模型。模型将运行直到您手动通过点击 暂停或 停止按钮(或直到模型中的某些内容暂停或停止其执行)。 您可以运行模型直到指定的模型时间点,或从当前时刻开始运行指定的模型时间间隔。有关详情,请参阅“运行模型直到特定日期或特定时间间隔”。 | |
暂停 | [仅当模型当前正在运行时可见] 暂停运行中的模型。您可以随时恢复暂停的模拟。 您可以在指定的模型时间点暂停模型,有关详情,请参阅“运行模型直到特定日期或特定时间间隔”。 | |
停止 | 终止模型运行。 |
当模型中没有活动时,运行控制将变为禁用状态。这表明您的模型已完成其工作。
您可以在模型运行时从代码中启用或禁用这些按钮,并检查它们的状态(启用/禁用)。这些特性在“访问演示”的控制面板部分中有描述。
从代码控制模型执行
您可能需要以编程方式控制模型执行。例如,您可能需要在某个事件到期时暂停模型,并在状态图转换发生时恢复其执行。AnyLogic提供了一个丰富的API,能够解决所有与控制模型执行相关的任务。
下表列出了模型引擎的相关功能以及每个代理中可用的类似功能。
要调用引擎函数,请在模型中需要的位置编写,例如,getEngine().finish()
或者,您可以直接从任何代理活动中调用类似的函数finishSimulation()
。
引擎函数 | 代理的功能 | 简短描述 | 完整描述 |
---|---|---|---|
boolean start() | N/A | 启动模型(如果当前处于空闲状态)并暂停它。 | 引擎命令仅适用于IDLE状态(在其他状态下不执行任何操作并返回false)。执行以下操作: 1. 设置模型执行的开始时间。 2. 在根对象中创建所需的内容—调用root.create();。 3. 启动模型(首先调度事件)—调用root.start();。 4. 将引擎置于PAUSED状态。 |
boolean pause() | boolean pauseSimulation() | 暂停运行中的模型。将引擎置于PAUSED状态,并在完成当前事件执行后终止模型。 | 引擎命令仅适用于RUNNING状态(在其他状态下不执行任何操作并返回false)。将引擎置于PLEASE_WAIT状态,然后设置一个标志,当引擎测试此标志时,会在完成当前事件执行后终止。进一步的行为取决于调用此函数的上下文: - 如果此函数是从模型执行线程、控制动作代码或形状的点击代码中调用的,它将立即返回true。模型将在当前事件执行后立即暂停。 - 如果此函数是从其他位置调用的(例如,用户定义的并发线程),它将等待模型执行线程终止然后返回true。 到此函数完成时,引擎可能处于PAUSED、FINISHED或ERROR状态。如果引擎状态不允许暂停,则返回false。 |
boolean run() | boolean runSimulation() | 如果模型当前处于暂停状态,则运行模型。将引擎置于RUNNING状态,然后开始模型执行。 | 引擎命令仅适用于PAUSED状态(在其他状态下不执行任何操作并返回false)。将引擎置于RUNNING状态,然后开始模型执行。执行可能因以下原因之一而中断: - 没有更多的事件要执行(状态->FINISHED) - 达到停止时间(状态->FINISHED) - 调用了pause()(状态->PAUSED) - 调用了finish()(状态->FINISHED) - 顶级代理已被销毁(状态->FINISHED) - 在事件执行或代理销毁期间发生异常(状态->ERROR) 此函数永远不应该从模型执行线程调用! 到此函数完成时,引擎可能已经处于PAUSED、FINISHED或ERROR状态。 如果引擎状态不允许运行,则返回false。 |
boolean stop() | boolean stopSimulation() | 终止模型执行,销毁模型,并忘记它。然后将引擎置于IDLE状态并返回true。 | 引擎命令仅适用于任何非IDLE状态(在IDLE状态下不执行任何操作并返回false)。如果状态是RUNNING,设置一个标志,当模型执行线程测试此标志时,会导致它终止。进一步的行为取决于调用此函数的上下文: - 当此函数从模型执行线程、控制动作代码或形状的点击代码中调用时,它将立即返回true,留下模型处于PLEASE_WAIT状态。模型将在稍后停止和销毁(可以使用实验的After Simulation Run代码或顶级代理的On Destroy代码来处理这一刻)。 在这种情况下,更推荐使用finish()函数。 - 当此函数从其他位置调用时(例如,用户定义的并发线程),它将等待模型执行线程终止,然后销毁模型(调用root.onDestroy())并忘记它。之后,它将引擎置于IDLE状态并返回true。 |
boolean finish() | boolean finishSimulation() | 完成当前正在运行或已暂停的模型。与stop()函数不同,它不销毁模型,因此您可以检查和分析其状态。 | 引擎命令仅适用于RUNNING或PAUSED状态(在其他状态下不执行任何操作并返回false)。设置一个标志,当引擎测试此标志时,会在完成当前事件执行后完成。进一步的行为取决于调用此函数的上下文: - 当此函数从模型执行线程、控制动作代码或形状的点击代码中调用时,它将立即返回true。模型将在当前事件执行后完成(可以使用实验的After Simulation Run代码来处理这一刻)。 - 当此函数从其他位置调用时(例如,用户定义的并发线程),它将等待模型执行线程终止并返回true。 到此函数完成时,引擎可能处于FINISHED或ERROR状态。如果引擎状态不允许暂停,则返回false。 |
boolean runFast() | N/A | 以尽可能快的方式运行模型。无论任何设置,都是在虚拟时间模式下运行。 | 在同一(调用)线程中以尽可能快的方式运行模型。无论任何设置,都是在虚拟时间模式下运行。此函数在以下情况下结束: - 当调用时引擎状态非法(返回false,在所有其他情况下返回true) - 没有更多的事件/方程要执行(状态->FINISHED) - 达到停止时间(状态->FINISHED) - 调用了pause()(状态->PAUSED) - 调用了finish()(状态->FINISHED) - 顶级代理已被销毁(状态->FINISHED) - 在模型执行期间发生异常(状态->ERROR) 在整个运行过程中,模型被锁定,因此您不应尝试显示代理演示,或执行可能访问模型的任何并发操作。 如果引擎状态不允许运行,则返回false。 |
boolean step() | N/A | 从PAUSED状态开始,最多执行模型的一个离散步骤。 | 从PAUSED状态开始,最多执行模型的一个离散步骤。在FINISHED、ERROR或PAUSED状态下结束。 此函数永远不应该从模型执行线程调用! 如果引擎状态不允许执行步骤,则返回false。 |
Engine.State getState() | N/A | 返回引擎的当前状态(IDLE、PAUSED、RUNNING、FINISHED、ERROR或PLEASE_WAIT)。 | 返回引擎的当前状态: - IDLE — 没有模型设置为执行,什么都不做。 - PAUSED — 模型已设置并已启动,准备运行或执行步骤。 - RUNNING — 在由run()或runFast()调用的模型执行循环中。 - FINISHED — 模型执行已成功完成,但模型尚未销毁。 - ERROR — 模型执行以错误结束,模型尚未销毁。 - PLEASE_WAIT — 正在执行一个不可中断的命令,如pause()、step()或stop()。 但是,不能保证这种状态总是如此,因为可以随时进行更改。 |
boolean getRealTimeMode() | N/A | 返回当前模型执行模式。 | 返回当前模型执行模式。如果当前执行模式是实时的,则返回true;如果是虚拟时间的,则返回false。 |
void setRealTimeMode(boolean on) | N/A | 设置虚拟或实时执行模式 |