当前位置: 首页> 教育> 锐评 > 【仿真建模-anylogic】Port原理解析

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

时间:2025/7/25 21:04:40来源:https://blog.csdn.net/zhaoyaxuan001/article/details/139669250 浏览次数:0次
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原理解析

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: