Исходные данные
Задача - научить телеграмм-бота правильно расставлять приоритеты и принимать верные решения.

Для этого использована игра Баше, модифицированная под использование в качестве игрового инвентаря, игральной кости. Игра хоть и кажется простой, но она достаточно нетривиальна.

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

Как же заставить бота "учиться"?
Оказывается, есть простое и элегантное решение — алгоритм "спичечных коробков", с которым бот "учится" играть у своего оппонента с помощью системы подкрепления.

Изображение

Правила

Игра одновременно простая и нетривиальная.

В ней отрабатываются навыки не только в простейшей арифметике, а также стратегическое мышление и навыки принятия решений.

Правила игры Баше предельно просты и у нее простая механика:

Игроков: 2 игрока

Инвентарь: правильная игральная кость (сумма противоположных граней равна 7)

Ход игры:

До начала игры соперники определяют целевую сумму, например 25.

Игра начинается с того, что первый игрок бросает кость.

Число, выпавшее на верхней грани запоминают.

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

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

Победитель: игрок, который достиг целевой суммы или заставил противника превысить её.


Анализ игры
Как бот учится?
В описанной игре ни у одного игрока нет системного преимущества — при оптимальной игре обоих участников шансы близки к равным. Разберём почему.

Ключевые факторы равновесия

1. Полная симметрия правил
Соперники подчиняются одним и тем же ограничениям на каждом ходу.
Благодаря использованию правильной игральной кости:
- не получится своим ходом повторить предыдущий ход;
- не удастся получить сумму текущего хода с предыдущим, равную 7;
Допустимые ходы зависят только от предыдущего хода, а не от того, кто ходит.
В игре нет, ни «специальных ходов», ни «скрытых бонусов» для одной из сторон.
2. Равномерность вероятностей
- у кубика 6 граней, каждое число от 1 до 6 имеет одинаковую вероятность;
- после любого предыдущего броска всегда остаётся 4 допустимых варианта (из  6) и они равновероятны;
- бросая кость, первый игрок не может «выбрать» более выгодное число — всё определяется случайностью.
3. Отсутствие преимущества «первого хода»
Первый игрок начинает, но его начальный бросок не даёт стратегического перевеса:
- он не может достичь целевой суммы сразу, если она больше 6;
- второй игрок отвечает на ту же логику ограничений;
- оба игрока проходят через одинаковые этапы приближения к цели;
Игра идёт до достижения/превышения цели, а не до фиксированного числа ходов, поэтому очерёдность не создаёт асимметрии, а уравнивает шансы независимо от очерёдности.
4. Баланс блокирующих комбинаций
Для любого текущего хода исключена сумма с предыдущим, равная 7:
- симметрия: если для 2 запрещено 5, то и для 5 запрещено 2.
- равномерность: ограничивает обоих игроков на каждом шаге.

Когда может возникнуть перекос?
1. Целевая сумма очень мала — игрок может проиграть за 1-2 хода только потому, что не успеет ответить.
2. Ошибки игрока — реальный перекос возникает из-за неоптимальных ходов (например, когда игрок невольно подводит противника к победе). Но это не преимущество, а человеческий фактор.

Вывод:
Игра симметрична и не даёт системного преимущества ни первому, ни второму игроку.
Шансы на победу определяются качеством принимаемых решений, а не очерёдностью хода.

Почему иногда может казаться, что у вас есть преимущество?
1. Эффект малой выборки: например, серия из 6 партий — это слишком мало для выводов. В длинной серии (100+ партий) при равной игре, счёт выравнивается до 50 / 50;
2. Психологическая селективность: победы запоминаются ярче, а поражения забываются. Вы фокусируетесь на своих успехах, а не на общей статистике;
3. Иллюзия контроля: когда вы «точно знаете», что нужно бросить 5 для победы, это создаёт ощущение мастерства, хотя исход броска всё равно случаен.
Как было сказано выше: игра Баше с костью хоть и простая, но достаточно нетривиальная.

Человек — существо обучаемое и, рано или поздно, он научится анализировать позиции предсказывать ход бота.
Если бот не будет развиваться, человек потеряет интерес к игре.

Поэтому встала задача - как заставить бота учиться у своего соперника?

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

Как же заставить бота "учиться"?
Оказывается, есть простое и элегантное решение — алгоритм "спичечных коробков", с которым бот "учится" играть у своего оппонента с помощью системы подкрепления.

Мы знаем, что процесс игры основан на знании целевого числа и последовательных позициях (позиция-цель), а каждая из позиций в этой игре имеет 4 хода.
Представьте, что позиции-цели с возможными ходами, написаны на спичечном коробке, в котором лежит 4 разноцветных бусинки, соответствующих каждому возможному ходу.
Своим ходом бот трясет коробок (позиция-цель), достает из него случайную бусинку, делает соответствующий ход, оставляя бусинку на коробке.
В конце игры:
- если бот выигрывает, то в каждый из сыгравших коробков добавляются несколько шариков того же цвета, что был на коробке. Это "поощряет" бота и повышает вероятность повторения выигрышных ходов в будущих играх;
- если бот проигрывает, все шарики возвращаются в коробки. Это "наказывает" бота, уменьшая вероятность повторения ходов, приводящих к проигрышу.

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

Бот стремится к реализации своего максимального вероятностного преимущества и самостоятельно находит оптимальную стратегию через опыт.

Этот алгоритм был использован в первой версии алгоритма игры в Го - АльФаГо!

Для справки:
Бот учится и развивается только в контексте одного пользователя (одного telegram_id), подстраиваясь и обучаясь под его тип игры.
С новым пользователем (новым telegram_id) бот начинает обучение с "чистого листа".

Теперь игра становится интересной, а бот не даст оппоненту расслабиться.