gpt4 book ai didi

java - AnyLogic:提高网络模型的计算性能

转载 作者:行者123 更新时间:2023-12-01 20:07:02 24 4
gpt4 key购买 nike

我正在研究基于代理的流行病模型。这个想法是,个体代理根据他们在网络中观察到的情况(基于距离)做出决策。我在每个代理中都有多个功能,可以动态更新受感染联系人的计数、显示特定行为的联系人等。

下面的代码用于对代理网络内受感染的联系人进行计数。

int infectedConnections = 0;

if (getConnections() != null)
for (Agent a : this.getConnections())
{
Person p = (Person) a;

if (p.IsCurrentlyInfected())
infectedConnections++;
}

return infectedConnections ;

至少还会有 3 个这样的函数,用于统计代理网络中表达其他功能的其他代理的数量。现在,当我有 <500 个代理时,这似乎运行良好,但是当我将代理数量增加到大约 1,000 人左右时,模型变得非常慢。我希望模拟至少 5,000 个代理,此时模型甚至还没有初始化。

是否有一种计算效率更高的方法来跟踪 Anylogic 中针对较大群体的网络统计数据?

最佳答案

模型未初始化,因为默认内存量不足以容纳 5000 个代理。如果每个代理与所有其他代理连接(每个代理 4999 个连接),则需要 >1.300 Mb RAM,而默认模拟实验仅分配 512 Mb RAM。更改实验属性中的内存量。然后,该代码对于所有 5000 个代理大约需要 1 秒。换句话说,如果我每秒收集一次统计数据,最大执行速度约为每 1 实际秒 1 个模型秒。

如果使用Java Stream API重写代码,则可以增加它:return (int)getConnections().stream()
.filter( a -> (Person)a).IsCurrentlyInfected())
.count();

然后,1 模型秒在 0.5 实际秒(x2 增益)中执行。如果统计信息收集是并行执行的(使用多个线程,由 Java 代码创建),那么您可能会获得相应的增益,具体取决于 PC 的内核数量。不管怎样,这是计算复杂度的问题,所以你需要改变方法( see @pjs answer ),否则性能很差。

关于java - AnyLogic:提高网络模型的计算性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47284377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com