Skip to content

m20-sch57/cooperate-defect

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cooperate-defect

Репозиторий для соревнований по Cooperate-Defect game

Запускать

make master && python3 serve.py

(может потребоваться установить flask и flask_socketio)

Ход игры

Общая иерархия:

  • Игра (50 турниров, эволюция популяции)
    • Турнир (~25 стратегий, каждая с каждой, отсеивание по очкам)
      • Матч (2 стратегии, R раундов)
        • Раунд (пара ходов cooperate/defect)

Процесс игры состоит из ~50 турниров между стратегиями игроков, причём каждый игрок имеет некоторую популяцию своих стратегий-индивидуумов (идентичных копий его программы). Изначально популяция у каждого игрока одинаковая - ~5 стратегий. Турнир состоит из независимых матчей двух индивидуумов (каждый с каждым, правила взаимодействия ниже). В результате матча каждый из индивидуумов получает какое-то кол-во очков, и эти очки суммируются в рамках одного турнира (больше очков = лучше). Далее происходит процесс естественного отбора: худшие ~10% населения вымирают, а лучшие ~10% размножаются (т.е. копируются). В случае равенства очков ранжирование стратегий происходит случайно. Таким образом, в результате одного турнира определяется относительный порядок стратегий, используемый для ествественного отбора, и следующий турнир происходит уже с новой популяцией.

В конце игры подсчитывается популяция для каждого из игроков, и выигрывает тот, чья доля превышает 66%. Если такого не нашлось, объявляется ничья.

Протокол взаимодействия двух стратегий

Программе на вход поступает одно число R — кол-во раундов в матче. Далее R раз программа должна сделать следующее:

  1. Напечатать свой ход: символ ‘c’ (cooperate) или ‘d’ (defect)
  2. Прочитать ход соперника

Отметим, что программа не знает, против кого играет. Может так оказаться, что обе стратегии принадлежат одному игроку, так что убедитесь, что ваши особи могут комфортно сосуществовать :)

Пример стратегии на Питоне

#!/usr/bin/python3 -u

R = int(input())
for _ in range(R):
    print('c') # Always cooperate
    other = input()

Ограничения

Стратегия должна быть исполняемым файлом под Ubuntu >= 22.04 (например, питоновским скриптом, см. пример выше). В рамках одного матча время работы каждой стратегии не должно превышать 0.25 сек; объём потребляемой памяти — 512MB.

Правила подсчёта очков

За каждый раунд стратегии получают очки исходя из следующей таблицы:

  • c, c: +2, +2
  • c, d: -1, +3
  • d, c: +3, -1
  • d, d: +0, +0

About

Prisoner Dilemma game

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •