Используя MATLAB, я смоделировал 100 000 игр Mancala, чтобы посмотреть, что произойдет. Вот результаты:

Введение:

Поскольку Mancala является одной из старейших игр в мире, имело смысл выбрать эту игру в качестве моего следующего проекта настольной игры MATLAB. Манкала - это игра с нулевой суммой, означающая, что выигрыш одного человека напрямую ведет к проигрышу другого. Это упрощает одновременное моделирование сотен тысяч игр.

Правила Манкалы:

Это очень простая игра. У каждого игрока есть 6 ям и магазин, всего на доске 12 ям и 2 магазина. В каждой яме в начале по 4 семени. Цель состоит в том, чтобы получить как можно больше семян в вашем магазине. На каждом ходу один игрок выбирает одну из своих 6 ям и достает все семена. Двигаясь против часовой стрелки, этот игрок бросает одно семя из руки в следующую яму или склад, пока в его руке не закончатся семена.

Также следует отметить некоторые особые правила:

  • Если ваше последнее семя заканчивается в вашем магазине, вы можете пойти снова.
  • Если ваше последнее семя оканчивается в совершенно пустой яме на вашей стороне, вы можете собрать все семена прямо через доску.

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

Кодирование манкалы:

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

while gameover == 0 % while nobody has won
while p1_turn == 0 % while still player 1 turn
if sum(layout(1:6)) ~= 0 % while player 1 still has seeds in pits
moves = moves + 1; % plus 1 for total moves
while good_pick1 == 0 % loop to find a pit with seeds
p1 = randi(6); % picks random pit
amount = layout(p1); % finds amount of seeds in that pit
if amount > 0 % if pit has seeds
break % breaks out of loop (found a good pit)
end
end

В конце каждой игры интересующие вас данные документируются и обрабатываются до тех пор, пока не будут завершены все 100 000 симуляций.

move_data(repeats) = moves; % adds moves to move dataset
p1_data(repeats) = mean(p1_moves); % adds average move to player 1 move dataset
p2_data(repeats) = mean(p2_moves) - 7; % adds average move to player 1 move dataset
score1_data(repeats) = layout(7); % adds player 1 score to player 1 score dataset
score2_data(repeats) = layout(14); % adds player 2 score to player 2 score dataset

Результаты:

Как выглядит стандартная игра Манкала? Сколько в среднем ходов нужно, чтобы пройти игру? Какая самая короткая игра? На все эти вопросы можно ответить с помощью 100000 симуляций манкалы.

Средняя игра Манкала (4 семени на яму) требует 41,42 хода для завершения игры. Самая длинная найденная партия составила 77 ходов, а самая короткая - 11 ходов (см. Гистограмму ниже).

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

А как насчет вероятности выигрыша для каждого игрока? Влияет ли игра первым на ваши шансы на победу? Итак, с 4 семенами в каждой ячейке в начале, у игрока, идущего первым, шанс выигрыша составляет 48,624%, в то время как у другого игрока есть шанс выигрыша 44,604% (с оставшимися шансами 6,772% на ничью).

Есть ли лучшая первая яма, которую следует выбрать в начале игры, чтобы увеличить свои шансы на победу? Если вы - игрок, который делает первый ход, выбор ямы №6 (крайняя правая яма) принесет вам в среднем 24,9033 семян за игру, что в среднем на 0,3 семян больше, чем в следующей по высоте яме. То же самое и со вторым игроком. Яма №6 принесет им в среднем 23,9039 семян за игру.

Доводя манкалу до предела:

Как выглядит игра со 100 семенами в каждой яме в начале? А как насчет 1000? Как это влияет на вероятность победы и ничьей?

Я провел 100 000 симуляций для каждого начального количества семян, показанного ниже (1–10, 15, 20, 50 и 100), чтобы увидеть, как меняются проценты выигрышей.

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

Здесь интересно отметить вероятности выигрыша. Кажется, что разница между игроком, сделавшим первый ход, и игроком, сделавшим второй ход, становится меньше, а это означает, что по мере добавления большего количества семян игра становится более справедливой. При 10 семенах на косточку разница снова увеличивается и начинается заново. Это означает, что если вы хотите добиться максимально возможного совпадения, 9 семян на ямку - идеальная установка (также 100 семян имеют небольшую разницу, но эта игра займет вечность).

Я также хотел посмотреть, как количество начальных семян влияет на общее среднее количество ходов для завершения игры.

Среднее количество ходов за игру увеличивается не линейно, а почти логарифмически. Я расширил его до 1000 и 5000 семян и нашел наиболее подходящее уравнение со значением R² 0,9715 (показано ниже).

Уравнение наилучшего соответствия можно использовать, чтобы приблизительно определить, сколько ходов займет игра для любого начального начального количества, если вы начинаете с 3 или более.

Вывод:

У Манкалы есть несколько интересных закономерностей, которые возникают, когда вы настраиваете стартовую настройку разными способами. Став первым, вы можете значительно увеличить ваши шансы на победу, а если вы хотите снизить вероятность того, что игра закончится ничьей, добавьте больше семян. Интересно смотреть на пределы настольных игр и на то, как игра реагирует в эти моменты.

Если вас интересует этот тип контента, я рекомендую прочитать некоторые из моих других статей о моделировании настольных игр с помощью MATLAB: