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

相关文章

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

Java JSQLParser解析SQL的使用指南

《JavaJSQLParser解析SQL的使用指南》JSQLParser是一个Java语言的SQL语句解析工具,可以将SQL语句解析成为Java类的层次结构,还支持改写SQL,下面我们就来看看它的具... 目录一、引言二、jsQLParser常见类2.1 Class Diagram2.2 Statement

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软