服务热线:010-62964229
格瑞纳根植于教育行业,让仿真软件从理论教学到应用实践
新闻资讯
当前位置:首页 > 新闻资讯 > 行业新闻
建模技巧 | AnyLogic智能体组件—— 事件(event)
2022-06-22 15:18:20 发布人:admin 阅读 3489

一、关于事件

在智能体面板中,点击并拖拽到编辑窗口中,即可创建事件(Event)。

 

二、事件属性设置

创建事件后,即可在右侧属性面板中,设置事件的属性。

 

“行动”中,编写代码,当事件触发,执行事件,就是执行这段代码

三、事件触发类型和模式

触发类型和模式,是事件主要关注的地方,Anylogic提供了三种触发类型和相应的模式:

触发类型

模式

说明

 

到时(默认)

用户控制

需要手动在代码中调用restart()(或有参数的restart)方法,来控制事件开始。

发生一次(默认)

经过设置的时间,或到了设置的日期时,事件触发一次。

循环

事件循环多次发生。比如每5秒发生一次等。

速率

——

每秒/分钟/小时/...   发生n次(n由用户设定)。

条件

——

当设置的条件为true,触发事件。

 

下面我们将就不同触发类型及模式展开进行说明。

 

1.到时触发类型,即当经过了设置的时间后,事件触发。

到时触发类型——用户控制模式

需要手动在代码中通过调用restart()方法,来控制事件开始运行。

操作示例:

a.新建项目,使用默认的模型时间单位 秒。

 

 

b.添加一个按钮,一个事件。

 

c.如下设置event-事件的属性:

 

 

到时,设置为5秒,

“行动”中的代码会在控制台打印输出“-----浇水-----

 

d.button的“行动”中,书写代码

 

运行模型, 发现event并没有执行,控制台也没有输出信息。

 

此时,点击button,则会发现,event会倒计时5s,在控制台打印输出----浇水----

 

 

点击button,则会调用event.restart(),在倒计时5s后,打印输出信息。

如果在倒计时的时候,再次点击button,会发现事件会重新从5s开始倒计时,

因为restart()会取消上一个事件,重新开始一个事件。

 

扩展一:restart(double  timeout)

修改button的代码

 

运行模型,点击button,会发现event会从10s开始倒计时。

 

 

扩展二:restart(double  timeout , TimeUnits  units)

 

修改button代码:

 

运行模型,点击buttonevent则会从1分钟(60秒)开始倒计时

 

 

到时触发类型——发生一次模式(默认)

当过了设置的时间后(或到了设定的日期时)事件发生一次。

 

沿用上面的例子,修改event-事件的模式,
则会出现图中红色圈出的选项。

 

使用模型时间  发生时间(绝对)设为20 秒, 则从模型运行开始,计时20s,事件会发生

使用日历日期  则事件会在指定的日期,发生一次。

 

如上图设置,运行模型,不用点击buttonevent会自动从20s开始倒计时

这就是“发生时间(绝对)”的含义,从模型运行开始进行计时。

 

同样,依然沿用button的代码:

event.restart(1,MINUTE);

运行模型,点击buttonevent会从60s开始倒计时。

 

扩展:使用日历日期

 

event会在指定的时间日期(20225268:00:00)触发。

 

到时触发类型——循环模式

循环多次发生(每隔一定的时间,或是按照设定的日期,触发事件)。

 

删除button。下面的event-事件的,都会自动触发,故不再需要button

 

修改event-事件的属性

 

首次发生时间(绝对):从模型运行开始计时,一定时间后,第一次发生。

复发时间:两次事件之间的时间间隔(每隔一定时间,发生一次)。

 

以上设置,event会在模型开始运行后,计时20s第一次发生,之后每隔5秒,发生一次。

如图设置,运行模型,观察event倒计时情况。

 

控制台输出:

 

 

2.速率触发类型,即每秒/分钟/小时/...  触发n次( n由用户设定)

操作示例:

修改event-事件的属性:速率选择输入5,单位选择每秒

 

则会每秒触发5次事件

 

 

 

3.条件触发类型,即当设置的条件为真(true)时,触发事件

操作示例:

添加一个button,一个变量variable

 

属性分别设置如下

 

 

 

 

 

变量variable初始值为false, 当点击button时,其值变为true,此时事件触发,打印输出。

运行模型,发现没有输出,点击button,发现控制台有输出。

 

此外,还可以判断事件是否正在计划运行,取消事件,让事件停止运行,恢复停止的事件等等。详见第四部分API 操控事件的方法。

四、API  操控事件的方法

注意:以下的时间,均为模型时间(而不是真实的时间)

到时触发类型的事件方法

boolean  isActive()

如果当前事件正在计划运行,返回true

否则返回false

void  reset()

取消当前计划的事件(如果有的话)。

如果事件模式是循环”,则周期不会继续下去,直到调用restart()restart( double t )

void  restart()

取消当前计划的事件(如果有的话)。

并根据参数指定的时间,触发个事件。

restart()  

(经过事件属性中设置的时间后)触发事件

restart(double  timeout)  

timeout时间后,触发事件,时间单位默认为模型时间单位

restart(double  timeout,  TimeUnits  units)

timeout时间后,触发事件,时间单位units

 

例:假设模型时间单位为秒(s

event.restart()  (经过事件属性中设置的时间后)触发事件

event.restart(10)  10秒后,触发事件

event.restart(10, SECOND) 10秒后,触发事件

event.restart(20, MINUTE)  20分钟后,触发事件

 

void  restart( double  timeout)

void  restart( double  timeout, TimeUnits  units)

void  restartTo( double  time)

从模型运行开始的time时间后(默认模型时间单位),触发事件

void  restartTo( double  time, TimeUnits  units)

从模型运行开始的time时间后(时间单位units),触发事件

例:

event.restartTo(10, MINUTE) 从模型运行开始的10分钟后,触发事件

void  restartTo( Date  date)

在指定日期date,触发事件

void  suspend( )

取消当前事件(如果有的话),并且会记住距离事件触发还剩余的时间,便于通过调用resume()恢复事件

void  resume( )

恢复之前被挂起(suspend)的事件

double  getReset( TimeUnits  units)

以给定的时间单位units返回事件计划发生之前的剩余时间。如果未调度事件,则函数返回infinity

例如:

event.getReset(SECOND) 返回事件event计划触发前剩余的时间(单位秒)

 

条件触发类型的事件方法

void  reset()

取消当前计划的事件(如果有的话)。停止等待条件(等待事件的条件成立)

(可以稍后通过调用restart()来恢复

void  restart()

恢复等待条件。

 

速率触发类型的事件方法

boolean  isActive()

如果当前事件正在计划运行,返回true

否则返回false

void  reset()

取消当前计划的事件(如果有的话)。

如果事件模式是循环”,则周期不会继续下去,直到调用restart()

void  restart()

取消当前计划的事件(如果有的话),并且根据速率,计划下一次事件。

double  getReset()

模型时间单位,返回事件计划发生之前的剩余时间。如果未调度事件,则函数返回infinity

double  getReset(TimeUnits  units)

以给定的时间单位units返回事件计划发生之前的剩余时间。如果未调度事件,则函数返回infinity

例如:

event.getReset(SECOND) 返回事件event计划触发前剩余的时间(单位秒)

  电话:010-62964229
  邮箱:support@carila.cn
  地址:北京市海淀区上地信息产业基地三街3号楼1门4层401
©2021 北京格瑞纳电子产品有限公司 版权所有 京ICP备19024141号 京公网安备 11010802029095号
 
QQ在线咨询
点击这里给我发消息 点击这里给我发消息
服务热线
010-62964229
E-mail
support@
carila.cn
地址:北京市海
淀区上地信息产
业基地三街3号