Skip to content

Tournament Judge CLI (tjudge-cli) - инструмент для проведения турниром между программами в рамках теоретико-игровых моделей

License

Notifications You must be signed in to change notification settings

bmstu-itstech/tjudge-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tjudge-cli

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

Игры

Дилемма заключённого (dilemma)

Модифицированная дилемма заключённого.

Даётся iters итераций. На каждой итерации участник может выбрать, предать ли ему соперника (DEFECT) или сотрудничать с ним (COOPERATE). Обозначим как D и C соответственно. В зависимости от выбора участников им начисляются очки:

  • если предадут оба, то они получат 1 очков;
  • если один предаст другого, то первый получит 10 очков, другой 0;
  • если оба пойдут на сотрудничество, то они получат по 5 очков.

Модифицированная дилемма заключённого отличается от классической наличием нескольких итераций, причём программы знают предыдущий выбор соперника. Это позволяет строить, например, "мстительные" тактики.

Примеры программ представлены в resources/dilemma.

Протокол

Начало:

  1. Вводится целое число iters - количество итераций.

Далее iters итераций:

  1. Выводится COOPERATE или DEFECT - сотрудничать или предать соперника соответственно.
  2. Вводится строка COOPERATE или DEFECT - выбор другого соперника.

Результатом является сумма баллов за все итерации.

Перетягивание каната (tug_of_war)

Игра на перетягивание каната в теории игр.

Участникам даётся energy сил. Известно количество итераций iters. На каждой итерации участник выбирает, сколько ему сил (energy) потратить. Назовём участников A и B. Пусть в итерации они выбрали потратить a и b сил. Тогда:

  • если a > b, то участник A получает 1 балл;
  • если a < b, то участник B получает 1 балл;
  • если a = b, то никто не получает баллы. Нельзя потратить больше сил, чем осталось у участника.

Примеры программ представлены в resources/tug_of_war.

Протокол

Начало:

  1. Вводятся целые числа M и N - количество сил (energy) и итераций (iters).

Далее iters итераций:

  1. Выводится целое число n - количество сил, которые тратятся на данной итерации. n вычитается из запаса сил программы. Участник не может потратить больше сил, чем у него осталось.
  2. Вводится целое число n' - количество сил, которые потратил соперник на данной итерации.

Результатом является сумма баллов за все итерации.

About

Tournament Judge CLI (tjudge-cli) - инструмент для проведения турниром между программами в рамках теоретико-игровых моделей

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published