Перейти к содержимому

Назад к блогу

математикаигровая теорияпрограммирование

Дилемма заключённого с памятью: как компаундинг общего счёта меняет баланс кооперации

Что будет, если накопленный общий счёт игры умножает ценность будущих раундов? Симулятор à la Аксельрод с рекурсивным компаундингом: 5 экспериментов, 10 стратегий, аналитическое предсказание кроссовера CC ≥ DC и воспроизводимый Python-код.

22 мая 2026 г.

1. Введение

В 1981 году Роберт Аксельрод провёл компьютерный турнир: программисты со всего мира прислали стратегии для повторяющейся дилеммы заключённого, и победил Анатоль Рапопорт с четырёхстрочной стратегией «Ты — мне, я — тебе» (Tit-for-Tat). Этот результат стал каноническим: при достаточно длинном горизонте взаимное сотрудничество выгоднее взаимной дефекции, и простые взаимные стратегии побеждают жадных.

Дилемма заключённого интересна именно тем, что создаёт противоречие между индивидуальной рациональностью и коллективным оптимумом. В единичном раунде дефектировать — строго доминирующая стратегия. В повторяющейся игре это перестаёт быть верным: теорема фолка показывает, что при достаточном «весе будущего» кооперативные равновесия могут поддерживаться. Стандартный способ моделировать «вес будущего» — дисконтирующий множитель δ < 1, который уменьшает ценность отдалённых раундов.

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

Классическая повторяющаяся PD устроена так: базовые выигрыши (CC=3, CD=0, DC=5, DD=1) суммируются раунд за раундом, и итог — просто накопленная сумма. Каждый раунд независим в том смысле, что прошлые выигрыши не влияют на ценность будущих очков. В нашей модификации это условие снимается: совокупный счёт S(t) определяет, сколько «стоит» раунд t+1.

Компаундинг получается рекурсивным — S(t+1) зависит от уже умноженных выигрышей, которые в свою очередь зависели от S(t-1) и так далее. Это создаёт нелинейную обратную связь: партнёрства, которые генерируют большие потоки, разгоняют множитель быстрее и тем самым делают будущие раунды ещё ценнее. Ключевое наблюдение: взаимная кооперация (CC = 6 суммарных очков за раунд) разгоняет S быстрее, чем асимметричный исход DC (= 5) или взаимная дефекция DD (= 2).

Мы проверяли две гипотезы:

    Компаундинг через M(S) делает кооперацию рационально выгодной даже против стратегий, не наказывающих дефекцию, начиная с некоторого горизонта T*.Жёсткие непрощающие стратегии (Grim/Friedman) проигрывают прощающим значительно сильнее, чем в классической PD, — из-за потерянного будущего множителя после первой случайной ошибки.

2. Механика модификации

Базовая матрица выигрышей стандартная: CC = (3, 3), CD = (0, 5), DC = (5, 0), DD = (1, 1).

В каждом раунде t выигрыш игрока умножается на M(S_t), где S_t — накопленный общий счёт обеих сторон (сумма уже умноженных выигрышей всех предыдущих раундов):

r_i(t) = payoff_i(a_t, b_t)      # сырой выигрыш из матрицы
p_i(t) = r_i(t) · M(S_t)         # умноженный выигрыш
S_{t+1} = S_t + p_A(t) + p_B(t)  # обновление накопленного счёта

Начальное состояние: S_0 = 0, поэтому M(0) = 1 при всех реализованных функциях — первый раунд всегда равен классической PD.

Ключевое наблюдение: сумма выигрышей по исходам составляет CC = 6, CD = DC = 5, DD = 2. Взаимная кооперация генерирует наибольший совокупный поток (6/раунд против 5 при асимметрии и 2 при взаимной дефекции). Это означает, что CC-партнёрство разгоняет множитель быстрее, чем любой другой исход.

Мы протестировали пять форм M(S):

ФункцияФормулаХарактер роста
Constant(1)M = 1Классическая PD (контроль)
Linear(k)M = 1 + S/kЛинейный, неограниченный
Power(k, α)M = (1 + S/k)^αСублинейный при α < 1
Log(k)M = 1 + ln(1 + S/k)Медленный, всегда растущий
Capped(M_inner, cap)M = min(inner(S), cap)Ограниченный сверху

3. Аналитическое предсказание

Рассмотрим непрерывное приближение для пары AllC vs AllC (CC) и AllD vs AllC (DC, с точки зрения игрока A).

Случай CC. Каждый раунд S растёт на 6·M(S), а игрок A получает 3·M(S). Для Linear с параметром k:

dS/dt = 6·(1 + S/k)   →   S_CC(t) = k·(e^(6t/k) − 1)

Cum_CC(t) = ∫ 3·e^(6τ/k) dτ = (k/2)·(e^(6t/k) − 1)

Случай DC. AllD получает 5·M(S), AllC получает 0; S растёт на 5·M(S):

dS/dt = 5·(1 + S/k)   →   S_DC(t) = k·(e^(5t/k) − 1)

Cum_DC(t) = k·(e^(5t/k) − 1)

Условие кроссовера Cum_CC(t*) = Cum_DC(t*) после подстановки u = e^(t/k) даёт:

u^6 − 2u^5 + 1 = 0

Нетривиальный корень численно: u ≈ 1.96, откуда t* ≈ 0.673·k. Для k = 100: t* ≈ 67 раундов.

Численный эксперимент E4 даёт кроссовер на раунде 71 — разница в 6% объясняется дискретностью симуляции. Для Power(100, 0.5) и Log(100) кроссовер CC vs DC в пределах 500 раундов отсутствует.


4. Методология

Стек: Python 3.14, NumPy, Pandas, Matplotlib, Seaborn, tqdm, pytest.

Стратегии (10): AllC, AllD, Random(p=0.5), TitForTat, SuspiciousTfT, TitForTwoTats, GrimTrigger, GenerousTfT(forgiveness=0.1), ContriteTfT, Pavlov.

Шум: два режима —

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

ЭкспериментПараметры
E1 базовый турнирRound-robin, T=200, noise=0, 100 повторений, 5 функций M(S)
E2 шумLinear(100), T=200, noise ∈ {0, 0.01, 0.05, 0.1, 0.2}, 100 повторений
E3 горизонтLinear(100), noise=0, T ∈ {10, 50, 100, 200, 500, 1000}, 100 повторений
E4 дуэльCC/DC/DD/CD сценарии, T=500, 4 функции M(S)
E5 эволюцияРепликатор, 200 поколений, 4 функции M(S)

5. Результаты

Эксперимент 1: базовый турнир

Турнир E1: выигрыши по стратегиям и множителям

Constant(1) — контроль. Ранжирование точно воспроизводит классический Аксельрод: GenerousTfT первый (537 очков), за ним TFT2 (535), TfT и ContriteTfT делят третье место (532). AllD последний (366). Разрыв GenerousTfT — AllD составляет 46%.

Linear(100) — компаундинг. Расстановка меняется кардинально. AllC поднимается с 7-го места на 1-е (4 679 071 против 506 в Constant), AllD остаётся последним, но теперь отстаёт от лидера в 25 раз (189 K против 4.7 M). Grim опускается с 5-го на 7-е место: его доля кооперации 70% против 87% у TFT2 обходится дороже при компаундинге.

Важная деталь: доля кооперации у всех стратегий не меняется от множителя к множителю — TFT2 всегда 87%, AllD всегда 0%. Компаундинг не перепрограммирует стратегии, он только усиливает разницу в выигрышах. Именно поэтому разрыв между кооперативными и дефектными стратегиями растёт экспоненциально при нетривиальных M(S).

Эксперимент 2: чувствительность к шуму

E2: выигрыш от уровня шума

Самый показательный результат исследования. При нулевом шуме Grim набирает 4 036 K — чуть хуже GenerousTfT (4 594 K). При шуме всего 1% Grim падает до 644 K — снижение на 84%. GenerousTfT при том же шуме теряет 30%, TfT — 50%.

При noise = 0.20 Grim сохраняет лишь 145 K (3.6% от бесшумного результата), тогда как GenerousTfT держит 658 K (14.3%). Разрыв между ними вырастает с 14% до 353% — GenerousTfT обходит Grim в 4.5 раза.

Механизм: одна случайная дефекция навсегда включает триггер Grim. В классической PD это потеря потока кооперации. В модели с компаундингом цена выше — теряется ещё и рост множителя: будущие раунды с высоким M(S) уже никогда не состоятся. Grim замораживает S на более низком уровне, чем прощающие стратегии.

Показательно сравнение AllC и Grim. AllC при noise = 0.01 теряет лишь 23% — стратегия без памяти не может «обидеться» навсегда и не разрушает нарастающий множитель ответными дефекциями.

Эксперимент 3: чувствительность к горизонту

E3: выигрыш от горизонта

Кооперативные стратегии обгоняют дефектные уже при T = 10 раундов: 33.3 против 25.3. В классической PD при T = 10 дефекция рациональна из-за обратной индукции — здесь нет.

С ростом T разрыв увеличивается суперлинейно: при T = 1000 кооперативные стратегии опережают дефектные в 5 раз (7.57 × 10²⁶ против 1.47 × 10²⁶). При Linear(100) в первые 10 раундов CC-партнёрство разгоняет S до ≈ 60 единиц, M(S) ≈ 1.6 — кооперирующие зарабатывают 3·1.6 = 4.8 за раунд, тогда как AllD против SuspiciousTfT большую часть матча играет DD, получая лишь 1·M.

Эксперимент 4: дуэль исходов

E4: кумулятивные выигрыши CC/DC/DD/CD

В прямом голове-в-голову AllC всегда проигрывает AllD: CD-выигрыш равен нулю при любом M(S), поэтому 0·M = 0 всегда. Это честный результат.

Ключевое сравнение — CC против DC:

    Constant(1): CC = 1 500, DC = 2 500. Дефектор выигрывает. Кроссовера нет.Linear(100): кроссовер на раунде 71. К раунду 500: CC = 2.25 × 10¹⁴, DC = 3.93 × 10¹². Взаимная кооперация опережает в 57 раз.Power(100, 0.5) и Log(100): кроссовера нет; CC/DC = 0.70 и 0.63.

Численный T* = 71 хорошо согласуется с аналитическим предсказанием 67. Только линейный рост M(S) достаточно агрессивен, чтобы преимущество взаимной кооперации перевесило начальную фору дефектора.

Эксперимент 5: эволюционная динамика

E5: доли стратегий по поколениям

Во всех четырёх условиях репликаторная динамика вытесняет AllD и SuspiciousTfT до нуля. При Constant(1) суммарная доля кооперативных стратегий — 87.5%, AllD = 1.7 × 10⁻⁴³. При Linear(100): 87.5% кооперация, AllD = 1.9 × 10⁻²⁵⁹.

Качественная структура равновесия не меняется при переходе к нетривиальным множителям. Внутри кооперативного кластера при Constant(1) лидирует GenerousTfT (16.2%), при Linear(100) — AllC (16.4%). Grim держится в кластере (~12–13%), поскольку E5 запускался без шума: в детерминированном мире его жёсткость не является недостатком.


6. Обсуждение

Судьба Grim

В чистой среде Grim работает достаточно хорошо: 5-е место при Constant, 7-е при Linear. Без ошибок он кооперирует с кооперативными и наказывает AllD. Но при noise = 1% выигрыш падает на 84%, тогда как GenerousTfT теряет лишь 30%. При компаундинге цена каждой непрощённой ошибки — не просто потерянные раунды, а замороженный множитель. Grim хорош в стабильных детерминированных мирах; в реальных системах с любым уровнем шума он нежизнеспособен.

Подъём AllC

AllC побеждает в E1 при Linear(100) не потому что стала умнее, а потому что CC-матчи разгоняют множитель быстрее всех. Компаундинг не делает наивную доброту рациональной в изоляции — в прямом противостоянии AllC/AllD AllC всегда получает ноль. Но в среде с преобладанием кооперативных агентов это рациональная стратегия. Близкая аналогия — концепция ассортативного взаимодействия в эволюционной биологии.

TfT всё ещё силён?

Да, но иначе. В классическом турнире TfT доминирует за счёт «наказательной симметрии». При компаундинге добавляется второй канал: взаимная кооперация создаёт нарастающую ренту, которую дефекция обрывает. TFT2 и GenerousTfT держат высокую долю кооперации и выигрывают рекурсивно. Ранжирование верхней части таблицы сохраняется, но абсолютные разрывы многократно возрастают.

Какая форма M(S) эффективнее?

Только Linear(100) даёт CC > DC в прямом противостоянии (кроссовер на раунде 71). Power(α = 0.5) и Log медленнее раскручивают множитель — CC/DC к раунду 500 составляет 0.70 и 0.63. Capped(Linear, 50) — промежуточный случай: после cap компаундинг прекращается.

Форма M(S) — это не технический параметр, а моделируемое предположение о природе среды. В экосистемах с линейным ростом ресурсов кооперация выгодна уже при T > 67. В средах с убывающей отдачей порог выше или недостижим. Институциональный дизайн, управляющий «скоростью компаундинга» совместных ресурсов, может качественно менять равновесие.

Pavlov: стабильный середняк

Pavlov держится на 6-м месте во всех условиях. Он не прощает так агрессивно, как GenerousTfT, и не запоминает дефекцию так жёстко, как Grim — просто повторяет успешное поведение и меняет провальное. В шумной среде эта адаптивность позволяет ему держаться лучше Grim, хотя и хуже GenerousTfT.


7. Ограничения

Конечный горизонт фиксирован заранее — игроки его знают, но не используют стратегически.

Без коэволюции стратегий: репликатор меняет доли, но не параметры. Grim не может «научиться» прощать; добавление мутаций изменило бы долгосрочное равновесие.

Фиксированная M(S): эндогенный выбор функции компаундинга самими игроками — открытый вопрос.

Только два игрока: групповые дилеммы (n > 2) принципиально отличаются; условие взаимности сложнее выполнить, а компаундинг может создать проблемы free-rider.


8. Дальнейшая работа

Мета-стратегии с выбором M(S): если игроки могут предлагать правила компаундинга до игры, возникает двухуровневая игра с потенциально богатой структурой равновесий.

Многоагентные группы: расширение на n > 2 с общим пулом — прямая связь с моделями публичных благ.

Адаптивные стратегии: Q-learning агенты, адаптирующие поведение к текущему S и M(S), вероятно, найдут стратегии, недоступные нашему зоопарку.

Несимметричные функции: разные M_A(S) и M_B(S) для двух игроков — формализация асимметрии интересов в долгосрочных контрактах.


Приложение: параметры экспериментов

ПараметрE1E2E3E4E5
Раундов T20020010–1000500200
Повторений1001001001
Шум00–0.2000
Функции M(S)5Linear(100)Linear(100)44
Seed4242424242

Код и все данные:

.

cd pd_multiplier
python -m venv .venv && .venv/Scripts/activate
pip install -e .[dev]
pytest -v                               # 80 тестов
python -m experiments.run --exp 1 --seed 42

Комментарии (0)

Войдите, чтобы оставить комментарий. Войти

Пока нет комментариев. Будьте первым!