Так как у меня еще не было точности, давайте начнем с (разумного) предположения, что если вы можете играть, то вы должны. Приятно, чтобы игра не зависала.
Из-за правил у вас есть 0, 1 или 2 хода. Вы можете выбрать, только когда вы находитесь в 2
решении ходов.
1. Дерево решений
Как и во многих играх, самый простой способ увидеть, что происходит, - это проследить дерево всех возможных ходов, а затем исследовать это дерево, чтобы принять решение. Поскольку решение не принимается, дерево не должно быть таким большим.
Например, предположим, что мы находимся в состоянии:
wall = [3, ..., 8]
b1 = [2,9]
b2 = [1,11]
b3 = [10,12]
И вот b1
превращается в игру.
b1[2] -> b2[1] -> b3[] -> b1[9] (1st) -> b3[10] -> b2[11] (2nd) -> b3[12]
or
b1[9] -> b2[] -> b3[10] -> b1[2] (1st) -> b2[1] -> b3[] -> b2[11] (2nd) -> b3[12]
or
b2[11] -> b3[12] (2nd) -> b2[1]
Итак, в основном у нас есть 2 варианта в части дерева.
b1
может выбирать между 2
и 9
b2
может выбирать между 1
и 11
Мы можем суммировать последствия выбора, перечислив позиции, которые получат игроки, очевидно, в беспристрастной партии, которую каждый игрок выбирает, чтобы получить лучшую позицию.
Итак, давайте представим сокращенную версию дерева (где мы показываем только варианты):
b1[2] -> [1,2,3]
b1[9] -> b2[1] -> [1,2,3]
b1[9] -> b2[11] -> [1,3,2]
Теперь мы можем применить уменьшенное представление, основанное на данном игроке.
Для b1
дерево выглядит так:
[2,9] -> [1,1] (both are equivalent)
Для b2
это выглядит так:
[1,11] -> [2,3]
Для b3
выбора не бывает ...
2. Возможные результаты
Конечно, игроки не получают это дерево, так как они не знают, что имеют другие, но это дает вам, как наблюдателю, возможность изучить различные возможные результаты на разных этапах партии. .
Обратите внимание, например, что в этом поддереве у нас есть 2 варианта, второй из которых зависит от первого. Если у нас Pi(x in {x,y})
выражается вероятность того, что игрок i
выберет x
при выборе между x
и y
, то мы можем выразить вероятности каждого исхода.
P([1,2,3]) = P1(2 in {2,9}) + P1(9 in {2,9}) * P2(1 in {1,11})
P([1,3,2]) = P1(9 in {2,9}) * P2(11 in {1,11})
3. Стратегия игроков
Из того, что мы видим здесь, видно, что лучшая стратегия состоит в том, чтобы попытаться заблокировать как можно больше фигур: т.е. при выборе между 1
и 11
вам лучше сыграть 1
, потому что это не блокировать никого, пока 11
блокирует 1 шт. Однако это работает только тогда, когда у вас до 2 штук.
Нам нужно что-то более общее для случая, когда у вас есть список частей.
Например, если вы держите {3, 9, 11}
, а стена - [4, ..., 8]
, что вы должны поставить? Очевидно, 3
блокирует меньше фигур, чем 9
, но 9
блокирует одну из ваших частей!
Лично я бы пошел на 9
в этом случае, потому что мне все равно нужно будет поместить 11
и 11
блокировать меньше кусков, чем 3
(с 3
у меня есть шанс закончить первым , с 11
это менее вероятно ...).
Я думаю, что могу дать оценку каждой фигуре в моей руке, в зависимости от количества фигур, которые они блокируют:
3 -> 2
9 -> 1
11 -> 1
В то время как 9
приписывается только 1
? Потому что он блокирует только 10
, так как я держу 11
:)
Тогда я сначала сыграю фигуру с наименьшим количеством очков (если у меня есть выбор).