В имперском Китае звания в обществе определялись не рождением или богатством, а способностью человека преуспеть в экзаменах императора. Нефритовый император, божественный правитель Небес, призвал всех своих подданных осмотреть, чтобы определить их ценность, и кому в дальнейшем дать Божественный мандат на управление Китаем.
Правила бюрократии:
- Божественная бюрократия состоит из неотрицательных целочисленных рангов, начиная с 0. Каждый член (бот) бюрократии принадлежит одному рангу. Каждый ранг может содержать произвольно много членов, но не может быть пустым, если все ранги выше не пусты
- В начале игры все участники имеют ранг 0
- Каждый ход, каждый член бюрократии должен ответить на экзамен. Экзамен состоит из правильного угадывания логических значений списка. Длина списка - это номер ранга над членом.
- Экзаменационные вопросы подготовлены случайным членом ранга выше. Члены высшего ранга получают свои вопросы непосредственно от
JadeEmperor
(см. Ниже) - Участник, набравший не менее 50% на экзамене, имеет право на повышение. Участник, набравший менее 50% на экзамене, может быть понижен в должности.
- У участника, имеющего право на понижение в должности, его ранг уменьшается на единицу только в том случае, если на его место претендует участник, имеющий право на повышение в звании ниже.
- Всем участникам, имеющим право на повышение по службе, свой ранг повышается на единицу до тех пор, пока это положение не оставляет пустым.
- Если не все правомочные участники могут быть понижены в должности или повышены в должности, предпочтение отдается тем, кто имеет наименьшее значение (для понижения в должности), соответственно. наивысший (для продвижения) балл. Галстуки рвутся случайно.
- Ранг участника может меняться не более чем на 1 каждый ход.
Правила игры:
- Каждому боту будет случайным образом присвоен идентификатор в начале игры, который не изменится в течение его хода.
JadeEmperor
Имеет идентификатор -1, а все остальные имеют последовательные идентификаторы неотрицательных, начиная с 0. - Все боты соревнуются одновременно
- Игра длится 100 ходов, оценка бота - это его среднее звание за все время.
- Общий балл получается путем запуска 1000 игр и усреднения результатов.
- Каждый бот представляет собой класс Python 3, реализующий следующие четыре функции:
ask(self,n,ID)
, который делает экзамен, возвращаяlist
логическое значение длины n. ID - это идентификатор бота, который должен угадать этот список.ask()
может быть вызван много раз в течение одного раунда для любого бота, но также и вовсе.answer(self,n,ID)
, которая является попыткой ответить на экзамен, возвращаяlist
логическое значение длины n. ID - это идентификатор бота,ask()
сгенерировавшего экзамен.answer()
вызывается ровно один раз за раунд для каждого бота.update(self,rankList,ownExam,otherExams)
вызывается после того, как контроллер выполнил все про- и понижения. Его аргументы: список целых чисел, перечисляющий все ранги по идентификатору всех ботов; кортеж, состоящий из двух списков, сначала экзаменационные вопросы, затем ответы, которые дал бот (на случай, если он забыл); затем список кортежей, аналогично состоящих из пар экзамен-ответ, на этот раз для всех экзаменов, которые раздает бот.__init__(self, ID, n)
передает боту свой собственный идентификатор и количество конкурирующих ботов.
- Классы могут реализовывать другие функции для частного использования.
- Определение дополнительных переменных и их использование для хранения данных о прошедших экзаменах разрешено в явном виде.
- Запрещены метаэффекты программирования, то есть любые попытки прямого доступа к коду других ботов, к коду контроллера, вызывающие исключения или аналогичные. Это конкурс стратегий для экзаменов, а не взлома кода.
- Боты, пытающиеся помочь друг другу, явно разрешены, если они делают это не через метаэффекты, а исключительно посредством информации, передаваемой через
update()
- Другие языки разрешены только в том случае, если они могут быть легко преобразованы в Python 3.
- Библиотека NumPy будет импортирована как
np
. Версия 1.6.5 означает, что она использует старую случайную библиотеку. Если у вас numpy 1.7, старые функции доступныnumpy.random.mtrand
для тестирования. Пожалуйста, не забудьте убрать mtrand для отправки. - Если бот вызывает исключение во время выполнения, он дисквалифицируется. Любой бот, код которого настолько запутан, что невозможно определить, генерирует ли он список длины n, когда
ask()
илиanswer()
вызван, также будет дисквалифицирован. Бот, принуждающий меня к глубокому копированию, получает -1 на счету. - Имена классов должны быть уникальными
- Допускается использование нескольких ботов на человека, но из итеративно обновленных ботов будет взята только последняя версия.
- Поскольку, похоже, существует некоторая путаница в отношении сходства ботов:
- Вы не можете опубликовать копию другого бота. Это единственная стандартная лазейка, которая действительно применяется в этой задаче.
- Вам разрешено делиться кодом с другими ботами, включая ботов других людей.
- Вам не разрешено представлять бота, который отличается от другого только тривиальным изменением стратегии (например, изменением начального числа для генерации вопроса), если вы не можете доказать, что количество таких копий-ботов является минимально необходимым для успешного выполнения. принятие их стратегии (обычно это два бота для сотрудничества).
Пример ботов:
JadeEmperor
Всегда является частью игры, но не конкурирует; он служит генератором для экзаменов ботов высшего ранга. Его экзамены являются случайными, но не единообразными, чтобы позволить умным ботам продвигаться вперед.
class JadeEmperor:
def __init__(self):
pass
def ask(self,n,ID):
num=min(np.random.exponential(scale=np.sqrt(np.power(2,n))),np.power(2,n)-1)
bi=list(np.binary_repr(int(num),width=n))
return [x=='0' for x in bi]
Пьяница производит экзамены и ответы совершенно случайно. Он будет частью игры.
class Drunkard:
def __init__(self,ID,n):
pass
def ask(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def answer(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def update(self,rankList,ownExam,otherExams):
pass #out
Плагиатор только копия предыдущих экзаменов. Он также будет частью игры.
class Plagiarist:
def __init__(self,ID,n):
self.exam=[True]
def ask(self,n,ID):
return (self.exam*n)[0:n]
def answer(self,n,ID):
return (self.exam*n)[0:n]
def update(self,rankList,ownExam,otherExams):
self.exam=ownExam[0]
Код контроллера доступен здесь . Для тестирования вы можете поместить свой собственный класс в файл Contestants.py в той же папке, и они будут импортированы.
Чат можно найти здесь .
Экзамены начинаются!
Текущий счет с высокой точностью (10000 пробежек) за 20 октября:
Конкурсы будут проводиться с каждой новой записью в обозримом будущем.
источник
ID, n
а другие аргументы методаn, ID
?Ответы:
Сантаяна
Те, кто не может вспомнить прошлое, обречены повторять его. Таким образом, мы принимаем наши решения, основываясь на том, как другие действовали в прошлом, отвечая на основании того, что ответчик обычно ожидал от нас по данному индексу, и запрашивая ответ, который они дали нам реже всего по данному индексу ,
источник
Учебный Бот
Этот бот готовится к тестам! Он пытается найти шаблоны в тестах, выдаваемых различными ботами, и действует согласованно.
С моей стороны, пока этот бот превосходит всех других ботов, которых я мог получить на своем компьютере, кроме Alpha, Beta и Gamma (которые были запрограммированы для совместной работы). Бот не использует тот факт, что совместная работа разрешена, потому что я чувствовал, что это было немного похоже на обман и немного грязный. Хотя, глядя на это, кажется, что объединение в команду кажется весьма эффективным.
Бот пытается распознать, когда ответы на тесты случайны и в ответе совпадают, что, как мы надеемся, составляет в среднем 50% на тестах.
Бот также пытается распознать, когда бот просто щелкнул своими ответами, чтобы сбросить других ботов, которые связываются, чтобы предсказать свое поведение, однако я еще не запрограммировал его, чтобы конкретно действовать по этому вопросу.
Я аннотировал код несколькими комментариями, чтобы его было легче читать
источник
Граф оракул
Этот бот использует алгоритм, который усредняет экзамены всех других работающих ботов (учитывая количество раундов и некоторую ужасную эвристику) для определения того, что каждый бот будет устанавливать в качестве экзамена.
Граф просит свои экзамены, используя хэш md5. Поэтому и его вопросы, и ответы на них являются детерминированными. Он игнорирует большинство входных данных, спрашивая и отвечая на те же самые последовательности булевых значений, дождя или блеска, в том числе против Jade Emporer.
источник
Инь Янь
Отвечает либо на все,
True
либо на всеFalse
, кроме одного индекса, случайно выбранного как противоположный. Спрашивает противоположность того, что он отвечает. Меняется случайным образом, чтобы сбросить противников.Wi Qe Lu (Switcheroo)
Отвечает и спрашивает случайным образом в первом раунде. После этого он использует ответы из предыдущего экзамена и меняет вопрос, если число участников выше среднего получило это право.
источник
Один мой бот:
Томас
Путешественник из далекой страны имеет некоторые опасные представления о прошлых результатах, свидетельствующих о будущих результатах. Он использует их, чтобы подавить других ботов, если это не подавляет его продвижение.
источник
Альфа
Прочитайте чат, прежде чем понизить. Эти боты не нарушают никаких правил. ОП даже поощряет сотрудничающих ботов.
Альфа формирует команду вместе с Бетой. Оба используют предопределенный набор экзаменов, чтобы помочь друг другу подняться вверх. Также оба используют ботов, использующих одни и те же экзамены снова и снова.
источник
Эквалайзер
Все должны быть равны (без всякой глупости этого глупого императора), поэтому обеспечьте как можно большую социальную мобильность. Сделайте вопросы действительно легкими (ответ всегда верен), чтобы люди могли добиться успеха.
источник
Бета
Прочитайте чат, прежде чем понизить. Эти боты не нарушают никаких правил. ОП даже поощряет сотрудничающих ботов.
Бета формирует команду вместе с Альфой. Оба используют предопределенный набор экзаменов, чтобы помочь друг другу подняться вверх. Также оба используют ботов, использующих одни и те же экзамены снова и снова.
источник
Гамма
Прочитайте чат, прежде чем понизить. Эти боты не нарушают никаких правил. ОП даже поощряет сотрудничающих ботов.
Гамма обнаружил планы Альфы и Беты и пытается воспользоваться обоими, маскируясь под одного из них.
источник
TitForTat
Задаёт вам простые вопросы, если вы задавали им простые вопросы в прошлом. Если вы никогда не давали ему экзамен, по умолчанию это простые вопросы.
Кроме того, не доверяет никому, кто задает сложные вопросы, и даст им непредсказуемые ответы.
Этот бот работает хорошо, если с ним сотрудничают другие боты. В настоящее время сотрудничает только эквалайзер, но, надеюсь, этого будет достаточно.
источник
list
объекты в любое время. Кроме того, как по старым, так и по обновленным правилам, совершенные копии бота не являются действительными представлениями, поэтому допустимое количество экземпляров этого бота равно 1.противоречащий
Нефритовый император всегда прав, поэтому он реализует функцию запроса Нефритового императора как свою собственную функцию ответа, когда ему нужно более 2 ответов. Только за 1 ответ
true
(приличный шанс быть правильным), а для 2 - ответаtrue,false
(этот ответ проходит «по крайней мере половину» из трех возможных вопросов из четырех возможных, что лучше, чем выбор случайных).Использует аналогичную логику в своем Обновлении в отношении того, как он изменяет свой шаблон запроса, но его логика запроса аналогична логике Нефритового Императора, только с другим весом. Колеблется между более высокими значениями или
true
более высокими значениями,false
когда слишком много кандидатов набирают достаточно высокий балл для прохождения.источник
true, false
подведет ли экзаменfalse, true
?answer
содержат синтаксические ошибки и ошибки имен -true
иfalse
должны бытьTrue
иFalse
, и в концеif
s отсутствуют:
supdate
.pass
это команда NOP, вы можете удалить ее. (Комментарий за ним - просто каламбур для Пьяницы, которого вы скопировали.) Кроме того, вы неявно используетеmath
иrandom
модули, но не объявляете, что импортировали их. Я переписал это в моем файле состязания с,np.copysign
иnp.random.uniform
это должно сделать то же самое.Маркс
Это бот Маркса. Он считает, что вместо бюрократии у нас должна быть коммунистическая система. Чтобы помочь в достижении этой цели, он дает более сложные тесты для ботов с более высоким рейтингом. Это также дает больше случайных ответов на тесты от более высоких ботов, потому что они, вероятно, умнее, потому что они выше.
источник