Репозиторий для соревнований по Cooperate-Defect game
Запускать
make master && python3 serve.py
(может потребоваться установить flask и flask_socketio)
Общая иерархия:
- Игра (50 турниров, эволюция популяции)
- Турнир (~25 стратегий, каждая с каждой, отсеивание по очкам)
- Матч (2 стратегии, R раундов)
- Раунд (пара ходов cooperate/defect)
- Матч (2 стратегии, R раундов)
- Турнир (~25 стратегий, каждая с каждой, отсеивание по очкам)
Процесс игры состоит из ~50 турниров между стратегиями игроков, причём каждый игрок имеет некоторую популяцию своих стратегий-индивидуумов (идентичных копий его программы). Изначально популяция у каждого игрока одинаковая - ~5 стратегий. Турнир состоит из независимых матчей двух индивидуумов (каждый с каждым, правила взаимодействия ниже). В результате матча каждый из индивидуумов получает какое-то кол-во очков, и эти очки суммируются в рамках одного турнира (больше очков = лучше). Далее происходит процесс естественного отбора: худшие ~10% населения вымирают, а лучшие ~10% размножаются (т.е. копируются). В случае равенства очков ранжирование стратегий происходит случайно. Таким образом, в результате одного турнира определяется относительный порядок стратегий, используемый для ествественного отбора, и следующий турнир происходит уже с новой популяцией.
В конце игры подсчитывается популяция для каждого из игроков, и выигрывает тот, чья доля превышает 66%. Если такого не нашлось, объявляется ничья.
Программе на вход поступает одно число R — кол-во раундов в матче. Далее R раз программа должна сделать следующее:
- Напечатать свой ход: символ ‘c’ (cooperate) или ‘d’ (defect)
- Прочитать ход соперника
Отметим, что программа не знает, против кого играет. Может так оказаться, что обе стратегии принадлежат одному игроку, так что убедитесь, что ваши особи могут комфортно сосуществовать :)
#!/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