Dans la Chine impériale, les rangs dans la société n'étaient pas déterminés par la naissance ou la richesse, mais par la capacité d'une personne à exceller dans les examens impériaux. L'empereur de jade, souverain divin des cieux, a demandé que tous ses sujets soient examinés pour déterminer leur valeur et à qui ensuite confier le mandat divin pour gouverner la Chine.
Règles de la bureaucratie:
- La bureaucratie divine se compose de rangs non négatifs à valeur entière, commençant par 0. Chaque membre (bot) de la bureaucratie appartient à un rang. Chaque rang peut contenir un nombre arbitraire de membres, mais ne peut être vide que si tous les rangs ci-dessus sont vides
- Au début du jeu, tous les membres ont le rang 0
- Chaque tour, chaque membre de la bureaucratie doit répondre à un examen. L'examen consiste à deviner correctement les valeurs booléennes d'une liste. La longueur de la liste est le numéro du rang au-dessus du membre.
- Les questions d'examen sont préparées par un membre aléatoire du rang supérieur. Les membres du rang le plus élevé obtiennent leurs questions directement du
JadeEmperor
(voir ci-dessous) - Un membre ayant obtenu au moins 50% à son examen est éligible à la promotion. Un membre ayant obtenu moins de 50% à son examen est admissible à la rétrogradation.
- Un membre éligible à la rétrogradation voit son rang diminué de un uniquement s'il y a un membre éligible à la promotion au grade ci-dessous pour prendre sa place.
- Tous les membres éligibles à la promotion voient leur rang augmenté de un tant que cela ne laisse aucun rang vide.
- Si tous les membres éligibles ne peuvent pas être rétrogradés ou promus, la préférence va à ceux des plus bas (pour rétrogradation) resp. score le plus élevé (pour la promotion). Les liens sont rompus au hasard.
- Le rang d'un membre ne peut changer que d'au plus 1 à chaque tour.
Règles du jeu:
- Chaque bot se verra attribuer un ID au hasard au début du jeu, qui ne changera pas au cours de son déroulement. Le
JadeEmperor
a l'ID -1, tous les autres ont des ID non négatifs consécutifs, en commençant par 0. - Tous les bots s'affrontent en même temps
- Le jeu se déroule sur 100 tours, le score du bot est son rang moyen possédé au cours de cette période.
- Le score total est acquis en exécutant 1000 matchs et en faisant la moyenne des résultats.
- Chaque Bot est une classe Python 3 implémentant les quatre fonctions suivantes:
ask(self,n,ID)
, ce qui fait un examen en renvoyant unlist
des booléens de longueur n. ID est l'ID du bot qui doit deviner cette liste.ask()
peut être appelé plusieurs fois au cours d'une même manche pour n'importe quel bot, mais pas du tout.answer(self,n,ID)
, qui est une tentative de réponse à un examen en renvoyant unlist
des booléens de longueur n. ID est l'ID du bot qui aask()
généré l'examen.answer()
est appelé exactement une fois par tour pour chaque bot.update(self,rankList,ownExam,otherExams)
est appelé une fois que le contrôleur a effectué toutes les rétrogradations et rétrogradations. Ses arguments sont: Une liste d'entiers, listant tous les rangs par ID de tous les bots; un tuple, composé de deux listes, d'abord les questions d'examen, puis les réponses du bot (au cas où il aurait oublié); puis une liste de tuples, composée également de paires examen-réponse, cette fois pour tous les examens distribués par le bot.__init__(self, ID, n)
transmet au bot son propre identifiant et le nombre de bots concurrents.
- Les classes sont autorisées à implémenter d'autres fonctions pour un usage privé
- Il est explicitement permis de définir d'autres variables et de les utiliser pour stocker des données sur les examens passés.
- La programmation des méta-effets est interdite, ce qui signifie que toute tentative d'accéder directement au code d'autres bots, au code du contrôleur, provoquant des exceptions ou similaires. Il s'agit d'un concours de stratégies pour les examens, pas de piratage de code.
- Les bots essayant de s'entraider sont explicitement autorisés, tant qu'ils ne le font pas via des méta-effets, mais uniquement par les informations transmises
update()
- D'autres langues ne sont autorisées que si elles peuvent être facilement converties en Python 3.
- La bibliothèque numpy sera importée en tant que
np
. La version est 1.6.5, ce qui signifie qu'elle utilise l'ancienne bibliothèque aléatoire. Si vous avez numpy 1.7, les anciennes fonctions sont disponibles sousnumpy.random.mtrand
pour les tests. N'oubliez pas de retirer le mtrand pour soumission. - Si un bot provoque une exception pendant l'exécution, il est disqualifié. Tout bot dont le code est tellement obscurci qu'il est impossible de dire s'il génère une liste de longueur n quand
ask()
ouanswer()
est appelé sera également disqualifié de manière préventive. Un bot me forçant à copier en profondeur les sorties obtient -1 sur le score. - Les noms de classe doivent être uniques
- Plusieurs bots par personne sont autorisés, mais seule la dernière version sera prise des bots mis à jour de manière itérative.
- Puisqu'il semble y avoir une certaine confusion sur la similitude des bots:
- Vous n'êtes pas autorisé à publier une copie d'un autre bot. C'est la seule échappatoire standard qui s'applique vraiment à ce défi.
- Vous êtes autorisé à partager du code avec d'autres robots, y compris des robots d'autres personnes.
- Vous n'êtes pas autorisé à soumettre un bot qui ne diffère d'un autre que par un changement trivial de la stratégie (comme un changement dans la graine pour la génération de la question), sauf si vous pouvez prouver que le nombre de ces bots de copie carbone est le minimum requis pour réussir mise en œuvre de leur stratégie (Ce sera généralement deux bots pour une coopération).
Exemples de bots:
Le JadeEmperor
fait toujours partie du jeu, mais ne participe pas à la compétition; il sert de générateur pour les examens des bots de rang le plus élevé. Ses examens sont aléatoires, mais pas uniformément, pour permettre aux robots intelligents de progresser.
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]
L' ivrogne produit des examens et des réponses de manière complètement aléatoire. Il fera partie du jeu.
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
Le plagiaire copie simplement les examens précédents. Il fera également partie du jeu.
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]
Code contrôleur disponible ici . Pour les tests, vous pouvez placer votre propre classe dans un fichier Contestants.py dans le même dossier, et ils seront importés.
Chatroom se trouve ici .
Les examens commencent!
Score actuel, en plus haute précision (10000 runs) pour le 20 octobre:
Des concours seront organisés avec chaque nouvelle inscription dans un avenir prévisible.
la source
ID, n
mais les autres arguments de la méthoden, ID
?Réponses:
Santayana
Ceux qui ne se souviennent pas du passé sont condamnés à le répéter. Nous prenons donc nos décisions en fonction de la façon dont les autres ont agi dans le passé, en répondant en fonction de la réponse que le demandeur attend habituellement de nous à un indice donné, et en demandant la réponse qu'ils nous ont donnée le moins souvent à un indice donné .
la source
Studious Bot
Ce bot étudie pour les tests! Il essaie de trouver des modèles dans les tests donnés par divers bots et agit en conséquence.
Pour ma part, jusqu'à présent, ce bot surpasse tous les autres bots que je pourrais faire fonctionner sur mon ordinateur, à l'exception d'Alpha, Beta et Gamma (qui ont été programmés pour fonctionner ensemble). Le bot n'utilise pas le fait que faire équipe est autorisé parce que je sentais que c'était un peu comme tricher et un peu sale. Cependant, en regardant par-dessus, le travail en équipe semble être assez efficace.
Le bot tente de reconnaître quand les réponses aux tests sont aléatoires et en réponse correspond à ce que l'on espère en moyenne 50% sur les tests.
Le bot tente également de reconnaître quand un bot a simplement retourné ses réponses pour rejeter d'autres bots qui tentent de prédire leur comportement, mais je ne l'ai pas encore programmé pour agir spécifiquement sur cela.
J'ai annoté le code avec quelques commentaires afin d'en faciliter la lecture
la source
Count Oracular
Ce bot utilise un algorithme qui fait la moyenne des examens de tous les autres bots qui fonctionnent (étant donné le nombre de tours et quelques heuristiques terribles) pour décider ce que chaque autre bot définira comme examen.
Le comte demande ses examens à l'aide d'un hachage md5. Ses questions et ses réponses sont donc déterministes. Il ignore la plupart des entrées, demandant et répondant exactement aux mêmes séquences de booléens, de pluie ou de soleil, y compris contre Jade Emporer.
la source
YinYang
Répond à toutes
True
ou à toutesFalse
, sauf pour un index choisi au hasard pour être le contraire. Demande le contraire de ce qu'il répond. Échange au hasard pour repousser les adversaires.Wi Qe Lu (Switcheroo)
Répond et demande au hasard au premier tour. Par la suite, il utilise les réponses de l'examen précédent et modifie une question si un nombre supérieur à la moyenne de concurrents a réussi.
la source
Un bot à moi:
Thomas
Un voyageur d'un pays lointain a des idées dangereuses sur les résultats passés qui indiquent les performances futures. Il les utilise pour garder les autres bots à moins que cela n'entrave sa propre progression.
la source
Alpha
Lisez le chat avant de voter. Ces robots ne violent aucune règle. Le PO encourage même les robots coopérants.
Alpha forme une équipe avec Beta. Les deux utilisent un ensemble d'examens prédéfinis pour s'aider mutuellement à gravir les échelons. Les deux profitent également des bots utilisant les mêmes examens encore et encore.
la source
Égaliseur
Tout le monde devrait être égal (sans aucune de ces sottises stupides d'empereur), donc fournissez autant de mobilité sociale que possible. Rendez les questions vraiment faciles (la réponse est toujours vraie) afin que les gens puissent réussir.
la source
Bêta
Lisez le chat avant de voter. Ces robots ne violent aucune règle. Le PO encourage même les robots coopérants.
Beta forme une équipe avec Alpha. Les deux utilisent un ensemble d'examens prédéfinis pour s'aider mutuellement à gravir les échelons. Les deux profitent également des bots utilisant les mêmes examens encore et encore.
la source
Gamma
Lisez le chat avant de voter. Ces robots ne violent aucune règle. Le PO encourage même les robots coopérants.
Gamma a découvert les plans d'Alpha et Beta et essaie de profiter des deux en se déguisant en l'un d'eux.
la source
TitForTat
Vous pose des questions faciles si vous lui avez posé des questions faciles dans le passé. Si vous ne lui avez jamais passé d'examen, il est par défaut des questions faciles.
De plus, ne fait confiance à personne qui pose des questions difficiles et leur donnera des réponses imprévisibles.
Ce bot fonctionne bien si d'autres bots coopèrent avec lui. Actuellement, seul Equalizer coopère, mais cela devrait être suffisant.
la source
list
objets à tout moment. De plus, selon les règles anciennes et mises à jour, les copies parfaites d'un bot ne sont pas des soumissions valides, donc le nombre autorisé d'instances de ce bot en cours d'exécution est de 1.Contraire
L'empereur de jade a toujours raison, il implémente donc la fonction de demande de l'empereur de jade comme sa propre fonction de réponse lorsqu'il a besoin de plus de 2 réponses. Pour seulement 1 réponse, il répond
true
(chances décentes d'être correctes) et pour 2, il répondtrue,false
(cette réponse passe "au moins la moitié" des questions trois quiz sur quatre possibles, mieux que de choisir au hasard).Utilise une logique similaire dans sa mise à jour en ce qui concerne la façon dont il modifie son modèle de demande, mais sa logique de demande est similaire à celle de l'empereur de jade, juste avec un poids différent. Fluctue entre des valeurs plus élevées
true
et des valeurs plus élevéesfalse
lorsque trop de candidats obtiennent un score suffisamment élevé pour réussir.la source
true, false
si l'examen l'estfalse, true
?answer
contiennent des erreurs de syntaxe et de nom -true
etfalse
devraient êtreTrue
etFalse
, et lesif
s manquent:
à la finupdate
.pass
est une commande NOP, vous pouvez la supprimer. (Le commentaire derrière c'est juste un jeu de mots pour l'ivrogne sur lequel vous avez copié.) De plus, vous utilisez implicitement les modulesmath
etrandom
mais ne déclarez pas que vous les avez importés. Je l'ai réécrit dans mon dossier de concours avecnp.copysign
etnp.random.uniform
cela devrait faire la même chose.Marx
Voici le robot Marx. Il pense qu'au lieu d'une bureaucratie, nous devrions avoir un système communiste. Pour aider à atteindre cet objectif, il donne des quiz plus difficiles aux bots de rang supérieur. Il donne également plus de réponses aléatoires aux quiz des bots plus élevés, car ils sont probablement plus intelligents, car ils sont plus élevés.
la source