Как написать функцию анализа для алгоритма Min-Max?

Я пытаюсь закодировать ИИ для игры, чем-то похожей на крестики-нолики. Вы можете ознакомиться с его правилами здесь.

Алгоритм минимум-максимум и функция анализа, которые я использую, можно найти здесь

Как я пробовал до сих пор:

  1. Я построил несколько шаблонов, которые будут хороши для текущего игрока. (на Питоне)

e.g. my_pattern = " ".join(str(x) for x in [piece, None, piece, piece, None])

  1. Я сопоставляю такие шаблоны со всеми 6 возможными ориентациями на шестиугольной игровой доске для каждой фигуры (не для пробелов). Чтобы быть точным, сопоставление my_pattern с 6 различными массивами (каждый массив представляет одну из 6 различных ориентаций).

Теперь, что на самом деле должна вычислять эта функция анализа?

  1. Оценка всего состояния доски?
  2. Счет последнего хода, сделанного на доске?

Если кто-то может точно описать цель функции анализа, это было бы здорово.


person rpiman    schedule 28.11.2016    source источник


Ответы (1)


Функция анализа представляет текущее состояние платы. Он может включать/не включать последний ход, любой из предыдущих ходов или порядок ходов для достижения позиции на доске. Следует также учитывать, чья очередь играть.

Я имею в виду, что одна и та же доска может быть хорошей/плохой для белых/черных в зависимости от того, чей сейчас ход. (Называется ситуация zugzwang в шахматах).

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

ИЗМЕНИТЬ:

Пример функции анализа:

value = 10000*W(4) - 10000*W(3) + 200*W(2.1) + 200*W(1.2) + 100*W(2) + 100*W(1.1) + 2*W(1e) + 10*W(1m) + 30*W(1c) - (10000*B(4) - 10000*B(3) + 200*B(2.1) + 200*B(1.2) + 100*B(2) + 100*B(1.1) + 2*B(1e) + 10*B(1m) + 30*B(1c))

где:

W = white
B = black pieces
4 = made line of 4 pieces
3 = made line of 3 pieces
2 = made line of 2 pieces having possibility of getting extended to 4 from atleast one side
. = blank (ie, 1.2 = W.WW on the board)
1.1 = Piece|Blank|Piece and possibility of extending to 4 from atleast one side
e|m|c = edge|middle|center of board, and possibility of extending to 4 from either sides

Положительный результат этой функции анализа будет означать, что белые лучше, 0 указывает на сбалансированную доску, а отрицательное значение означает, что черные имеют выгодную позицию. Вы можете изменить веса в зависимости от результатов тестов, которые вы будете выполнять. Правда, найти все возможные комбинации — задача изнурительная, но игра такая :)

person vish4071    schedule 28.11.2016
comment
Итак, что должна вернуть функция анализа алгоритму Min-Max? На основании чего мне рассчитать балл? - person rpiman; 28.11.2016