我正在研究一个基于代理的流行病模型。这个想法是单个代理根据他们在网络中观察到的情况(基于距离)做出决定。我在每个代理中都有几个功能,可以动态更新受感染接触者的数量,接触者表现出特定行为等。
下面的代码用于计算代理网络中受感染的联系人。
int infectedConnections = 0;
if (getConnections() != null)
for (Agent a : this.getConnections())
{
Person p = (Person) a;
if (p.IsCurrentlyInfected())
infectedConnections++;
}
return infectedConnections ;
至少还有3个这样的函数可以保持表示代理网络中其他功能的其他代理的计数。现在,当我
有没有一种计算效率更高的方法来跟踪更大人口的网络统计数据?
正如其他答案所涵盖的,您的问题实际上是两个问题:
>
你的统计数据收集效率。
我很惊讶没有人提到这一点,但后者的主要性能问题是因为(似乎)您在需要统计数据的时候重新计算统计数据(并且您没有指定需要计算的频率),而不仅仅是在影响统计数据的状态更改时维护统计数据。
(这是(a)最小化内存并避免在所有适当时间[如您的方法]中不更新计数的潜在错误与(b)通过保留计数并仅在它们所依赖的事件发生时更新它们的速度之间的一般编程权衡。)
因此,只要让每个代理在其连接的代理中更新计数,只要它从未感染更改为已感染,反之亦然。
例如,假设您有10个代理,每个代理有9个连接(总共90个连接)。假设一个代理每10分钟(平均)更换一次受感染的代理,然后你运行60分钟。并且每分钟更新每个代理中的“感染连接数”。(如果您的效率很高,那么这个时间间隔将是两个可能的转换之间的最短时间间隔,但很可能是您查询它的频率远远高于这个时间间隔,或者最短时间间隔非常小。)
使用您的方法,您将检查90个连接60次(因此有5400个代理访问,以及每个代理获取/循环连接的开销)。
使用我的方法,将有6x10=60个相关转换,因此60x9=540次访问代理(增加/减少计数),加上仅通过代理的连接获取/循环60次而不是60x10=600次。所以
与您需要使用统计数据的频率相比,“稀有”转换的效率明显提高(反之亦然),因此,在某些情况下,这两种方法的性能相似。
你的结果是事情陷入1000到5000之间,这在我见过的基于代理的模型中很常见。这是一个基本的计算复杂性问题。对于N个代理,双向交互的数量是N. choose.2,即O(N^2)。5000个代理的工作量大约是1000个代理的25倍。
你可以用本地化来做一些特技。基本上,根据特定区域中的代理无法与其他区域中的代理交互的事实,将您的沙盒划分为不同的游戏区域,因此您只需要检查交互的子集。如果可能的话,将N个代理划分为k个独立的组将在运行时产生O(k)倍的改进。
另一种选择可能是摆脱时间步长框架,为您的问题制定基于事件的设计。您可以在本文中找到这种方法的示例。
模型未初始化,因为默认内存量不足以容纳5000个代理。它需要
如果使用Java流API重写代码,则可以增加该值:return(int)getConnections()。流()。过滤器(a-
然后,以0.5实秒(x2增益)执行1个模型秒。如果统计数据收集是并行执行的(使用多个线程,由Java代码创建),那么您可能会获得相应的收益,具体取决于PC上的内核数量。无论如何,这是计算复杂性问题,因此您需要更改方法(请参阅@pjs答案),否则性能会很差。
概述 IP 数据报格式 IP 地址编址方式 1. 分类 2. 子网划分 3. 无分类 地址解析协议 ARP 网际控制报文协议 ICMP 1. Ping 2. Traceroute 虚拟专用网 VPN 网络地址转换 NAT 路由器的结构 路由器分组转发流程 路由选择协议 1. 内部网关协议 RIP 2. 内部网关协议 OSPF 3. 外部网关协议 BGP 概述 因为网络层是整个互联网的核心,因此应当
本节部分知识点来自《计算机网络(第 7 版)》 计算机网络体系结构: 各层作用及协议 分层 作用 协议 物理层 通过媒介传输比特,确定机械及电气规范(比特 Bit) RJ45、CLOCK、IEEE802.3(中继器,集线器) 数据链路层 将比特组装成帧和点到点的传递(帧 Frame) PPP、FR、HDLC、VLAN、MAC(网桥,交换机) 网络层 负责数据包从源到宿的传递和网际互连(包 Pack
计算机网络.md
网络模型 在某些情况下,你需要理解Subversion客户端如何与服务器通讯。Subversion网络层是抽象的,意味着Subversion客户端不管其操作的对象都会使用相同的行为方式,不管是使用HTTP协议(http://)与Apache HTTP服务器通讯或是使用自定义Subversion协议(svn://)与svnserve通讯,基本的网络模型是相同的。在本小节,我们要解释网络模型基础,包括
OSI 层 功能 应用层 网络进程到应用程序。针对特定应用规定各层协议、时序、表示等,进行封装 。在端系统中用软件来实现,如HTTP等 表示层 数据表示形式,加密和解密,把机器相关的数据转换成独立于机器的数据。规定数据的格式化表示 ,数据格式的转换等 会话层 主机间通讯,管理应用程序之间的会话。规定通信时序 ;数据交换的定界、同步,创建检查点等 传输层 在网络的各个节点之间可靠地分发数据包。所有传
HTTP最强资料大全