gpt4 book ai didi

java - 使用 java 的 repast simphony 代理决策使用大量内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:34 25 4
gpt4 key购买 nike

我正在构建一个包含多个自治代理的模型。他们决定在他们的直接环境或“邻居”中选择哪个对象。他们这样做是为了检索对象,将它们添加到列表中,根据偏好对列表进行排序,然后每次迭代选择最上面的选项。这个决定决定了他们的行动。

不幸的是,一旦智能体的数量变得太多,程序就会大大变慢。

我使用比较方法(如下)来比较对象,该方法相对较短,但会占用大量内存。我想知道你们是否知道还有其他计算效率更高的方法吗?

class ObjectComparator implements Comparator <Tree> {

@Override
public int compare(Object object1, Object object2) {
return new CompareToBuilder()
.append(object1.getTYPE(), object2.getTYPE())
.append(object2.getDBH(), object1.getDBH())
.append(object1.getDistanceFrom(), object2.getDistanceFrom())
.append(object2.isIdeal(), tree1.isIdeal()).toComparison();
}
}

最佳答案

一些可能有用的要点(注意我没有使用repast-simphony 所以有些要点可能已经被这个框架实现了):

  1. 衡量 - 比较/排序是瓶颈吗?您说它使用了大量内存 - 这不会自动使程序运行速度变慢(是否可能存在 GC 开销问题?试验 VM args)。当然,在测量之前 - 预热 JVM(以便 JIT 可以 catch 代码的正常运行条件等)。了解 jvisualvm 的运行情况。

  2. 我不知道您要传递给 append 方法的对象是什么,但请考虑这样一种情况,您返回的速度可能比像现在这样比较对象更快。尝试使用您的特定领域模型的知识。

  3. 您说过代理“检索对象,将它们添加到列表中”并排序。也许存储已经排序的邻居列表是有益的,如果某些事情可能会发生变化(这是一个猜测),列表中会有一点变化 - 所以它几乎完全排序了。使用可以非常快速地处理“几乎已排序的列表”列表的排序算法,并将结果与​​默认的 Java 排序算法进行比较。当然,这取决于您的邻居模型改变的频率。如果您的模型不会改变(我想 TYPE 不会改变),那么排序问题将不存在。

  4. 考虑使用纯 Java 代码来 CompareToBuilder - 如果您有数百万个对象,对象创建可能会产生很大的开销(如果它位于关键路径/瓶颈上)。

  5. 您使用并发吗?如果您以并行方式运行您的算法,它可能会加速。

许多其他优化取决于您的特定对象结构和关系。例如。您将 Tree 作为泛型中的类型 - 也许这棵树没有平衡,也许您可​​以使用 AVLHeap 或更改 LinkedListArrayList 等。实验和测量。

希望对您有所帮助。

关于java - 使用 java 的 repast simphony 代理决策使用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31464839/

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