туториалanylogicтуториалjava
Как создать 2D дискретное пространство и выполнять случайный поиск пути
Как создать 2D дискретное пространство и выполнять случайный поиск пути
**Сложность:** ПРОДВИНУТЫЙ **Время:** 00:24 **Категория:** Агентное моделирование
---
Вопрос
Как создать 2D дискретное пространство и выполнять случайный поиск пути в AnyLogic?
---
Проблема
Вы хотите создать мир в виде 2D шахматной доски, но тип пространства AnyLogic "Discrete" не дает достаточного контроля над каждой ячейкой. Каждая ячейка должна быть полностью доступным объектом/агентом.
---
Решение
Создание 2D пространства
Cell[][] grid = new Cell[10][10];Добавьте клетки в пространство:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
Cell c = new Cell(i, j);
grid[i][j] = c;
}
}Класс Cell должен наследоваться от Agent:
class Cell extends Agent {
int row, col;
boolean visited;
}Случайный поиск пути
public List<Cell> randomPathFind(Cell start, Cell end) {
List<Cell> path = new ArrayList<>();
Cell current = start;
path.add(current);
while (!current.equals(end)) {
List<Cell> neighbors = new ArrayList<>();
if (current.row > 0) neighbors.add(getCell(current.row - 1, current.col));
if (current.row < 9) neighbors.add(getCell(current.row + 1, current.col));
if (current.col > 0) neighbors.add(getCell(current.row, current.col - 1));
if (current.col < 9) neighbors.add(getCell(current.row, current.col + 1));
List<Cell> unvisited = new ArrayList<>();
for (Cell n : neighbors) {
if (!n.visited) unvisited.add(n);
}
if (unvisited.isEmpty()) {
if (path.size() > 1) {
path.remove(path.size() - 1);
current = path.get(path.size() - 1);
} else {
return null;
}
} else {
Cell next = unvisited.get((int)(Math.random() * unvisited.size()));
next.visited = true;
path.add(next);
current = next;
}
}
return path;
}
Cell getCell(int row, int col) {
if (row >= 0 && row < 10 && col >= 0 && col < 10) {
return grid[row][col];
}
return null;
}Перемещение по пути
public void moveAlongPath(List<Cell> path) {
for (Cell target : path) {
moveTo(target);
delay(100);
}
}---
Пример модели
