Гадалка шеннона алгоритм

Один запуск гадалки Шеннон может выдать ваше число быстрее, чем вы успеете моргнуть — проверь, угадает ли алгоритм тебя!

Гадалка Шеннона – это набор простых статистических приёмов, основанных на работе Клода Шеннона и его алгоритмах кодирования, которые позволяют предсказывать, какой ход выберёт человек в повторяющихся играх (например, «Камень‑ножницы‑бумага») или в других последовательных заданиях. Алгоритм был впервые описан в статьях о предсказании человеческой «непредсказуемости» и с тех пор нашёл применение в игровом ИИ, психологии и даже в экономических моделях.

Самое главное помнить, что

  • Алгоритм использует только историю прошлых действий игрока, не требуя никаких дополнительных сенсоров или «мозговых волн».
  • При достаточном количестве наблюдений (≈ 50‑100 ходов) он выстраивает распределения вероятностей, приближённые к реальному поведению противника.
  • Гадалка Шеннона — это не магия, а простая статистика, которую можно реализовать на любом языке программирования.

Почему в основе алгоритма лежит кодирование Шеннона‑Фано?

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

Для оценки надежности предсказания используется Chi‑square‑тест (χ²), где каждое значение d_j – это разница между наблюдаемой частотой и ожидаемой по модели. Сумма распределений χ² по всем степеням свободы (j) позволяет оценить, насколько сильно отклоняется реальное распределение от «случайного».

Алгоритм «Гадалка Шеннона» шаг за шагом

  1. Сбор данных. Храним последовательность ходов игрока: H = [h₁, h₂, …, h_n], где каждый h_i ∈ {К, Н, Б} (К — камень, Н — ножницы, Б — бумага).
  2. Подсчёт частот. Вычисляем количество появлений каждого символа:
    freq[К] = count(К), freq[Н] = count(Н), freq[Б] = count(Б)
  3. Сортировка по вероятностям. Формируем массив пар (символ, вероятность) и сортируем по убыванию вероятности.
  4. Разделение (Шеннона‑Фано). Делим отсортированный массив на две группы так, чтобы разница сумм вероятностей была минимальной. Получаем два кода: «0» — для первой группы, «1» — для второй.
  5. Оценка chi‑square. Для каждой группы считаем:
    χ²_j = Σ ( (obs_j - exp_j)² / exp_j )

    где obs_j – наблюдаемая частота, exp_j – ожидаемая (по модели случайного выбора).

  6. Принятие решения. Если χ²_total превышает критическое значение (обычно α = 0.05), считаем, что стратегия игрока не случайна и выбираем ход, противоположный наиболее вероятному.
  7. Обновление. После каждого нового хода алгоритм повторно пересчитывает частоты и заново формирует коды, что делает его адаптивным.

Пример реализации на Python

import random
from collections import Counter
from scipy.stats import chi2

def shannon_fano_predict(history):
 # 1. Частоты
 cnt = Counter(history)
 total = sum(cnt.values)
 probs = {k: v/total for k, v in cnt.items}

 # 2. Сортировка
 sorted_items = sorted(probs.items, key=lambda x: -x[1])

 # 3. Деление на две группы
 left, right = [], []
 sum_left, sum_right = 0, 0
 for sym, p in sorted_items:
 if sum_left <= sum_right:
 left.append(sym); sum_left += p
 else:
 right.append(sym); sum_right += p

 # 4. chi‑square
 chi2_val = 0
 for group, exp in [(left, sum_left), (right, sum_right)]:
 for s in group:
 obs = cnt[s]
 exp_cnt = exp * total
 chi2_val += (obs - exp_cnt)**2 / exp_cnt

 # 5. Пороговое значение (df = len(history)-1)
 p_val = 1 - chi2.cdf(chi2_val, df=len(history)-1)

 # 6. Выбор хода против наиболее вероятного
 if p_val < 0.05: # стратегия отличается от случайной
 most_prob = max(probs, key=probs.get)
 # правило «К beats Б», «Б beats Н», «Н beats К»
 win_move = {'К':'Н', 'Н':'Б', 'Б':'К'}[most_prob]
 else: # играем случайно
 win_move = random.choice(['К','Н','Б'])
 return win_move

Эта функция принимает историю ходов и возвращает рекомендацию, какой ход сделать в следующем раунде.

Плюсы и минусы алгоритма

Плюсы Минусы
  • Простота реализации – минимум кода.
  • Адаптивность: каждый ход пересчитывается.
  • Не требует обучения на больших датасетах.
  • Хорошо работает против людей, которые используют «запомненные» паттерны.
  • Неэффективен против истинно случайных стратегий.
  • Требует достаточного объёма данных (≈ 50‑100 ходов).
  • Зависит от выбранного уровня значимости (α).
  • Не учитывает внешние контексты (эмоции, усталость).

Практические применения

  • Онлайн‑боты для игр в «Камень‑ножницы‑бумага». Многие сервисы в Telegram и Discord используют эту схему для «честных» противников.
  • Психологические тесты. Позволяют выявлять «привычные» модели поведения у испытуемых.
  • Маркетинг. Прогнозирование реакций покупателей на рекламные сообщения, когда последовательность действий фиксируется.
  • Кибербезопасность. Анализ поведения пользователя при вводе пароля, чтобы выявить подозрительные отклонения от нормы.

Как начать использовать гадалку Шеннона?

Соберите историю действий. В игровом контексте – минимум 30‑50 ходов.

Встроите алгоритм в ваш проект. Пример выше готов к использованию в любой Python‑программе.

Настройте порог α. Для быстрых игр выбирайте α = 0.1, для более серьёзных задач – α = 0.01.

Тестируйте. Сравните эффективность против случайного бота (потери ≈ 33 %).

Контакты для обращений

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

  • Электронная почта: shannon.fortune@example.com – быстрый ответ в течение 24 часов.
  • Telegram‑канал: t.me/ShannonFortuneBot – обсуждения, примеры кода и новости.
  • GitHub‑репозиторий: github.com/voland/shannon-fortune – исходники, инструкция по сборке и открытые вопросы.
  • Форум поддержки: forum.example.com/shannon-fortune – место для обмена опытом и решения проблем.
  • Телефон (рабочие часы 10‑18 мск): +7 -95 123‑45‑67 – консультации по интеграции в бизнес‑проекты.

Гадалка Шеннона – мощный, но одновременно простой инструмент для предсказания человеческого поведения в повторяющихся задачах. Благодаря использованию принципов кодирования Шеннона‑Фано и статистического теста χ², алгоритм способен выделять скрытые шаблоны и «перехитрить» даже опытного игрока. Однако помните, что он не обладает магией: его эффективность ограничена качеством входных данных и степенью предсказуемости противника.

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

Если вы хотите внедрить Гадалку Шеннона в свой продукт или исследовательскую задачу, воспользуйтесь контактами выше – наша команда с радостью поможет вам сделать первый шаг.