Как лучше тасовать карты?

Использование python, чтобы найти лучший и практичный способ тасовать (магические) карты

Каждую пятницу вечером тысячи друзей-ботаников проводят вечер, играя в Magic the Gathering в местном игровом магазине. По крайней мере, так было до пандемии. Раньше я был одним из них, но я никогда не был хорош и всегда винил в этом свою неспособность правильно тасовать карты. В последнее время я возвращаюсь к игре и нахожусь в тех же старых затруднениях и привычках обвинять. Но теперь я могу использовать компьютерное моделирование, чтобы раз и навсегда забыть об этом предлоге и найти лучший практический способ тасовать карты!

когда перемешивание считается практичным?

Прежде чем мы сможем приступить к кодированию и моделированию методов перетасовки, нам нужно установить некоторые границы и определить, что это означает на практике. Причудливые идеальные алгоритмы перетасовки не помогут, поскольку мои руки всего лишь человеческие. Таким образом, каждый метод перемешивания должен быть воспроизведен вручную. И что вообще означает перемешено? есть ли способ количественно оценить перетасовку? Есть два очевидных показателя для количественной оценки того, сколько колод было перетасовано:
1. Среднее расстояние между позициями карт до и после тасования.
2. Среднее расстояние между ранее соседними картами.

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

хорошо помните, когда я сказал, что не могу воспроизвести причудливые алгоритмы тасования руками? Что мы можем сделать, так это использовать его в качестве ориентира, и оказывается, что встроенная функция тасования достигает среднего расстояния в 20 карт! Это ставит перед нами четкую цель: достичь среднего расстояния между картами, равного 20, с наименьшим количеством перетасовок.

Эксперименты.

Первый метод перетасовки, который мы собираемся рассмотреть, возможно, самый простой: тасовка сверху. перебрасывая пакеты произвольного размера из колоды в правой руке в левую руку, складывая их друг на друга, мы создаем обратный порядок кластеров карт. Не совсем то, что мы ищем, и поэтому для достижения желаемого ACD, равного 20, требуется более 50 итераций (примерно 5 минут перетасовки).

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

Глядя на график, кажется, что мы нашли святой Грааль перетасовки, даже ненадолго превзойдя 20 ACD. Тем не менее, этот тип перетасовки имеет побочный эффект с точки зрения практичности. Хотя перетасовывать обычные магические карты легко, это имеет некоторые недостатки. Волшебные карты могут быть очень и очень дорогими, и их часто хранят и разыгрывают в рукавах. Это несколько усложняет перетасовку, так как карты будут более громоздкими, а сгибание карт для перетасовки, скорее всего, повредит их.

Наш следующий эксперимент — тот, который я всегда проводил, — перетасовка с перекрытием (более известная как перетасовка Фаро, перекрывается только эта). Снова делаем 2 стопки, накладываем друг на друга по вертикали и сталкиваем вместе. повторите это пару раз, и ваши карты якобы перетасованы. Моделирование этой техники оказалось недостатком. это не тасует карты так хорошо. достигая перемешивания примерно за 27 повторений.

Немного подкорректировав эту технику, мы получим лучшие результаты. Когда мы чередуем стопки вместо того, чтобы постоянно перекрывать нижнюю стопку верхней стопкой, мы получаем немного лучший эффект! Мы достигаем 20 примерно за 17 перетасовок.

Однако это объясняет мой опыт с ужасно перетасованной колодой, поскольку я даже близко не приблизился к 17 повторениям, не говоря уже о 27! Последняя техника, которую я хочу попробовать, — та, которую мне все советовали, но она требует больших усилий — перетасовка карт в восемь стопок. Мы собираемся смоделировать перетасовку стопки. при предварительном тасовании стопки мы сдаем карты отдельными стопками, а затем кладем их друг на друга. Этот метод перетасовки требует много времени на перетасовку, но достаточно одной перетасовки, поэтому график ACD не будет иметь никакого смысла. Вместо графика я сделал гистограмму, показывающую количество стопок и возникающую в результате перетасовку, результаты оказались неожиданными.

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

Эта перетасовка является детерминированной, ее можно выучить и запомнить. однако этот метод можно использовать в качестве основы для эффективного разбиения кластеров карт, а в сочетании с быстрым тасованием сверху, чтобы нарушить шаблоны, и перекрытием фаро, чтобы изменить порядок близких карт, мы обнаружили, что идеальное тасование легко выполняется менее чем за минуту. со средним ACD 23,5 за 10000 перетасовок:

Сложите тасовку в две стопки, перетасуйте сверху и переверните Фаро, чтобы скрепить сделку.