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

关于动态事件

动态事件和事件之间的区别在于,动态事件在执行其操作后会自行删除,而用户控制的事件会继续存在并可以重新启动。

AnyLogic 会给添加到关系图中的每个动态事件生成一个 Java 类,因此应遵循 Java 命名约定。动态事件的起始名称以大写字母开头

动态事件可以传递参数

 

创建动态事件实例

当创建了一个动态事件后,需要创建动态事件实例,来使用它。

要计划动态事件的一个新实例,请使用 AnyLogic 为每个动态事件自动生成的函数:

create_dynamic_event_name(超时、时间单位、参数 1、参数 2、...) 

例如,动态时间名为Watering,则可以调用函数create_Watering(15, MINUTE),如果指定了模型时间单位,则可以简写为create_Watering(15)

使用create_...()函数创建动态事件实例,是唯一合法的方式

 

没有访问动态事件的简便方式,getDynamicEvents()会得到包含所有动态事件的列表,

最好自行保存动态事件的引用, MyDynamic de = create_MyDynamic(7.5);

 

1:不带参数的动态事件

假设模型时间单位为

 

a.拖拽一个动态事件,改名为Watering,没有任何参数,代码如图:

 

此时,需要创建动态事件的实例,来使用动态事件

下面的两个方法,是Anylogic在检测到动态事件Watering后,自动生成的,用户只需调用,即可创建动态事件的实例。同时,可以传入时间参数,控制该实例在多少时间后触发。

这也是创建动态事件实例的唯一方式。

 

create_Watering( double  timeout )

 

(没有指定时间单位,则默认为模型时间单位)

创建一个动态事件的实例,该实例在timeout个模型时间单位后,触发。

 

例:create_Watering(20)

假设模型时间单位为秒,则该方法创建一个动态事件实例,计时20秒后触发。

create_Watering(double timeout, TimeUnits units)

创建一个动态事件的实例,该实例在timeout时间后触发,单位为units

 

例:

create_Watering(1, MINUTE)

创建一个动态事件实例,该实例在1分钟后触发。

 

b.为了方便演示,添加一个button,一个event,如图设置

 

 

 

 

 

 

点击button后,倒计时20秒,event会输出“----到时20----”,

同时动态事件实例会输出----浇水----

 

运行模型,点击button,结果与预期相符。

 

 

 

 

2: 带有参数的动态事件

a.参数

只需要修改动态事件Watering,添加参数即可。

在属性面板“参数”中,点击第一个单元格,即可输入参数名;点击第二个单元格即可输入参数的类型,也可通过在下拉框中选择自动给出的类型,如图:

 

 

点击第二行的第一个单元格,即可添加第二个参数。

也可以通过点击添加参数;点击一个参数,再点击即可删除参数;

有多个参数时,点击一个参数,再点击即可调整参数顺序(当向动态事件传递参数时,必须按照这个顺序)

 

这里为了简单演示,只添加一个参数name,类型为String

 

b.修改代码,输出参数name

 

 

c.修改button代码

create_Watering(....)的时候,传入了参数“小明”

 

 

 

此时可以使用以下方法创建实例,传递一个参数

create_Watering( double  timeout , 参数)

 

(没有指定时间单位,则默认为模型时间单位)

创建一个动态事件的实例,该实例在timeout个模型时间单位后,触发。

 

例:create_Watering(20小明)

假设模型时间单位为秒,则该方法创建一个动态事件实例,计时20秒后触发。

create_Watering(double timeout, TimeUnits units, 参数)

创建一个动态事件的实例,该实例在timeout时间后触发,单位为units

 

例:

create_Watering(1, MINUTE, 小明)

创建一个动态事件实例,该实例在1分钟后触发。

 

 

扩展,多参数时,只需:

create_Watering( double  timeout , 参数1,参数2,...., 参数n)

create_Watering(double timeout, TimeUnits units, 参数1,参数2....,参数n)

 

d.运行模型,点击button

 

 

 

 

需要注意的是,create_Watering(...)方法,每次都会创建一个新的动态事件实例,在执行其操作后会自行删除

event只是restart()重启,每次使用的还是同一个event。

 

 

 

 

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