【仿真建模-anylogic】EventCondition原理解析

2024-06-15 17:44

本文主要是介绍【仿真建模-anylogic】EventCondition原理解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Author:赵志乾
Date:2024-06-15
Declaration:All Right Reserved!!!

1. 类图

2. 原理解析

2.1 核心函数
函数功能
EventCondition(Agent owner)构造函数,入参设定事件的owner
void start()启动事件上的条件检测;如果启动时条件为true,则事件会被立即执行
void reset()取消当前的事件调度
void restart()重新在条件上启动检测
void onChange()变更发生时执行
boolean isMonitoring()判定当前是否在条件上做检测
2.2 代码解析

          由于Anylogic内核做了代码混淆,以下代码为二次加工后的逻辑:

//**************************核心字段************************
// 条件是否处于检测中
private boolean monitoring = false;//**************************构造函数************************
//设定事件的owner
public EventCondition(Agent owner) {super(owner);
}//*************************启动函数**************************
//在owner的start()函数中调用
public void start() {// 禁用超时事件--条件和超时拥有共同的基类this.disableTimeoutEvent();// 在引擎中注册该事件this.getAgent().getEngine().register(this);// 设置检测状态this.monitoring = true;// 首次判定,如果此刻条件满足,则立即执行if (this.getAgent().testConditionOf(this)) {this.enableTimeOutEvent(0.0); // 超时时间为0,即为立即开始执行}
}//************************取消检测与重启检测*********************
//取消检测
public void reset() {// 禁用超时事件this.disableTimeoutEvent();// 设置检测状态为取消this.monitoring = false;// 引擎中移除事件this.getAgent().getEngine().unregister(this);
}
// 重启检测
public void restart() {// 禁用超时事件this.disableTimeoutEvent();// 设置检测状态为启用this.monitoring = true;// 引擎中注册事件this.getAgent().getEngine().register(this);
}public boolean isMonitoring() {return this.monitoring;
}//***************************变更**********************************
public void onChange() {// 未检测时不执行if (!this.monitoring) {return;}// 未触发检测条件时,再次禁用超时事件if (!this.getAgent().testConditionOf(this)) {this.disableTimeoutEvent();return;}// 如果事件未做超时规划,则规划0时长超时触发,即立刻执行if (!this.isActive()) {this.enableTimeOutEvent(0.0);}
}//******************************执行逻辑****************************
void execute() {super.execute();Agent owner = this.getAgent();// 条件未满足则不执行if (!owner.testConditionOf(this)) {this.getAgent().nothingChanged();return;}// 设置检测状态为取消this.monitoring = false;try {// 执行自定义逻辑owner.executeActionOf(this);} finally {// 如果处于未检测状态则从引擎中移除事件,所以如果想再次启用检测需要调用restart方法if (!this.monitoring) {owner.getEngine().unregister(this);}}
}

3. 应用场景

        图形编辑窗口拖拽Event组件,并选择Trigger Type为Condition时,Anylogic会自动生成EventCondition实例;当指定的检测条件为true时,自定义逻辑会被执行;

        如果条件使用连续变化量,则数值引擎会持续检测条件是否发生;

        如果是纯离散模型,则只会在变更发生时才会进行检测,即在onChange函数中检测;

这篇关于【仿真建模-anylogic】EventCondition原理解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064139

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines