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

2024-06-17 08:52

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

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

1. 类图

2. 原理解析

2.1 核心函数
函数功能
FlowchartBlock(Engine engine ,Agent owner, AgentList population )构造函数,入参设定引擎、owner以及所在的群
boolean isInsideFlowchartBlock()判定该Block是否为内部Block,即是否是其他Block的组成部分
FlowchartBlock getFlowchartBlockRepresentative()获取该Block的顶层Block,如果该Block非内部Block,返回Block本身
Agent remove(Agent agent, FlowchartBlock receiver)从Block中移除并返回指定Agent,如果receiver不为空,则receiver将持有指定Agent
Agent suspend(Agent agent)让Block挂起对指定Agent的处理(幂等);如果指定Agent本就处于挂起状态或不被该Block持有,则返回null
Agent resume(Agent agent)让Block重新恢复对指定Agent的处理(幂等);如果指定Agent存在该Block内且之前处于挂起状态则返回指定Agent,否则返回null
2.2 代码解析

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

//*************************构造函数******************************
public FlowchartBlock(Engine engine, Agent owner, AgentList<?> population) {// 调用父类Agent的构造函数,入参分别为:引擎、所属owner、所属群super(engine, owner, population);
}//*************************层级函数******************************
// 判定该Block是否为内部Block
public boolean isInsideFlowchartBlock() {// 判定标准:顶层Block是否为自身return this.getFlowchartBlockRepresentative() != this;
}
// 获取顶层Block
public FlowchartBlock getFlowchartBlockRepresentative() {// 如果owner是Block,则递归地获取顶层BlockAgent owner= this.getOwner();return owner instanceof FlowchartBlock ? ((FlowchartBlock)owner).getFlowchartBlockRepresentative() : this;
}//*************************内容操控函数***************************
// 从Block中移除指定Agent,如果receiver不为空,则移除的agent将有receiver持有
public Agent remove(Agent agent, FlowchartBlock receiver) {// 默认不支持,需由子类覆写throw this.error("not support");
}//*************************处理控制函数***************************
// 挂起
public Agent suspend(Agent agent) {// 默认不支持,需要子类覆写throw this.error("not support");
}
// 恢复
public Agent resume(Agent agent) {// 默认不支持, 需要子类覆写throw this.error("not support");
}

3 应用场景

       该类为所有流程处理块的基类,定义标准函数;

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



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

相关文章

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3