flesh1k, я в свое время давал интервью другому сайту (https://www.pokeroff.ru/intervyu-s-razrabotchikom-20-pokernyh-programm-post-2909018). В конце есть о моем отношении к ботам и борьбе с ними.
Также я отвечал на вопросы о политике Пати. (https://www.pokeroff.ru/otmena-hud-eto-otmena-umnoj-igry-postoyannye-chitateli-pokeroff-kritikuyut-nov-post-2909448) Там тоже есть о ботах.
О борьбе с ботами обсуждение с моим участием. (https://www.pokeroff.ru/kak-poker-rumam-nauchitsya-effektivno-borotsya-s-botami-mnenie-it-ekspertov-post-2908279).
Хочу поблагодарить администрацию нашего форума GipsyTeam за разрешение дать все эти ссылки. Также есть ссылки внутри этих статей.
Конечно, сейчас я бы написал немного по-другому.
Сразу скажу, что мы не писали, не пишем и не будем писать ботов.
Напишу теперь о том, какие задачи надо решить программистам при создании бота.
Давайте сперва рассмотрим вопрос с точки зрения разработчика бота. Под ботом будем понимать программу, способную самостоятельно или с помощью человека играть в клиенте рума. Желательно играть в плюс (иначе зачем все это?). Будем считать, что играет, все-таки, человек, а бот только ему подсказывает. Если же бот играет самостоятельно, то об этом поговорим в самом конце.
Для создания бота нужно решить 3 отдельных и сложных задачи:
1) Нужно написать математический алгоритм игры, который будет играть достаточно сильно, чтобы бить лимит, на котором он будет играть.
Здесь также нужно иметь какое-то приложение, которое вне игры в руме сможет проверить силу игры бота, например, приложение, позволяющее игроку сыграть с ботом (ботами) самому.
2) Нужно уметь считывать действия о ходе игры с клиента рума и передавать это модулю из 1).
3) Нужно все это скрыть от клиента рума.
Сразу сообщу (игроки этого не понимают, как правило), что эти 3 задачи требуют совершенно разных программистских знаний и умений. Сочетать их все одному человеку, практически, не реально. Таким образом, нужна команда программистов, причем в ней должны быть люди, способные решить все 3 перечисленные задачи. Еще раз подчеркну, что программисты по всем 3-м направлениям должны быть очень высокого класса. Теперь рассмотрим эти 3 задачи более подробно.
1) Создание алгоритма игры
Как правило, сами программисты редко бывают сильными игроками, поэтому обязательно участие сильных игроков, хотя бы на стадии проверки. Обычно сильные игровые алгоритмы создаются с использованием нейронных сетей. Что такое сеть, можно легко найти в Гугле.
Для покерного бота здесь нужно будет решить следующие задачи:
1.1) Нужно разработать обязательно с участием игроков саму нейронную сеть. То есть, нужно выписать состояния, важные для принятия решений. Например, на префлопе, нужно задать боту спектры открытия, 3 бета и т.д. по позициям. Если эти спектры зависят также от размеров стеков, то надо задать и стеки.
При игре на флопе надо задать, имеет ли бот инициативу, находится ли он в позиции, структуру борда и т.д. Это большой труд, который требует не общих слов и рассуждений, а должны быть сформированы начальные состояния нейронной сети.
1.2) Эту сеть нужно обучить. Что это такое? Опять отсылаю всех к Гуглу. Если говорить коротко, то мы должны по большому набору состояний дать боту готовые рекомендации по игре. Для этого лучше всего взять большую (а лучше огромную) выборку рук (майнинг), а затем отобрать из этой выборки плюсовых игроков, уверенно бьющих лимит. Просто по винрейту. Затем надо по решениям этих игроков "обучить" бота.
1.3) Некоторые ситуации можно сразу обрабатывать без сети по различным эвристикам. Например, если нам дали (АК)(АТ), то понятно, что мы на префлопе можем выставляться. Спектр таких сильных рук и действия с этими руками на префлопе можно задать непосредственно безо всякой сети. Однако, действия бота будут в этом случае предсказуемы, поэтому нужно балансирование спектра. Суть, я думаю, понятна. Какие-то ситуации можно запрограммировать напрямую без использования нейронной сети.
1.4) После построения алгоритма надо обязательно провести проверку. Для этого можно и нужно использовать какую-то игру, в которой игрок мог бы сыграть с ботом. Поскольку, как правило, нас интересует игра за 6-макс столами, то можно самому сыграть против 5-ти ботов. У нас есть программа PokerGame, которая легко может быть расширена (и уже расширена, но не выложена на сайт) до омахи.
Также эта программа может быть использована для сравнения силы разных ботов. Например, сделали сперва простого бота Х, затем доработали его до У. Сажаем за стол 3-х ботов Х и 3-х ботов У. Запускаем игру и смотрим результат. Также пишется файл истории, поэтому можно и его анализировать, ища лики у нашего бота.
1.5) Разумеется, солвер является частью алгоритма, причем, он должен работать в реальном времени.
Смотрите статью на Хабре.Подводя итог созданию алгоритма, видим, что это долгая и сложная работа.
2) Считывание действий с клиента рума в ходе игры
Здесь нет другого метода, кроме распознавания с окна клиента рума.
Это тоже большая и сложная работа. Мы такой техникой "читаем" карты для программы NiceHandOmaha для всех румов, кроме 888 и PokerStars (для режима Аврора тоже читаем). Но, мы только читаем карты. А для бота нужно много больше. И действия игроков, и стеки, и карты и т.д.
Надо понимать, что распознавание зависит от размера стола, разрешения экрана, рисунка колоды карт и т.д. Особо много тут писать для игроков нечего. Просто игроки должны понимать, что это все достаточно сложно и трудоемко делать.
3) Скрытие бота от клиента рума.
Это очень важная задача, так как если бота обнаружат, то и своих лишишься. Здесь важно понимать, что ни в коем случае нельзя даже думать о создании бота для грандов индустрии: PokerStars, PartyPoker, 888 Poker. И здесь, как бы программист ни старался, 100% гарантии быть не может в принципе. Хотя, простые вещи обязательно надо предусмотреть. Например, маскировка бота под системный процесс, допустим, под драйвер принтера. Формирование подсказки эзоповым языком.
Например, бот будет изображать из себя программу статистики (если таковая разрешена в руме). При фолде можно чуть увеличить пробел между ником игрока и 1-м числом. Этот "язык" должен изменяться от сессии к сессии или даже чаще.
Речь шла о боте типа "кентавр", в котором игрок сидит в клиенте и совершает действия сам по подсказкам. В любом случае, начинать надо с такого варианта. И только убедившись, что бот играет в плюс, можно начинать думать об автоматической игре самого бота. Тут сразу возникает новая задача по взаимодействию с клиентом и задача сокрытия усложняется многократно.
Я думаю, что вышеизложенное поможет игрокам правильно оценить сложность задачи и предостережет их от шапкозакидательства в том смысле, что можно попросит знакомого программиста, быстренько ему все объяснить и за пару месяцев он все сделает. Это будет напрасно потраченное время обоих.
Разумеется, этической задачей является создание сильного компьютерного игрока для обучения игре.
Нужно создать несколько ботов, играющих разными стилями и разной силы.
Игрок мог бы играть вне рума в игру с ботами в 3-х режимах:
1) обучение, где видны карты 1-го бота и бот "комментирует" свои действия. Бот "проводит стрим".
Понятно, что до Алексея дотянуться невозможно, но для обучения начинающих, наверно, сделать реально.
2) Игра с подсказками. Игрок играет сам с ботами разной силы, в трудных ситуациях спрашивает совета.
3) Игра с ботами разной силы и стилей самостоятельно с записью файлов историй и с последующим разбором игры, где программа указывает на ошибки и дает пояснения.
Здесь можно провести аналогию с шахматами. Компьютер на голову сильнее человека, но человек может учиться у компьютера.
бет/кол и (самый стандартный) чек бек. у нас просто супер рука для чек бека по всем канонам
бет/3бет с нашей вроде вообще не тему. понятно, что данте репит хер пойми что, но и у нас тоже полторы велью комбы, но главное не это, а то, что у нас за глаза хватит эквити, чтобы нажать колл.
на колл ривера похуй - посчитал, что бьёт блефы, посчитал что там из достаточно, нажал.
Багровый__Грехометр, а почему ты данте аутистом считаешь? он вроде очень неплохо плюсует на 1к+