Tournament Judge CLI (tjudge-cli) - инструмент для проведения турниром между программами в рамках теоретико-игровых моделей.
tjudge-cli - система запуска и оценки стратегий в различных играх в контексте теории игр.
Стратегия реализуется в виде программы, написанной на любом языке программирования.
Программа получает информацию о ходе игры через stdin и выводит свои решения через stdout.
Протокол взаимодействия определяется правилами игры.
Нарушение протокола влечёт за собой вывод информационного сообщения в stderr и возврат кода 1 или 2 - в зависимости
от того, какая программа нарушила протокол.
cargo install --path .Дилемма заключённого на примерах из репозитория:
tjudge-cli dilemma ./resources/dilemma/tit_for_tat.py ./resources/dilemma/evil.pyВывод:
9 19
Первая программа получила 9 очков, вторая - 19.
Увеличенное количество итераций и отладочный вывод:
tjudge-cli dilemma -i 20 -v ./resources/dilemma/tit_for_tat.py ./resources/dilemma/evil.pyЕсли программа нарушает протокол, например, если не выводит сообщение в течении заданного промежутка времени:
$ tjudge-cli dilemma ./resources/dilemma/tit_for_tat.py ./resources/invalid/silent.py
timed out waiting for fd to be ready
$ echo $?
2Модифицированная дилемма заключённого.
Даётся iters итераций.
На каждой итерации участник может выбрать, предать ли ему соперника (DEFECT) или сотрудничать с ним (COOPERATE).
Обозначим как D и C соответственно.
В зависимости от выбора участников им начисляются очки:
- если предадут оба, то они получат
1очков; - если один предаст другого, то первый получит
10очков, другой0; - если оба пойдут на сотрудничество, то они получат по
5очков.
Модифицированная дилемма заключённого отличается от классической наличием нескольких итераций, причём программы знают предыдущий выбор соперника. Это позволяет строить, например, "мстительные" тактики.
Примеры программ представлены в resources/dilemma.
Начало:
- Вводится целое число
iters- количество итераций.
Далее iters итераций:
- Выводится
COOPERATEилиDEFECT- сотрудничать или предать соперника соответственно. - Вводится строка
COOPERATEилиDEFECT- выбор другого соперника.
Результатом является сумма баллов за все итерации.
Игра на перетягивание каната в теории игр.
Участникам даётся energy сил.
Известно количество итераций iters.
На каждой итерации участник выбирает, сколько ему сил (energy) потратить.
Назовём участников A и B. Пусть в итерации они выбрали потратить a и b сил.
Тогда:
- если
a>b, то участникAполучает 1 балл; - если
a<b, то участникBполучает 1 балл; - если
a=b, то никто не получает баллы. Нельзя потратить больше сил, чем осталось у участника.
Примеры программ представлены в resources/tug_of_war.
Начало:
- Вводятся целые числа
MиN- количество сил (energy) и итераций (iters).
Далее iters итераций:
- Выводится целое число
n- количество сил, которые тратятся на данной итерации.nвычитается из запаса сил программы. Участник не может потратить больше сил, чем у него осталось. - Вводится целое число
n'- количество сил, которые потратил соперник на данной итерации.
Результатом является сумма баллов за все итерации.