Присвоение слоев данных сетке в Repast J

Я пытаюсь написать ПРО в Repast Java Suite и использую для этого трехмерную сетку. Два вопроса о сетке: 1) Я хочу назначить функциональное значение для каждой (x,y) комбинации в сетке - например, для каждого f(x,y)=x+y. Таким образом, когда агент находится в точке (x,y), он будет знать, что соответствующее значение z равно z=f(x,y)=x+y. Как я могу назначить слой данных для сетки, чтобы сделать это?

2) Опять же для той же сетки, агенты должны иметь возможность узнать, посещен ли конкретный патч или нет. Он будет обновляться всякий раз, когда агент посещает этот патч.

В общем, моя проблема заключается в назначении дополнительных методов, данных и т. Д. Интерфейсу сетки. Поскольку это фундаментальный вопрос для моего моделирования, я не могу двигаться дальше, не решая его. Ответы действительно приветствуются.. Спасибо!

1 ответ

А) Звучит так, как будто вы хотите использовать GridValueLayer для 2D-сетки, а не для 3D-сетки. Вы используете трехмерную сетку, если хотите, чтобы агенты могли перемещаться в трехмерном пространстве, но двумерную сетку, если они перемещаются в двухмерном пространстве, даже если вы хотите, чтобы они затем считывали значение для каждого местоположения.

GridValueLayer может использоваться в n-мерной сетке и содержит значение для каждой ячейки (местоположение определяется n значениями int). Для вашего примера вы можете захотеть, чтобы GridValueLayer содержал значение x+y для каждой ячейки в 2D-сетке.

например

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);
    }
}

б) Это можно сделать несколькими способами. Я снова предлагаю GridValueLayer. В коде агента, в момент, когда вы делаете перемещение в точку в сетке, вы устанавливаете GridValueLayer для этой координаты равным 1.

Последнее замечание Вы можете реализовать свою собственную сетку. Пока это соответствует интерфейсу RepastGrid или вы можете расширить AbstractGrid. Например, если вы расширяете AbstractGrid, а затем имеете методы getSum(int...ordins), которые просто возвращают сумму массива ords и getVisited(int...ordins) для решения вашей проблемы. Вы также можете заставить его реализовать интерфейс ProjectionListener, прослушивая ProjectionEvent типа OBJECT_MOVED, а затем устанавливая значение для посещенного значения true для этого местоположения.

Другие вопросы по тегам