当前位置: 首页 > 知识库问答 >
问题:

Repast-如何对查询中的代理集进行排序?

籍利
2023-03-14

以Jzombie模型为例,如果我想查询能量等于5的所有人类,并将其放入一个列表中,我将使用以下代码:

List<Human> human_list = ArrayList<Human>();
Query<Object> query = new PropertyEquals<Object>(context, "energy", 5);
for (Object o : query.query()) {
    Human h = (Human)o;
    human_list.add(h);
}

然而,人在人_列表中的顺序是随机的,并且在不同的模拟运行中是不同的。这会导致结果不一致的问题,如下所示:

run-1:
[human_2, human_4, human_3, human_5, human_1] 

run-2:
[human_1, human_3, human_4, human_2, human_1] 

run-3:
[human_5, human_1, human_3, human_5, human_2] 

实际上,我想用engergy==5查询人类,并按id对其进行排序,如下所示:

[human_1, human_2, human_3, human_4, human_5]

所以当我采取进一步的行动时,我总能得到一致的结果。

共有1个答案

花永昌
2023-03-14

不保证来自查询的对象顺序,但是假设模型在其他方面是完全确定的,对象将始终是相同的。因此,您将需要使用Collections.sort()对查询结果列表进行排序。对数组进行排序需要可以比较包含的对象以确定排序。对于包含数字或字符串等简单类型的数组,这只是在数组上调用Collections.sort()的问题。由于您想比较代理,因此需要让代理类实现类似:

公共类人工智能

然后提供compareTo()方法的实现,例如以下根据代理的String名称比较代理:

@Override public int compareTo(Human other){返回this.name.compareTo(other.name);}

只需通过以下方式对人员列表进行排序:

收藏。排序(人名列表)

如果指定Human-1、Human-2等人员代理名称,则可能会看到如下输出:

[Human-18,Human-3,Human-7,Human-86,Human-92]

每次您都会看到相同的顺序。由于在本例中我们正在比较字符串,因此顺序可能与我们预期的方式不同。字符串比较查看破折号后的第一位数字,因此“人类-18”在“人类-3”之前排序,因为“1”

@Override public int compareTo(Human other){返回this.id-other.id;}

这将打印人类秩序如下:

[Human-3,Human-7,Human-18,Human-86,Human-92]

 类似资料:
  • 我想实现这样的逻辑: 可以看出,查询需要在while循环中重复调用和更新,第二个查询由3个条件组成(这对于AndQuery()方法来说并不容易)。 这在Netlogo中很容易实现。在就餐中,最合适、最短的方式是什么? 更新-初始尝试 有三个问题需要解决: 1) 对特定代理集的查询必须考虑三个条件;AndQuery只包含两个条件。是否存在允许同时考虑两个以上条件的查询方法? 当前问题: 两个条件的初

  • 我需要从表中选择所有的vip并按兰德排序,然后添加按日期排序的其他数据。在第一个子查询中,一切正常,但在第二个子查询中,spa_date DESC不起作用。我知道UNION子查询中的ORDER BY子句会被忽略而没有限制(但ORDER BY rand()起作用),但我需要所有查询(1+2)中的限制,而不是子查询中的限制 问题: 我需要选择spa_vip=1的所有spa_id并按RAND()排序,然

  • 有人知道为什么repository方法没有按照预期工作吗?多谢了。

  • 我正在尝试从大到小的数字对我的记录进行排序,下面是我的示例记录: ...但是现在查询结果是这样的: 那么,对于我想要的东西,正确的查询是什么?

  • 问题内容: 假设我有两个类CLassA和CLassB。它们有一个共同的属性,例如每个类拥有的元素数量。 我如何从ClassA和CLassB的对象创建一个集合,并按该属性排序(降序升序无所谓)? 我收集了一个类型,但是当我尝试实现Comparable Interface时,我无法使用该方法(例如,获取返回元素nr的get)。 我有什么解决方案? 谢谢你的帮助! 问题答案: 实际上,如果要将它们放在同