【仿真建模-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

相关文章

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装