gpt4 book ai didi

java - 在 Repast J 中将数据层分配给网格

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:09 26 4
gpt4 key购买 nike

我正在尝试在 Repast Java Suite 中编写 ABM,并为此使用 3D 网格。关于网格的两个问题:1)我想为网格中的每个(x,y)组合分配一个函数值 - 例如对于每个 f(x,y)=x+y。因此,当智能体处于点(x,y)时,它会知道相应的z值是z=f(x,y)=x+y。如何将数据层分配给网格来做到这一点?

2)同样,对于同一个网格,代理应该能够知道是否访问了特定的补丁。每当代理访问该补丁时,它就会更新。

一般来说,我的问题是将附加方法、数据等分配给网格接口(interface)。由于这是我的模拟的一个基本问题,如果不解决它,我就无法继续前进。非常感谢答案。谢谢!

最佳答案

a) 听起来您可能想要 GridValueLayer在 2D 网格上,而不是 3D 网格上。如果您希望代理能够在 3 维空间中移动,则可以使用 3D 网格;如果它们在 2D 空间中移动,则可以使用 2D 网格,即使您希望它们读取每个位置的值。

GridValueLayer 可用于 n 维网格并保存每个单元格的值(由 n 个 int 值指定的位置)。对于您的示例,您可能希望 GridValueLayer 保存 2D 网格中每个单元格的值 x+y。

例如

int[] dimensions = new int[]{xMax, yMax};
AbstractGrid myBasicGrid = new AbstractGrid("exampleGrid", new SimpleGridAdder(), new WrapAroundBorders(), new SingleOccupancyCellAccessor(), dimensions);
GridValueLayer mySimpleGridValueLayer = new GridValueLayer("simpleAddLayer",true,dimensions);

for (int i = 0; i < xMax, i++)
{
for (int j = 0; j < yMax, j++)
{
int[] coord = new int[]{i,j};
mySimpleGridValueLayer.set(i+j, coord);
}
}

b) 这可以通过多种方式完成。我再次建议 GridValueLayer。在代理代码中,当您移动到网格中的某个点时,将该坐标的 GridValueLayer 设置为 1。

最后一点。您可以实现自己的网格。只要符合Repast的Grid接口(interface),也可以扩展AbstractGrid。例如,如果您扩展 AbstractGrid,然后使用 getSum(int... coords) 方法,该方法仅返回 coords 数组和 getVisited(int... coords) 的总和来解决您的问题。您还可以使其实现 ProjectionListener接口(interface),监听 OBJECT_MOVED 类型的 ProjectionEvent,然后将该位置的访问值设置为 true。

关于java - 在 Repast J 中将数据层分配给网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24487686/

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