Турнирный менеджер по итеративной дилемме заключённого
Проводите турниры между стратегиями в повторяющейся дилемме заключённого и проверяйте тезисы Роберта Аксельрода на популяциях.

Небольшая консольная утилита на Go, которая проводит турниры между стратегиями в итеративной дилемме заключённого — от классического кругового турнира до эволюционных экспериментов с популяциями.
Задача
Дилемма заключённого — одна из ключевых задач теории игр: её решение сводится к равновесию Нэша, из которого ни один агент не может выйти в одиночку. Роберт Аксельрод в книге «Эволюция сотрудничества» предложил рассмотреть эту дилемму с тенью будущего — то есть сделал её итеративной — и провёл компьютерный турнир между стратегиями от учёных, психологов, социологов и политологов. Проект воспроизводит этот турнир и позволяет запускать собственные эксперименты.
Подробнее об эксперименте можно почитать в моей статье.
Архитектура
- cmd/
- play/Классический круговой турнир
- main.go
- experiments/Сценарии экспериментов
- main.go
- experiments.go
- internal/Ядро турнира
- config.go
- match.go
- population.goОписание популяций для эволюционных экспериментов
- tournament.go
- strategies/Реализации стратегий
- factory.goФабрика стратегий
- justfile
Стратегия — это реализация интерфейса Strategy с тремя методами: Name() string, Move(opponentHistory History) Action и Reset(). Стратегии не видят ничего, кроме истории ходов соперника, а внутреннее состояние сбрасывают сами в Reset().
Запуск
Утилита собирается и запускается через just:
just play # классический круговой турнир
just expN # эксперимент под номером N
just all # все эксперименты подряд
Каждый прогон сохраняет результаты в CSV — удобно смотреть таблицы результатов без парсинга консольного вывода.