Личный проектGo

Турнирный менеджер по итеративной дилемме заключённого

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

Турнирный менеджер по итеративной дилемме заключённого

Небольшая консольная утилита на 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 — удобно смотреть таблицы результатов без парсинга консольного вывода.