Я вырос примерно в 20 минутах от Атлантик-Сити, поэтому я не новичок в казино. Когда я был моложе (но мне было больше 21 года! кашель), я научился считать карты - инструмент, используемый игроками в блэкджек, чтобы помочь им получить статистическое преимущество над казино и, таким образом, в идеальном мире выиграть деньги. в долгосрочной перспективе. Он привлекал меня в основном из-за привлекательности (буквально) обыграть казино в его собственной игре. В то время как любая другая игра в казино имеет отрицательное математическое ожидание в долгосрочной перспективе, счетчик карт действительно может превзойти казино (ниже я расскажу о подсчете карт более подробно).

В Нью-Джерси только что произошло кое-что, что возродило мой интерес к счету: казино, предлагающее блэкджек с живыми дилерами в Интернете. Нью-Джерси недавно легализовал онлайн-азартные игры для жителей Нью-Джерси. Обычно это были игровые автоматы, покер и «настольные игры», такие как блэкджек и рулетка, и все казино быстро предложили онлайн-версии игры вживую. Однако игры в блэкджек всегда были полностью компьютеризированы и никогда не моделировались с использованием реальных колод, которые нужно было периодически перетасовывать. Они больше походили на игровые автоматы в том смысле, что ставки были фиксированными и на них нельзя было повлиять.

Живые дилеры, однако, меняют все. Сначала я скептически относился к тому, как это сработает, но могу честно сказать, что они проделали довольно большую работу, предлагая именно то, что обещают: живую игру в блэкджек с настоящими дилерами, картами и столами, где каждый просто вводит свои ходы через компьютер. Это как если бы вы могли спуститься в Атлантик-Сити, поставить ноутбук на одно из мест за столом для игры в блэкджек, затем поехать домой и использовать FaceTime, чтобы посмотреть игру и указать, что нужно делать: Hit, Stand, Split или Double Down. И вы также можете общаться с дилером и другими игроками.

Ключевым моментом приведенного выше описания является то, что все действия происходят в казино (которое вы можете видеть и слышать), но казино больше не может вас видеть и слышать. Многие из реалий, затрудняющих подсчет на практике, исчезают, когда казино не знает, что вы делаете, кроме ставок или игры. Я могу играть в нижнем белье, слушая волынку. Я могу тратить время на Твиттер, пока раздают карты (мобильные телефоны - это большая проблема за столами для блэкджека). Фактически, я могу запустить компьютерную программу, которая считает карты и подсказывает мне, что делать во время игры «онлайн».

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

Даже ВЫ умеете считать карты!

Подсчет карт звучит просто. Основная посылка (в которую я могу включать или не включать математические доказательства, в зависимости от того, как долго это длится) заключается в том, что при высокой концентрации тузов, десяток, валетов, дам и королей игроку с большей вероятностью раздадут блэкджек (который приносит 3: 2, или 150% ставки) и те же самые карты повышают вероятность вылета дилера. Помните, дилер не может стоять, когда хочет; дилер должен бить, пока они не достигнут 17, поэтому большое количество ценных карт означает более высокий шанс перебора. И наоборот, при высокой концентрации двойок, тройок, четверок, пятерок и шестерок снижается вероятность блэкджека для игрока и повышается вероятность того, что крупье не разорится. . Остальные карты примерно одинаково полезны как для игрока, так и для дилера, и их просто игнорируют.

Самая популярная схема подсчета, High-Low, просто требует, чтобы игрок прибавлял одну, когда раздается младшая карта (2–6), и вычитал одну, когда раздается большая карта (AJQK10). Если мне сдают 10 и 6 и дилер показывает короля, счет будет -1: -1 для 10, +1 для 6 и -1 для короля. Просто повторите это для всех карт по мере их раздачи, и, поздравляю, вы считаете карты. Конечно, простое знание концентрации определенных карт не поможет, если мы не будем действовать в соответствии с информацией, поэтому ключевым оставшимся элементом является увеличение размера вашей ставки, когда счет велик и уменьшите его, когда счетчик низкий. Вот и все.

Нет, ты, наверное, не сможешь

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

Это также требует игры в идеальный блэкджек. Подсчет абсолютно бесполезен, если вы уже не играете в статистически идеальный блэкджек. На самом деле это проще, чем кажется, поскольку в сети есть десятки сайтов, на которых есть так называемые схемы «базовой стратегии», описывающие, какие действия следует предпринять в каждой возможной ситуации. Фактически, вы можете распечатать это и сесть с ним перед собой, напрямую ссылаясь на него во время игры. Казино все равно. Даже когда игрок играет «идеально», казино по-прежнему имеет статистическое преимущество.

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

К коду!

Но помните, что сейчас мы играем в среде, где отвлекающие факторы казино исчезают, и они не могут сказать, что мы делаем, пока мы играем. Подсчет стал намного проще. Я написал следующую программу примерно за 10 минут. Идея проста: позволить пользователю вводить карты по мере их раздачи (вы можете вводить более одной карты за раз, поэтому я могу ввести 06K для описанного ранее Десять-Шесть против Короля и нажать Enter, а не необходимость вводить каждую карту по одной.

CARD_VALUES = {
        '2': 1,
        '3': 1,
        '4': 1,
        '5': 1,
        '6': 1,
        '7': 0,
        '8': 0,
        '9': 0,
        '0': -1, # use '0' for 10 to keep everything a single character
        'J': -1,
        'Q': -1,
        'K': -1,
        'A': -1,
        '*': -1, # use '*' as an alias for 'A' to make using the number pad easier
        }

DECKS = 8

def main():
    count = 0
    cards = 0
    user_input = True
    decks_played = 0
    while user_input:
        user_input = raw_input('>> ')
        cards += len(user_input)
        for card in user_input:
            count += CARD_VALUES[card.upper()]
        decks_played = cards / 52.0
        true_count = count / (DECKS - decks_played)
        print('Count: {}'.format(count))
        print('True Count: {}'.format(true_count))
    print('Decks played: {}'.format(decks_played))

if __name__ == '__main__':
    main()

Вот и все. Еще несколько моментов. Вы могли заметить значение DECKS и переменные decks_played и true_count. Они нужны нам для определения «истинного счета». Сам по себе счет полезен, но счет 9 имеет совершенно другое значение после одной руки по сравнению с одной из последних рук в обуви. Чем меньше карт осталось, тем более результативен счет. «Истинный счет» - это просто текущий счет, деленный на количество оставшихся колод. В то время как в казино нужно было бы следить за размером горящей стопки и оценивать количество оставшихся колод, мы можем рассчитать его точно, так как каждая карта считается. Когда истинный счет поднимается выше 1.0, шансы меняются в пользу игрока. Это когда мы увеличиваем размер нашей ставки.

Установка

Последнее сообщение, 'Decks played: ...', было добавлено, чтобы помочь мне определить, как они вставляли вырезанную карту. Я мог сразу сказать, что они использовали башмак с 8 колодами (это означает, что для раздачи использовалось 8 колод карт), но сколько на самом деле было разыграно до того, как сокращенная карта - это очень важное число. В конце концов, если они играют с 8 колодами, но перед перетасовкой набирают только 2, это не дает много времени для того, чтобы счет стал благоприятным.

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

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

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

Результаты

Примерно через 4 часа игры на скромных лимитах я утроил свои деньги. Скорее всего, это заблуждение. Помните, что даже очень благоприятный подсчет дает игроку лишь один или два процента от ожидаемой доходности. Тем не менее, были забавные времена. Блэкджек с большими ставками. Разделить восьмерки четыре раза и удвоить каждую из них, когда выпадет куча троек (зная, что осталось много карт с 10 достоинствами). Проведя несколько быстрых вычислений и осознав, что одна из дополнительных ставок (которая почти всегда является ужасной идеей, как страхование и даже деньги), предложила положительный ожидаемый доход, основанный на концентрации карт, а затем наблюдая, как она немедленно окупается.

В заключение

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

Кроме того, выигрывать деньги - это весело.

Опубликовано 2 января 2018 г. Джеффом Кнуппом

Первоначально опубликовано на сайте jeffknupp.com 2 января 2018 г.