Im kaiserlichen China wurden Ränge in der Gesellschaft nicht durch Geburt oder Reichtum bestimmt, sondern durch die Fähigkeit einer Person, bei den kaiserlichen Prüfungen hervorragende Leistungen zu erbringen. Der Jadekaiser, der göttliche Herrscher des Himmels, hat alle seine Untertanen aufgefordert, auf ihren Wert hin untersucht zu werden und wem als Nächstes das göttliche Mandat zu erteilen, um China zu regieren.
Regeln der Bürokratie:
- Die Göttliche Bürokratie besteht aus nicht negativen ganzzahligen Rängen, die mit 0 beginnen. Jedes Mitglied (Bot) der Bürokratie gehört einem Rang an. Jeder Rang kann beliebig viele Mitglieder enthalten, kann aber nur leer sein, wenn alle darüber liegenden Ränge leer sind
- Zu Beginn des Spiels haben alle Mitglieder den Rang 0
- In jeder Runde muss jedes Mitglied der Bürokratie eine Prüfung beantworten. Die Prüfung besteht darin, die Booleschen Werte einer Liste richtig zu erraten. Die Länge der Liste ist die Nummer des Ranges über dem Mitglied.
- Die Prüfungsfragen werden von einem zufälligen Mitglied des obigen Ranges vorbereitet. Mitglieder mit dem höchsten Rang erhalten ihre Fragen direkt von der
JadeEmperor
(siehe unten) - Ein Mitglied, das bei seiner Prüfung mindestens 50% erreicht, ist zur Promotion berechtigt. Ein Mitglied, das bei seiner Prüfung weniger als 50% erzielt, hat Anspruch auf Herabstufung.
- Ein Mitglied, das für eine Herabstufung in Frage kommt, wird nur dann um eins herabgesetzt, wenn es ein Mitglied gibt, das für eine Herabstufung in Frage kommt, um seinen Platz einzunehmen.
- Alle beförderungsberechtigten Mitglieder haben einen um eins erhöhten Rang, sofern dadurch kein Rang frei bleibt.
- Wenn nicht alle berechtigten Mitglieder herabgestuft oder befördert werden können, werden die niedrigsten (für Herabstufung) bzw. niedrigsten Mitglieder bevorzugt. Höchste (für Promotion) Punktzahl. Krawatten werden zufällig gebrochen.
- Der Rang eines Mitglieds kann sich nur um höchstens 1 pro Runde ändern.
Spielregeln:
- Jedem Bot wird zu Beginn des Spiels zufällig eine ID zugewiesen, die sich im Laufe des Spiels nicht ändert. Der
JadeEmperor
hat die ID -1, alle anderen haben aufeinanderfolgende nicht negative IDs, beginnend mit 0. - Alle Bots treten gleichzeitig an
- Das Spiel läuft über 100 Runden, die Punktzahl des Bots ist der durchschnittliche Rang, den er in dieser Zeit innehatte.
- Die Gesamtpunktzahl wird durch Ausführen von 1000 Spielen und Mitteln der Ergebnisse ermittelt.
- Jeder Bot ist eine Python 3- Klasse, die die folgenden vier Funktionen implementiert:
ask(self,n,ID)
, der eine Prüfung durch Rückgabe eineslist
Booleschen Wertes der Länge n durchführt. ID ist die ID des Bots, der diese Liste erraten muss.ask()
kann in einer Runde für jeden Bot mehrmals aufgerufen werden, aber auch gar nicht.answer(self,n,ID)
list
Dies ist ein Versuch, eine Prüfung zu beantworten, indem ein Boolescher Wert der Länge n zurückgegeben wird. ID ist die ID des Botsask()
, der die Prüfung generiert hat.answer()
wird genau einmal pro Runde für jeden Bot aufgerufen.update(self,rankList,ownExam,otherExams)
wird aufgerufen, sobald der Controller alle Vor- und Zurückstufungen durchgeführt hat. Die Argumente sind: Eine Liste von ganzen Zahlen, in der alle Ränge nach ID aller Bots aufgelistet sind; ein Tupel, bestehend aus zwei Listen, zuerst die Prüfungsfragen, dann die Antworten, die der Bot gegeben hat (falls er sie vergessen hat); dann eine Liste von Tupeln, die ebenfalls aus Prüfungs-Antwort-Paaren besteht, diesmal für alle Prüfungen, die der Bot austeilt.__init__(self, ID, n)
Übergibt dem Bot seine eigene ID und die Anzahl der konkurrierenden Bots.
- Klassen dürfen andere Funktionen für den privaten Gebrauch implementieren
- Das Definieren weiterer Variablen und deren Verwendung zum Speichern von Daten über vergangene Prüfungen ist ausdrücklich gestattet.
- Das Programmieren von Metaeffekten ist verboten, dh es wird versucht, direkt auf den Code anderer Bots, den Code des Controllers, zuzugreifen, was Ausnahmen oder ähnliches zur Folge hat. Dies ist ein Wettbewerb von Strategien für die Prüfungen, nicht von Code-Hacking.
- Bots, die versuchen, sich gegenseitig zu helfen, sind ausdrücklich erlaubt, solange sie dies nicht über Metaeffekte, sondern nur über die übermittelten Informationen tun
update()
- Andere Sprachen sind nur zulässig, wenn sie leicht in Python 3 konvertiert werden können.
- Die Bibliotheksnummer wird importiert als
np
. Die Version ist 1.6.5, dh es wird die alte Zufallsbibliothek verwendet. Wenn Sie numpy 1.7 haben, stehen Ihnen die alten Funktionen unternumpy.random.mtrand
zum Testen zur Verfügung. Bitte denken Sie daran, den mtrand für die Einreichung abzustreifen. - Wenn ein Bot während der Laufzeit eine Ausnahme verursacht, wird er disqualifiziert. Jeder Bot, dessen Code so verschleiert ist, dass nicht zu erkennen ist, ob er beim Aufruf eine Liste mit der Länge n generiert,
ask()
oder ob eranswer()
aufgerufen wird, wird ebenfalls präventiv disqualifiziert. Ein Bot, der mich zum Kopieren von Ausgaben zwingt, erhält -1 für die Punktzahl. - Klassennamen müssen eindeutig sein
- Es sind mehrere Bots pro Person zulässig, von iterativ aktualisierten Bots wird jedoch nur die neueste Version verwendet.
- Da es einige Verwirrung über die Ähnlichkeit der Bot zu geben scheint:
- Du darfst keine Kopie eines anderen Bots posten. Dies ist die einzige Standard-Lücke, die für diese Herausforderung wirklich gilt.
- Sie dürfen Code mit anderen Bots teilen, einschließlich Bots anderer Personen.
- Du darfst nicht , einen Bot einzureichen, der sich von einem anderen nur durch eine geringfügige Änderung der Strategie unterscheidet (wie eine Änderung des Ausgangs für die Generierung von Fragen), es sei denn Sie können nachweisen, dass die Anzahl solcher Bots für eine erfolgreiche mindestens so hoch ist Umsetzung ihrer Strategie (Das sind normalerweise zwei Bots für eine Kooperation).
Beispiel Bots:
Das JadeEmperor
ist immer Teil des Spiels, konkurriert aber nicht; Er dient als Generator für Prüfungen von Bots mit dem höchsten Rang. Seine Prüfungen sind zufällig, aber nicht einheitlich, damit intelligente Bots vorankommen können.
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]
Der Säufer erstellt Prüfungen und antwortet völlig zufällig. Er wird Teil des Spiels sein.
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
Der Plagiat kopiert nur frühere Prüfungen. Er wird auch Teil des Spiels sein.
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]
Controller-Code verfügbar hier . Zum Testen können Sie Ihre eigene Klasse in eine Contestants.py-Datei in demselben Ordner einfügen, und sie werden importiert.
Chatroom kann gefunden werden hier .
Die Prüfungen beginnen!
Aktuelle Punktzahl in höherer Präzision (10000 Läufe) für den 20. Oktober:
Mit jedem neuen Beitrag werden auf absehbare Zeit Wettbewerbe durchgeführt.
ID, n
die anderen Methodenargumente n, ID
?