A * с осознанием врага

1

В настоящее время я занимаюсь программированием на языке Java и пытаюсь попробовать ИИ. В этом случае моему ИИ дают 2 секунды, чтобы ответить на новое состояние игры. Если эти две секунды превышены без получения ответа, мой ИИ потеряет. Игра состоит из сетки с целями и противниками, каждый из которых является независимым ИИ, созданным игрой. Я применил стандарт A *, чтобы найти ближайшую доступную цель.

Я бы хотел, чтобы мой алгоритм A * увеличил стоимость квадратов рядом с врагом, который потенциально может оказаться опасным, тем самым избегая опасных путей. Я рассматриваю двумерный массив, содержащий предполагаемую потерю здоровья для каждого квадрата, ограниченную вычислением в пределах ~ 2 квадратов каждого врага (~ 5x5). Каждый оборот, для каждого врага, этот массив имел бы квадрат 5x5, равный 0, и пересчитывал.

Предполагая, что я пишу код, который только делает то, что ему нужно, и движется дальше... Будет ли двумерный массив элементов 20х20 и 100х100 значительно влиять на время выполнения? Является ли двумерный массив оцениваемой угрозы на квадрат хорошим методом расчета стоимости в алгоритме A *, чтобы избежать врагов?

ОБНОВЛЕНИЕ: У меня это работает абсолютно отлично. Функция стоимости, которую я использовал:

For each enemy
    Calculate manhattan distance
    If 0 or 1, cost += absolute(enemy health - health) / 5
    Else if 2, cost += absolute(enemy heath - health) / 10
    Else cost += 0

Используя его, я видел несколько действительно впечатляющих путей и движений; бот часто принимал рассчитанные риски, когда не было других ходов, чтобы добраться до цели, но в основном избегали врагов в противном случае. Я был очень впечатлен тем, как незначительная стоимость исполнения заключалась в добавлении эвристики. Это не идеальное решение для игры, но оно показало мне, насколько надежным может быть A *.

A * обычно используется для поиска пути, но я собираюсь изменить его с целью просмотра состояния игры. Я уверен, что превращает его в минимаксный алгоритм.

Теги:
arrays
algorithm
artificial-intelligence

1 ответ

2
Лучший ответ

Если вы только вычисляете содержимое своего массива один раз, а вычисление для каждой ячейки - это что-то простое, например, проверка нескольких соседних ячеек для врагов, тогда массив 100x100 не работает вообще по отношению к вашим временным ограничениям.

Учитывая информацию в вашем посте, это звучит для меня как хорошая идея.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню