Лучшая эвристическая функция для игры (AI Minimax)
Есть игра, которую я запрограммировал на Java. Игра проста (см. Рисунок ниже). Здесь 4 птицы и 1 личинка. Это игра для 2 игроков (AI против человека).
- Личинка может двигаться по диагонали вперед и по диагонали назад
- Птицы могут двигаться только по диагонали вперед
- Личинка победит, если сможет добраться до линии 1 (забор)
- Личинка также побеждает, если у птиц не осталось ходов
- Птицы не могут "съесть" личинку.
- Птицы выигрывают, если у личинки НЕТ движения (не может двигаться вообще)
Когда начинается игра, начинается личинка, затем может двигаться ОДНА птица (любая), затем личинка и т. Д.
Я реализовал MiniMax (альфа-бета-обрезка) и использую следующую функцию valu () (эвристическая функция).
Давайте дадим следующие цифры каждому квадрату на доске.
Поэтому наша оценочная функция будет
h(n) = значение положения личинки - значение положения птицы 1 - значение положения птицы 2 - значение положения птицы 3 - значение положения птицы 4
Личинка будет пытаться максимизировать эвристическую ценность, тогда как Птицы будут пытаться минимизировать ее.
Пример:
Однако это простая и наивная эвристика. Это не действует в умной манере. Я новичок в ИИ, и я хотел бы знать, что я могу сделать, чтобы УЛУЧШИТЬ эту эвристическую функцию?
Что было бы хорошим / информированным эвристиком?
3 ответа
Как насчет этого:
Максимум: личинка
Минимум: птицы
H(t)=max_distance(larva,line_8)+Σmin_distance(bird_n,larva)
или же
H(t)=Σmin_distance(bird_n,larva) - min_distance(larva,line_1)
max_distance (larva, line_8): чтобы отразить условие, что личинка находится ближе к линии 1.
Σmin_distance (bird_n, larva): чтобы отразить условие, что птицы находятся ближе к личинке (чтобы заблокировать ее).
Я полагаю, что есть еще много вещей, которые можно рассмотреть, например, птица, ближайшая к личинке, должна иметь высокий приоритет, чтобы быть выбранной для перемещения, но направление относительно функции выше имеет смысл, и многие детали можно легко улучшить.,
Существует 1 простой способ значительно улучшить вашу эвристику. В вашей текущей эвристике значения квадрата А1 на 8 меньше значения квадрата А8. Это заставляет Птиц склоняться к левой стороне игрового поля, так как движение влево всегда будет выше, чем движение вправо. Это точно. Все квадраты в строке 1 должны иметь одинаковое значение. Таким образом, назначьте все квадраты в ряду 1 a 1, в ряду 2 a 2 и т. Д. Таким образом, птицы и личинки не будут склонны двигаться влево, а вместо этого могут сосредоточиться на том, чтобы сделать хороший ход.
Вы можете принять во внимание тот факт, что птицы будут иметь позиционное преимущество перед личинкой, когда личинка находится по бокам доски, поэтому, если личинка имеет значение MAX, измените значения боковой плитки на доске, чтобы они были меньше.