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

2024-06-14 13:28

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

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

1. 类图

2. 原理解析

          2.1 核心函数: 

           Port作为各类型端口的基类,其核心方法如下 :

函数功能
Port(Agent owner)构造函数,入参指定端口所属的智能体;

void connect(Port<OutMessageType,InMessageType> port)

void disconnect(Port<OutMessageType,InMessageType> port)

与和owner同层级的Agent的端口建立或取消连接;

void map(Port<InMessageType,OutMessageType> port)

void unmap(Port<InMessageType,OutMessageType> port)

与内嵌智能体的端口建立或取消连接;

void map(Statechart statechart)

void unmap(Statechart statechart)

与owner内的状态图建立或取消连接;
void send(OutMessageType msg)发出消息
void receive(InMessageType msg)接收消息
List<Port<OutMessageType,InMessageType>> getFlatLinks()获取该端口与owner同层级的Agent建立连接的端口列表;
List<Port<InMessageType,OutMessageType>> getUpLinks()获取该端口与owner的容器智能体建立连接的端口列表;
List<Port<InMessageType,OutMessageType>> getDownLinks()获取该端口与owner内嵌智能体建立连接的端口列表;
List<Statechart> getStatechartLinks()获取该端口与owner内建立连接的状态图列表;
           2.2 连接类型图形说明

        2.3 代码解析    

         由于AnyLogic内核做过代码混淆,以下代码为二次加工后的内容,与源码不同;

//**************************** Port核心字段******************************************
// 该端口的owner
private transient Agent owner;
// 该端口与和owner同层级Agent建立连接的端口列表
protected transient List<Port<OutMessageType, InMessageType>> flatLinks;
// 该端口与owner的容器Agent建立连接的端口列表
protected transient List<Port<InMessageType, OutMessageType>> upLinks;
// 该端口与owner的内嵌Agent建立连接的端口列表
protected transient List<Port<InMessageType, OutMessageType>> downLinks; 
// 该端口与owner的状态图建立连接的状态图列表
protected transient List<Statechart> statecharts; //****************************构造函******************************************************
Port(Agent owner){this.owner = owner;this.flatLinks = new LinkedList<>();this.upLinks = new LinkedList<>();this.downLinks = new  LinkedList<>();this.statecharts = new LinkedList<>();
}//************依据建立或取消连接的场景,在对应的列表中进行元素的增删维护**********************
public void connect(Port<OutMessageType, InMessageType> port) {// 避免重复添加,即接口调用具有幂等性if (this.flatLinks.contains(port)) {return;}this.flatLinks.add(port);port.flatLinks.add(this);
}
public void disconnect(Port<OutMessageType, InMessageType> port) {this.flatLinks.remove(port);port.flatLinks.remove(this);
}public void map(Port<InMessageType, OutMessageType> port) {this.downLinks.add(port);port.upLinks.add(this);
}
public void unmap(Port<InMessageType, OutMessageType> port) {this.downLinks.remove(port);port.upLinks.remove(this);
}public void map(Statechart statechart) {this.statecharts.add(statechart);
}
public void unmap(Statechart statechart) {this.statecharts.remove(statechart);
}//****************************消息收发**************************************************
public void send(OutMessageType message) {if (this.owner.executeOnSendActionOf(this, message)) {// owner的容器Agent建立连接的端口逐个发送消息for(Port<OutMessageType,InMessageType> port : this.upLinks){port.send(message);}// owner同级Agent建立连接的端口逐个接收消息for(Port<OutMessageType,InMessageType> port : this.flatLinks){port.receive(message);}     }
}public void receive(InMessageType message) {boolean need = this.owner.executeOnReceiveActionOf(this, message);this.owner.onChange();if (need) {// owner内嵌Agent建立连接的端口逐个接收消息for(Port<InMessageType, OutMessageType> port : this.downLinks){port.receive(message);}// owner状态图建立连接的逐个接收消息for(Statechart statechart : this.statecharts){statechart.receiveMessage(message);}}
}

3. 应用场景

          图形编辑窗口拖入Port组件后,Anylogic将自动创建Port实例,主要用于实现智能体间消息通信;

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



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

相关文章

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