Как я должен разработать хорошую функцию оценки для 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
Мне нужно спроектировать третью (и, если возможно, лучшую) функцию. Есть предложения?
Заранее благодарю вас.
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
- одна основная функция оценки, как предлагается в другом ответе, мы можем вычислить число возможных 4 в рядах, которые игрок все еще может сделать, и вычесть его из противника. Вы можете придать различный вес или важность блокам, у которых уже есть три плитки, по сравнению с блоками, у которых есть только 1 плитка.
Еще одна более сильная функция оценки может быть построена с использованием концепции угроз. угроза-это квадрат это соединяет 4, когда плитка падает там противником. Вы можете просто вернуть разницу в количестве угроз от каждого игрока, но мы можем сделать гораздо лучше, фактически фильтруя бесполезные угрозы (например, угроза чуть выше угрозы противника или все угрозы выше угрозы обоих игроков) и даже назначая бонус для некоторых угроз (например, самая низкая угроза столбца или 2 последовательных угрозы от одного и того же игрока).Веса могут быть настроены вручную или самостоятельно изучены для большего размера. проект.
Comments