Как я должен разработать хорошую функцию оценки для Connect 4?



У меня есть java-реализация игры "Connect 4" (с переменным числом столбцов и строк) .



В данной реализации используется (по выбору пользователя) алгоритм Mini-max Mini-max с альфа-бета обрезкой с максимальной глубиной поиска maxDepth



Теперь моя проблема заключается в разработке хорошей функции оценки состояния платы (это значение, возвращаемое в maxDepth).



Значение находится между -100 (худшее выбор, он соответствует проигрышной ситуации) и 100 (лучший выбор, он соответствует выигрышной ситуации) , где 0 предполагается "нарисовать" ситуацию .



На самом деле я реализовал две функции (я сообщаю о псевдокоде, потому что код очень длинный)



1)




  • Нет выигрыша / нет проигрыша


--> если таблица заполнена = = > draw (0)



--> если таблица не заполнена ==> неуверенная ситуация (50)




  • Победа


--> если мой выигрыш: 100



--> если победа противника: -100



2)



Of me:
- InARow[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow[1] = maximum number of pieces in a VERTICAL in a row
- InARow[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow[3] = maximum number of pieces in a DIAGONAL (descending) in a row
Of the opponent
- InARow2[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow2[1] = maximum number of pieces in a VERTICAL in a row
- InARow2[2] = maximum number of pieces in a DIAGONAL (ascending) in a row
- InARow2[3] = maximum number of pieces in a DIAGONAL (descending) in a row

value = (100* (InARow[0] + InARow[1] + InARow[2] + InARow[3]) )/16 - (100* (InARow2[0] + InARow2[1] + InARow2[2] + InARow2[3]) )/16


Мне нужно спроектировать третью (и, если возможно, лучшую) функцию. Есть предложения?



Заранее благодарю вас.

476   3  

3 ответов:

Просто подсчитайте количество возможных 4 в строках, которые каждый игрок все еще может сделать, и вычитайте их друг из друга.

Например, оба игрока начинают игру со счетом 7*4 (horizontal) + 4*7 (vertical) + 4*4 (diagonal up) + 4*4 (diagonal down). Если красный ставит один в левом нижнем углу, то желтый теряет счет 1 + 1 + 1 + 0 = 3. Но если красный ставит один в середине вместо этого, желтый теряет счет 4 + 1 + 1 + 1 = 7. Конечно, если какой-либо игрок выигрывает, то счет другого игрока равен -infinity, независимо от приведенной выше системы.

У вас есть базовые случаи сглажены: мой выигрыш = 100 очков, мой проигрыш = -100, ничья = 0. В "неуверенном" случае вас могут убить, это не отражает "доброты" доски. Так что теперь вам нужно заполнить пробелы. Случаи, которые вы хотите рассмотреть и присвоить значения:

  • у меня есть X в строке (если у меня есть 3 в строке, это лучше, чем только два в строке - ваша функция должна отдавать предпочтение добавлению к более длинным строкам вместо более коротких)
  • у моего оппонента есть X подряд (аналогично, чем больше он / она имеет в ряд, тем хуже для нас)
  • подсчитайте, сколько строк вы заполняете (размещение части и формирование 2 строк из 3 лучше, чем размещение части и формирование только одного ряда из 3)
  • подсчитайте, сколько строк вы блокируете (аналогично, если вы можете бросить кусок и заблокировать два ряда противников по 3, это лучше, чем блокировать один ряд по 2)

Вот две отдельные функции оценки для connect 4

  1. одна основная функция оценки, как предлагается в другом ответе, мы можем вычислить число возможных 4 в рядах, которые игрок все еще может сделать, и вычесть его из противника. Вы можете придать различный вес или важность блокам, у которых уже есть три плитки, по сравнению с блоками, у которых есть только 1 плитка.
  2. Еще одна более сильная функция оценки может быть построена с использованием концепции угроз. угроза-это квадрат это соединяет 4, когда плитка падает там противником. Вы можете просто вернуть разницу в количестве угроз от каждого игрока, но мы можем сделать гораздо лучше, фактически фильтруя бесполезные угрозы (например, угроза чуть выше угрозы противника или все угрозы выше угрозы обоих игроков) и даже назначая бонус для некоторых угроз (например, самая низкая угроза столбца или 2 последовательных угрозы от одного и того же игрока).

Веса могут быть настроены вручную или самостоятельно изучены для большего размера. проект.

Comments

    Ничего не найдено.