ÉTAT DU DÉFI: OUVERT
Commentez, ouvrez un PR ou criez-moi si je manque votre bot.
Le dilemme du prisonnier ... avec trois choix. Fou, hein?
Voici notre matrice de gains. Joueur A à gauche, B en haut
A,B| C | N | D
---|---|---|---
C |3,3|4,1|0,5
N |1,4|2,2|3,2
D |5,0|2,3|1,1
La matrice des gains est conçue de sorte qu'il est préférable que les deux joueurs coopèrent toujours, mais vous pouvez gagner (généralement) en choisissant Neutre ou Défection.
Voici quelques exemples de robots (concurrents).
# turns out if you don't actually have to implement __init__(). TIL!
class AllC:
def round(self, _): return "C"
class AllN:
def round(self, _): return "N"
class AllD:
def round(self, _): return "D"
class RandomBot:
def round(self, _): return random.choice(["C", "N", "D"])
# Actually using an identically-behaving "FastGrudger".
class Grudger:
def __init__(self):
self.history = []
def round(self, last):
if(last):
self.history.append(last)
if(self.history.count("D") > 0):
return "D"
return "C"
class TitForTat:
def round(self, last):
if(last == "D"):
return "D"
return "C"
Votre bot est une classe Python3. Une nouvelle instance est créée pour chaque partie, et round()
est appelée à chaque tour, avec le choix de votre adversaire lors du dernier tour (ou Aucun, s'il s'agit du premier tour)
Il y a une prime de 50 représentants pour le gagnant en un mois environ.
Détails
- Chaque bot joue tous les autres bots (1v1), y compris lui-même, dans les rounds [SUPPRIMÉ].
- Failles standard interdites.
- Ne jouez avec rien en dehors de votre classe ou d'autres manigances sournoises.
- Vous pouvez soumettre jusqu'à cinq bots.
- Oui, vous pouvez implémenter une poignée de main.
- Toute réponse autre que
C
,N
ouD
sera considérée comme silencieuseN
. - Les points de chaque bot de chaque partie jouée seront totalisés et comparés.
Manette
Autres langues
Je jetterai ensemble une API si quelqu'un en a besoin.
Notes: 2018-11-27
27 bots, 729 games.
name | avg. score/round
----------------|-------------------
PatternFinder | 3.152
DirichletDice2 | 3.019
EvaluaterBot | 2.971
Ensemble | 2.800
DirichletDice | 2.763
Shifting | 2.737
FastGrudger | 2.632
Nash2 | 2.574
HistoricAverage | 2.552
LastOptimalBot | 2.532
Number6 | 2.531
HandshakeBot | 2.458
OldTitForTat | 2.411
WeightedAverage | 2.403
TitForTat | 2.328
AllD | 2.272
Tetragram | 2.256
Nash | 2.193
Jade | 2.186
Useless | 2.140
RandomBot | 2.018
CopyCat | 1.902
TatForTit | 1.891
NeverCOOP | 1.710
AllC | 1.565
AllN | 1.446
Kevin | 1.322
while len(botlist) > 1:
avec botlist.remove(lowest_scoring_bot)
au bas de la boucle, vous obtenez un tournoi d'élimination avec des résultats intéressants.