【仿真建模-anylogic】事件之手动定时触发
Author:赵志乾
Date:2024-06-11
Declaration:All Right Reserved!!!
问题:建模过程中经常遇到需要临时规划特定逻辑执行时机的场景;
解决方案:在Event的User Control模式下,通过api方式对事件对象进行操控;事件对象的常用api见下表:
函数 | 功能 |
boolean isActive() | 判定事件对象是否存在尚未调度的执行规划 |
void reset() | 取消事件对象上尚未调度的执行规划 |
void restart(double timeout, TimeUnits units) | 重新为事件对象设置执行规划 |
double getRest(TimeUnits units) | 获取当前时刻至Event逻辑触发时的时间间隔,当Event不存在尚未执行的规划时,该函数将返回infinity。 |
代码模板以及额外事项说明:
// 前提条件: 容器智能体内已有事件event定义,并且设置模式为user control;
if(condition){// step1: 基于当前时刻重新规划执行时机--10分钟后执行事件event.restart(10,MINUTE);
}额外说明:
1. reset函数内部会自动将超时时间设置为Double.POSITIVE_INFINITY;此时再调用isActive函数将返回false;
2. restart函数内部会自动调用reset函数,用户无需再额外处理;
3. User Control模式下,事件一旦被触发将自动进入失活状态,即调用isActive函数将返回false;
4. restart函数将超时时间设为Double.POSITIVE_INFINITY时,事件对象将自动进入失活状态;
5. 基于以上描述,一个Event对象只能串行调度事件,且在特定时刻只能规划未来一个执行时刻,当在前一次规划时刻前重新规划时,原有规划内容将被覆盖(原因: restart自动调用reset取消尚未执行的规划);