В Імперському Китаї чини в суспільстві визначалися не народженням, ні багатством, а здатністю людини до успіху в імператорських іспитах. Імператор нефриту, божественний правитель Небес, закликав всіх його підданих обстежитися, щоб визначити їхню цінність, а кому далі дати Божественний мандат для управління Китаєм.
Правила бюрократії:
- Божественна бюрократія складається з негативних цілочисельних рангів, починаючи з 0. Кожен член (бот) бюрократії належить до одного рангу. Кожен ранг може містити довільно багато членів, але не може бути порожнім, якщо всі ранги вище не порожні
- На початку гри всі учасники мають ранг 0
- Щоразу, кожен член бюрократії повинен відповідати на іспит. Екзамен складається з правильного відгадування булевих значень списку. Довжина списку - це число рангу над членом.
- Екзаменаційні питання готуються випадковим членом рангу вище. Члени вищого рангу отримують свої запитання безпосередньо у
JadeEmperor
(див. Нижче) - Учасник, який на іспиті набрав принаймні 50%, має право на Акцію. Член, який на іспиті набрав менше 50%, може брати участь у програмі Demotion.
- Учасник, який має право на демо-версію, їхній ранг зменшився на одного лише у тому випадку, якщо є член, який має право на Акцію в нижчому ранзі, щоб зайняти своє місце.
- Усім учасникам, які мають право на Акцію, їхній ранг збільшився на 1, доки цей ранг не залишиться порожнім.
- Якщо не всі члени, які мають право на участь, можуть бути демонованими або просунутими, перевага надається тим, хто має найменший (для демонтажу) респ. найвищий (для Акції) бал. Краватки розриваються випадковим чином.
- Звання члена може змінюватися лише максимум на 1 кожен крок.
Правила гри:
- Кожному боту буде випадково присвоєно ідентифікатор на початку гри, який не зміниться протягом його перебігу. Ідентифікатор
JadeEmperor
має -1, усі інші мають послідовні негативні ідентифікатори, починаючи з 0. - Усі боти змагаються одночасно
- Гра триває 100 оборотів, оцінка бота - це її середній ранг, який мав за той час.
- Загальна оцінка набирається за допомогою 1000 ігор та усереднення результатів.
- Кожен бот - клас Python 3, що реалізує наступні чотири функції:
ask(self,n,ID)
, який складає іспит, повертаючиlist
булеві довжини n. ID - це ідентифікатор бота, який повинен відгадати цей список.ask()
можна викликати багато разів протягом одного раунду для будь-якого бота, але також зовсім не.answer(self,n,ID)
, що є спробою відповісти на іспит, повернувшиlist
булеві довжини n. Ідентифікатор - ідентифікатор бота,ask()
згенерований іспитомanswer()
називається рівно один раз на раунд для кожного бота.update(self,rankList,ownExam,otherExams)
викликається після того, як Контролер виконав усі Про-та Демо-версії. Його аргументами є: Список цілих чисел, перелік усіх рангів за ідентифікацією всіх ботів; кортеж, що складається з двох списків, спочатку іспитні питання, потім відповіді, які дав бот (на випадок, якщо він забув); потім список кортежів, аналогічно складаючись з пар на відповіді на іспит-відповіді, цього разу для всіх іспитів, які видав бот.__init__(self, ID, n)
передає боту власний ідентифікатор та кількість конкуруючих ботів.
- Класи дозволяють реалізувати інші функції для приватного використання
- Визначати подальші змінні та використовувати їх для зберігання даних про минулі іспити явно дозволяється.
- Програмування метаефектів заборонено, тобто будь-які спроби прямо отримати доступ до коду інших ботів, коду Контролера, спричиняючи Винятки або подібне. Це змагання стратегій для іспитів, а не злому коду.
- Ботів, які намагаються допомогти один одному, явно дозволено, якщо вони не роблять це за допомогою мета-ефектів, а виключно за допомогою інформації, що передається через
update()
- Інші мови дозволені лише в тому випадку, якщо їх можна легко перетворити на Python 3.
- Бібліотека numpy буде імпортовано як
np
. Версія 1.6.5, тобто використовує стару випадкову бібліотеку. Якщо у вас nummy 1.7, старі функції доступніnumpy.random.mtrand
для тестування. Не забудьте зняти mtrand для подання. - Якщо бот викликає виняток під час виконання, його дискваліфікують. Будь-який бот, чий код настільки затуманений, що неможливо сказати, чи генерує він список довжини n при виклику
ask()
абоanswer()
викликається, також буде дискваліфіковано попередньо. Бот, який змушує мене надруковувати копії, отримує -1 балів. - Назви класів мають бути унікальними
- Дозволено декілька ботів на людину, але лише ітераційно оновленими ботами буде взята лише остання версія.
- Оскільки, схоже, існує деяка плутанина щодо подібності бота:
- Вам заборонено публікувати копію іншого бота. Це єдина стандартна лазівка, яка реально застосовується в цьому виклику.
- Вам дозволяється ділитися кодом з іншими ботами, включаючи ботів інших людей.
- Вам не дозволяється подавати бота, який відрізняється від іншого лише тривіальним зміною стратегії (наприклад, зміною насіння для генерації запитань) якщо ви не зможете довести, що кількість таких копіювання є мінімально необхідним для успіху введення в дію своєї стратегії (зазвичай це два боти для співпраці).
Приклад ботів:
The 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
?