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.
quelle
ID, n
die anderen Methodenargumenten, ID
?Antworten:
Santayana
Diejenigen, die sich nicht an die Vergangenheit erinnern können, sind dazu verdammt, sie zu wiederholen. Wir treffen unsere Entscheidungen auf der Grundlage des Verhaltens der anderen in der Vergangenheit, antworten auf der Grundlage der Antwort, die der Fragesteller normalerweise von uns bei einem bestimmten Index erwartet hat, und fragen nach der Antwort, die er uns bei einem bestimmten Index am seltensten gegeben hat .
quelle
Fleißiger Bot
Dieser Bot studiert zu Testzwecken! Es versucht, Muster in Tests zu finden, die von verschiedenen Bots ausgegeben werden, und verhält sich entsprechend.
Meiner Meinung nach übertrifft dieser Bot bisher alle anderen Bots, die ich auf meinem Computer zum Arbeiten bringen könnte, mit Ausnahme von Alpha, Beta und Gamma (die für die Zusammenarbeit programmiert wurden). Der Bot macht sich die Tatsache nicht zunutze, dass Teaming erlaubt ist, weil ich das Gefühl hatte, dass es ein bisschen wie Schummeln und etwas schmutzig war. Wenn man sich das ansieht, scheint Teaming ziemlich effektiv zu sein.
Der Bot versucht zu erkennen, wann die Antworten auf die Tests zufällig sind, und als Reaktion darauf entspricht dies hoffentlich einem Durchschnitt von 50% der Tests.
Der Bot versucht auch zu erkennen, wann ein Bot nur seine Antworten umgedreht hat, um andere Bots abzuwerfen, die versuchen, ihr Verhalten vorherzusagen.
Ich habe den Code mit einigen Kommentaren versehen, um die Lesbarkeit zu verbessern
quelle
Graf Oracular
Dieser Bot verwendet einen Algorithmus, der die Prüfungen aller anderen funktionierenden Bots (unter Berücksichtigung der runden Zahl und einiger schrecklicher Heuristiken) mittelt, um zu entscheiden, was jeder andere Bot als Prüfung festlegt.
Der Graf fragt seine Prüfungen mit einem md5-Hash ab. Sowohl seine Fragen als auch seine Antworten sind daher deterministisch. Es ignoriert die meisten Eingaben und fragt und beantwortet genau dieselben Sequenzen von Booleschen, Regen oder Sonnenschein, auch gegen Jade Emporer.
quelle
Yin-Yang
Antworten entweder alle
True
oder alleFalse
, mit Ausnahme eines Indexes, der zufällig als das Gegenteil ausgewählt wurde. Fragt das Gegenteil von dem, was es antwortet. Swaps zufällig, um Gegner abzuwerfen.Wi Qe Lu (Switcheroo)
Antwortet und fragt zufällig in der ersten Runde. Anschließend verwendet er die Antworten aus der vorherigen Prüfung und ändert eine Frage, wenn eine überdurchschnittliche Anzahl von Teilnehmern die richtigen Antworten gefunden hat.
quelle
Ein Bot von mir:
Thomas
Ein Reisender aus einem fernen Land hat einige gefährliche Vorstellungen über vergangene Ergebnisse, die auf die zukünftige Leistung hindeuten. Er nutzt diese, um andere Bots unter Kontrolle zu halten, es sei denn, dies behindert seinen eigenen Fortschritt.
quelle
Alpha
Lesen Sie den Chat, bevor Sie abstimmen. Diese Bots verletzen keine Regeln. Das OP ermutigt sogar kooperierende Bots.
Alpha bildet zusammen mit Beta ein Team. Beide verwenden eine vordefinierte Reihe von Prüfungen, um sich gegenseitig beim Aufsteigen zu unterstützen. Beide nutzen auch die Vorteile von Bots, die immer wieder dieselben Prüfungen verwenden.
quelle
Equalizer
Jeder sollte gleich sein (mit keinem dieser albernen Kaisersinn), also so viel soziale Mobilität wie möglich bieten. Machen Sie die Fragen wirklich einfach (die Antwort ist immer wahr), damit die Leute Erfolg haben können.
quelle
Beta
Lesen Sie den Chat, bevor Sie abstimmen. Diese Bots verletzen keine Regeln. Das OP ermutigt sogar kooperierende Bots.
Beta bildet zusammen mit Alpha ein Team. Beide verwenden eine vordefinierte Reihe von Prüfungen, um sich gegenseitig beim Aufsteigen zu unterstützen. Beide nutzen auch die Vorteile von Bots, die immer wieder dieselben Prüfungen verwenden.
quelle
Gamma
Lesen Sie den Chat, bevor Sie abstimmen. Diese Bots verletzen keine Regeln. Das OP ermutigt sogar kooperierende Bots.
Gamma hat die Pläne von Alpha und Beta entdeckt und versucht, beide auszunutzen, indem sie sich als einer von ihnen verkleidet.
quelle
Wie du mir so ich dir
Stellt Ihnen einfache Fragen, wenn Sie in der Vergangenheit einfache Fragen gestellt haben. Wenn Sie noch nie eine Prüfung abgelegt haben, werden standardmäßig einfache Fragen gestellt.
Darüber hinaus vertraut niemandem, der schwierige Fragen stellt, und gibt ihnen unvorhersehbare Antworten.
Dieser Bot funktioniert gut, wenn andere Bots damit zusammenarbeiten. Derzeit kooperiert nur der Equalizer, dies sollte aber hoffentlich ausreichen.
quelle
list
Objekte jederzeit zurückgegeben werden. Sowohl nach alten als auch nach aktualisierten Regeln sind perfekte Kopien eines Bots keine gültigen Einreichungen. Die zulässige Anzahl der ausgeführten Instanzen dieses Bots beträgt daher 1.Gegenteil
Der Jadekaiser hat immer Recht und implementiert die Fragefunktion des Jadekaisers als eigene Antwortfunktion, wenn er mehr als zwei Antworten benötigt. Für nur 1 Antwort wird geantwortet
true
(angemessene Wahrscheinlichkeit, korrekt zu sein) und für 2 wird geantwortettrue,false
(diese Antwort besteht "mindestens die Hälfte" der Fragen, drei von vier möglichen Quizfragen, besser als zufällige Auswahl).Verwendet eine ähnliche Logik in seinem Update hinsichtlich der Art und Weise, wie es sein Fragemuster ändert, aber seine Fragelogik ähnelt der des Jade-Kaisers, nur mit einem anderen Gewicht. Schwankt zwischen höheren Werten
true
und höheren Werten,false
wenn zu viele Kandidaten hoch genug sind, um zu bestehen.quelle
true, false
scheitern, wenn die Prüfung istfalse, true
?answer
haben Syntax- und Namensfehler -true
undfalse
solltenTrue
und seinFalse
, und dieif
s fehlen:
s am Endeupdate
.pass
ist ein NOP-Befehl, den Sie löschen können. (Der Kommentar dahinter ist nur ein Wortspiel für den Drunkard, den Sie kopiert haben.) Außerdem verwenden Sie implizit die Modulemath
undrandom
, haben aber nicht deklariert, dass Sie sie importiert haben. Ich habe es in meiner Wettbewerbsdatei mit umgeschriebennp.copysign
undnp.random.uniform
das sollte das gleiche tun.Marx
Dies ist der Marx-Bot. Er glaubt, dass wir anstelle einer Bürokratie ein kommunistisches System haben sollten. Um dieses Ziel zu erreichen, werden höherrangige Bots härter geprüft. Es gibt auch mehr zufällige Antworten auf Quizfragen von höheren Bots, weil sie wahrscheinlich schlauer sind, weil sie höher liegen.
quelle