ESTADO DO DESAFIO: ABERTO
Comente, abra um PR ou grite comigo se estiver sentindo falta do seu bot.
O dilema do prisioneiro ... com três opções. Louco, hein?
Aqui está a nossa matriz de pagamento. Jogador A à esquerda, B na parte superior
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
A matriz de pagamento é projetada para que seja melhor os dois jogadores sempre cooperarem, mas você pode ganhar (geralmente) escolhendo Neutro ou Deserção.
Aqui estão alguns exemplos de bots (concorrentes).
# 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"
Seu bot é uma classe Python3. Uma nova instância é criada para cada jogo e round()
é chamada a cada rodada, com a escolha do seu oponente da última rodada (ou Nenhuma, se for a primeira rodada)
Há uma recompensa de 50 representantes para o vencedor em um mês.
Específicos
- Todo bot joga todos os outros bot (1v1), inclusive ele mesmo, nas rodadas [REDACTED].
- Falhas padrão não permitidas.
- Não mexa com nada fora da sua classe ou outras desvantagens ocultas.
- Você pode enviar até cinco bots.
- Sim, você pode implementar o aperto de mão.
- Qualquer resposta que não
C
,N
ouD
será silenciosamente tomado comoN
. - Os pontos de cada bot de cada jogo que eles jogam serão totalizados e comparados.
Controlador
Outras línguas
Vou montar uma API, se alguém precisar.
Pontuações: 27/11/2018
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:
com botlist.remove(lowest_scoring_bot)
a parte inferior do loop, você começa um torneio de eliminação com resultados interessantes.