【仿真建模-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实例,主要用于实现智能体间消息通信;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/710174.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

德国欧洲杯观战掌中宝

点击标题下「蓝色微信名」可快速关注 今天03:00&#xff0c;德国欧洲杯即将拉开帷幕&#xff0c;首战德国对阵苏格兰&#xff0c;24支欧洲国家队&#xff0c;分为6个小组&#xff0c;你是谁的拥趸&#xff1f; 本届欧洲杯的比赛时间有三个&#xff0c;分别是零点、凌晨三点和晚…

利用MongoDB构建现代支付系统|附《利用AI在支付领域的优势》报告下载

MongoDB 支付 通过实时整合和分析任何格式的数据 来丰富支付体验 为消费者提供增值服务和功能 丰富的支付体验 接受并丰富任何支付数据类型 使用灵活的文档数据模型实时整合和处理任何支付数据类型。JSON 文档&#xff08;与 MongoDB 使用的数据格式相同&#xff09;是支…

FPGA中复位电路的设计

复位电路也是数字逻辑设计中常用的电路&#xff0c;不管是 FPGA 还是 ASIC 设计&#xff0c;都会涉及到复位&#xff0c;一般 FPGA或者 ASIC 的复位需要我们自己设计复位方案。复位指的是将寄存器恢复到默认值。一般复位功能包括同步复位和异步复位。复位一般由硬件开关触发引起…

2024海南省大数据教师培训-Hadoop集群部署

前言 本文将详细介绍Hadoop分布式计算框架的来源&#xff0c;架构和应用场景&#xff0c;并附上最详细的集群搭建教程&#xff0c;能更好的帮助各位老师和同学们迅速了解和部署Hadoop框架来进行生产力和学习方面的应用。 一、Hadoop介绍 Hadoop是一个开源的分布式计算框架&…

仿element-ui 实现自己组件库 <3>

目录 input 组件封装 v-model用在组件上 显示和隐藏密码 封装switch组件 实现转换的功能 设置checkbox input 组件封装 首先input组件的基本框架和样式&#xff1a; <div class"miao-input"><input class"miao-input_inner" > </div…

Java | Leetcode Java题解之第151题反转字符串中的单词

题目&#xff1a; 题解&#xff1a; class Solution {public String reverseWords(String s) {StringBuilder sb trimSpaces(s);// 翻转字符串reverse(sb, 0, sb.length() - 1);// 翻转每个单词reverseEachWord(sb);return sb.toString();}public StringBuilder trimSpaces(S…

这份简历让一位程序员在谷歌获得30万美元

大家好&#xff0c;我是弗雷。每次都在让大家尝试走出职场&#xff0c;但今天我们却选择再次走进职场。 作为曾经的职场人&#xff0c;我深深明白简历的敲门砖作用&#xff0c;制作一份优质的简历至关重要。 你所见过的最优秀的简历是什么样子&#xff1f; 或者你想象中最优秀…

全息图分类及相位型全息图制作方法

全息图是一种光学器件&#xff0c;全息图分为振幅型和相位型全息图&#xff0c;振幅型全息图记录光的振幅信息即强度信息&#xff0c;相位型全息图记录光的相位信息&#xff0c;利用相位信息可以恢复光的波前形状&#xff0c;从而记录物体形状&#xff0c;这里主要介绍相位全息…

Java多线程面试重点-2

16.Synchronized关键字加在静态方法和实例方法的区别? 修饰静态方法&#xff0c;是对类进行加锁&#xff08;Class对象&#xff09;&#xff0c;如果该类中有methodA和methodB都是被Synch修饰的静态方法&#xff0c;此时有两个线程T1、T2分别调用methodA()和methodB()&#x…

深度学习与人工智能

深度学习&#xff0c;是一种特殊的人工智能&#xff0c;他与人工智能及机器学习的关系如下&#xff1a; 近些年来&#xff0c;基于人工神经网络的机器学习算法日益盛行起来&#xff0c;逐渐呈现出取代其他机器学习算法的态势&#xff0c;这主要的原因是因为人工神经网络中有一中…

AI 客服定制:LangChain集成订单能力

为了提高AI客服的问题解决能力&#xff0c;我们引入了LangChain自定义能力&#xff0c;并集成了订单能力。这使得AI客服可以根据用户提出的问题&#xff0c;自动调用订单接口&#xff0c;获取订单信息&#xff0c;并结合文本知识库内容进行回答。这种能力的应用&#xff0c;使得…

Android 13 高通设备热点低功耗模式(2)

前言 之前写过一篇文章:高通热点被IOS设备识别为低数据模式,该功能仿照小米的低数据模式写的,散发的热点可以达到被IOS和小米设备识别为低数据模式。但是发现IOS设备如果后台无任何网络请求的时候,息屏的状态下过一会,会自动断开热点的连接。 分析 抓取设备的热点相关的…

如何查找您的 SOLIDWORKS 序列号或许可证密钥

每个 SOLIDWORKS正版的软件都有自己的许可密钥&#xff0c;也称之为SOLIDWOKS的序列号。硕迪科技作为SOLIDKS正版软件代理商&#xff0c;我们的技术团队经常帮助客户查找他们的序列号。这篇文章将向您展示如何查找您的 SOLIDWORKS 序列号。 如果您拥有独立的 SOLIDWORKS 许可&…

碳化硅陶瓷膜良好的性能

碳化硅陶瓷膜是一种高性能的陶瓷材料&#xff0c;以其独特的物理和化学特性&#xff0c;在众多领域展现出了广泛的应用前景。以下是对碳化硅陶瓷膜的详细介绍&#xff1a; 一、基本特性 高强度与高温稳定性&#xff1a;碳化硅陶瓷膜是一种非晶态陶瓷材料&#xff0c;具有极高的…

[Vulnhub]Solid-State POP3邮件服务(James)+rbash逃逸

信息收集&SSH Server IP addressPorts Open192.168.8.100TCP:22,25,80,110,119,4555 Nmap 扫描: $ nmap -p- 192.168.8.100 --min-rate 1000 -sC -sV 结果: Host is up (0.00061s latency). Not shown: 65529 closed tcp ports (conn-refused) PORT STATE SERVICE…

Nacos启动报错

报错日志&#xff1a; Caused by: java.lang.NullPointerException at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2983) at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1873) at com.mysql.jdbc.Mysql…

Spring boot 启动报:Do not use @ for indentation

一、使用maven插件动态切换配置时出现报错 二、配置文件及pom 2.1 配置文件结构 2.2 application.yml spring: # 根据环境读取配置文件&#xff08;手动&#xff09; # profiles: # active: dev# 根据环境读取配置文件&#xff08;通过勾选maven插件&#xff09;profiles…

SAP Build 2-PDF数据提取与决策

0. 安装desktop agent 在后续过程中发现要预先安装desktop agent&#xff0c;否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…

AI 一键换脸,背景替换,ioDraw让图片更有趣

还在为繁琐的图片处理而烦恼吗&#xff1f;快来试试ioDraw的AI图片工具&#xff01; 它集图像识别、图像生成、智能换脸、背景替换、图像融合、肖像风格化、空间风格化、智能扩图、智能抠图、画质提升、美颜、拉伸修复、透视校正等功能于一身&#xff0c;为你提供前所未有的图…

网络攻击第二节考题有问题的

这个选ab&#xff0c;不懂a是啥这俩是啥 DHCP欺骗-教程详解-CSDN博客 OSI七层网络攻击行为及防范手段_物理层的攻击方式-CSDN博客 这选项讲了吗 选abc 假消息攻击-CSDN博客 啥是ips防护 12题选adcd 为啥连接别人的wifi会被dns欺骗&#xff1f;&#xff1f; 连接的那个wifi…