Na China Imperial, as fileiras da sociedade não eram decididas por nascimento ou riqueza, mas pela capacidade de uma pessoa se destacar nos Exames Imperiais. O Imperador Jade, governante divino dos Céus, pediu que todos os seus súditos fossem examinados para determinar seu valor e a quem, em seguida, atribuir o mandato divino para governar a China.
Regras da burocracia:
- A Burocracia Divina consiste em classificações com número inteiro não negativas, começando com 0. Cada membro (bot) da burocracia pertence a uma classificação. Cada classificação pode conter muitos membros arbitrários, mas não pode estar vazia, a menos que todos os níveis acima estejam vazios
- No início do jogo, todos os membros têm classificação 0
- A cada turno, cada membro da burocracia deve responder a um exame. O exame consiste em adivinhar corretamente os valores booleanos de uma lista. O comprimento da lista é o número da classificação acima do membro.
- As perguntas do exame são preparadas por um membro aleatório da classificação acima. Os membros do mais alto nível recebem suas perguntas diretamente do
JadeEmperor
(veja abaixo) - Um membro que pontua pelo menos 50% em seu exame é elegível para Promoção. Um membro com pontuação inferior a 50% no exame é elegível para o Demotion.
- Um membro elegível para o Demotion tem sua classificação reduzida em um somente se houver um membro qualificado para Promoção na classificação abaixo para ocupar o seu lugar.
- Todos os membros elegíveis para a promoção têm sua classificação aumentada em um, desde que isso não a deixe vazia.
- Se nem todos os membros elegíveis puderem ser rebaixados ou promovidos, a preferência será para os de menor valor (para rebaixamento). pontuação mais alta (para Promoção). Os laços são quebrados aleatoriamente.
- A classificação de um membro só pode mudar em no máximo 1 a cada turno.
Regras do jogo:
- Cada bot receberá um ID aleatoriamente no início do jogo, que não será alterado ao longo do curso. A
JadeEmperor
tem o ID-1, todos os outros têm identificações não-negativos consecutivos, começando com 0. - Todos os bots competem ao mesmo tempo
- O jogo dura 100 turnos, a pontuação do bot é a sua classificação média ao longo desse tempo.
- A pontuação total é adquirida executando 1000 jogos e calculando a média dos resultados.
- Cada bot é uma classe Python 3 implementando as quatro funções a seguir:
ask(self,n,ID)
, que faz um exame retornando umlist
dos booleanos de comprimento n. ID é o ID do bot que precisa adivinhar essa lista.ask()
pode ser chamado várias vezes durante uma única rodada para qualquer bot, mas também não.answer(self,n,ID)
, que é uma tentativa de responder a um exame retornando umlist
dos booleanos de comprimento n. ID é o ID do bot queask()
gerou o exame.answer()
é chamado exatamente uma vez por rodada para cada bot.update(self,rankList,ownExam,otherExams)
é chamado assim que o Controlador executa todas as Pro e Demotions. Seus argumentos são: Uma lista de números inteiros, listando todas as classificações por ID de todos os bots; uma tupla, composta por duas listas, primeiro as perguntas do exame, depois as respostas que o bot deu (caso se tenha esquecido); em seguida, uma lista de tuplas, consistindo igualmente em pares de respostas para exames, desta vez para todos os exames que o bot distribuiu.__init__(self, ID, n)
passa ao bot seu próprio ID e o número de bots concorrentes.
- As classes têm permissão para implementar outras funções para uso privado
- Definir explicitamente outras variáveis e usá-las para armazenar dados sobre exames anteriores é explicitamente permitido.
- Os meta-efeitos de programação são proibidos, significando qualquer tentativa de acessar diretamente o código de outros bots, o código do Controlador, causando Exceções ou similares. Este é um concurso de estratégias para os exames, não de hackers de código.
- Bots que tentam ajudar um ao outro são explicitamente permitidos, desde que não o façam por meio de efeitos, mas apenas pelas informações passadas
update()
- Outros idiomas são permitidos apenas no caso de serem facilmente convertidos para Python 3.
- O numpy da biblioteca será importado como
np
. A versão é 1.6.5, o que significa que usa a antiga biblioteca aleatória. Se você possui o numpy 1.7, as funções antigas estão disponíveis emnumpy.random.mtrand
para teste. Lembre-se de remover o mtrand para envio. - Se um bot causa uma exceção durante o tempo de execução, é desqualificado. Qualquer bot cujo código seja tão ofuscado que seja impossível dizer se gera uma lista de comprimento n quando
ask()
ouanswer()
é chamado também será desqualificado preventivamente. Um bot que me obriga a copiar cópias em profundidade recebe -1 na pontuação. - Os nomes das classes precisam ser exclusivos
- São permitidos vários bots por pessoa, mas apenas a versão mais recente será obtida dos bots atualizados iterativamente.
- Como parece haver alguma confusão sobre a semelhança do bot:
- Você não tem permissão para publicar uma cópia de outro bot. Essa é a única brecha padrão que realmente se aplica a esse desafio.
- Você tem permissão para compartilhar código com outros bots, incluindo bots de outras pessoas.
- Você não tem permissão para enviar um bot que difere de outro apenas por uma alteração trivial na estratégia (como uma alteração na semente para a geração de perguntas), a menos que você possa provar que o número desses bots de cópia carbono é o mínimo necessário para obter êxito. promulgação de sua estratégia (geralmente serão dois bots para uma cooperação).
Bots de exemplo:
O JadeEmperor
é sempre parte do jogo, mas não compete; ele serve como gerador para exames de bots de classificação mais alta. Seus exames são aleatórios, mas não uniformes, para permitir aos robôs inteligentes uma maneira de avançar.
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]
O Bêbado produz exames e respostas de forma completamente aleatória. Ele fará parte do jogo.
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
O plágio apenas copia os exames anteriores. Ele também fará parte do jogo.
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]
Código do controlador disponível aqui . Para testar, você pode colocar sua própria classe em um arquivo Contestants.py na mesma pasta e eles serão importados.
O Chatroom pode ser encontrado aqui .
Os exames começam!
Pontuação atual, em maior precisão (10.000 execuções) para 20 de outubro:
Os concursos serão realizados com cada nova inscrição no futuro próximo.
fonte
ID, n
do outro métodon, ID
?Respostas:
Santayana
Quem não se lembra do passado é condenado a repeti-lo. Portanto, tomamos nossas decisões com base em como os outros agiram no passado, respondendo com base na resposta que o solicitante normalmente espera de nós em um determinado índice e pedindo a resposta que eles nos deram com menos frequência em um determinado índice .
fonte
Studious Bot
Este bot estuda para testes! Ele tenta encontrar padrões em testes realizados por vários bots e age de acordo.
Até o momento, esse bot supera todos os outros bots que eu poderia trabalhar no meu computador, exceto Alpha, Beta e Gamma (que foram programados para trabalhar juntos). O bot não faz uso do fato de que a formação de equipes é permitida, porque eu senti que era um pouco como trapaça e um pouco suja. Analisando isso, a formação de equipes parece ser bastante eficaz.
O bot tenta reconhecer quando as respostas aos testes são aleatórias e, em resposta, coincide com a esperança de obter uma média de 50% nos testes.
O bot também tenta reconhecer quando um bot simplesmente inverteu suas respostas para expulsar outros bots que estão tentando prever seu comportamento, no entanto, eu não o programei para agir especificamente sobre isso ainda.
Anotei o código com alguns comentários para facilitar a leitura
fonte
Conde Oracular
Esse bot usa um algoritmo que calcula a média dos exames de todos os outros robôs em funcionamento (dado o número da rodada e algumas heurísticas terríveis) para decidir o que cada outro robô definirá como exame.
O Conde faz seus exames usando um hash MD5. Suas perguntas e respostas são, portanto, determinísticas. Ele ignora a maioria das informações, perguntando e respondendo exatamente as mesmas seqüências de booleanos, faça chuva ou faça sol, inclusive contra o Jade Emporer.
fonte
YinYang
Responde a todos
True
ou a todosFalse
, exceto por um índice escolhido aleatoriamente para ser o oposto. Pergunta o oposto do que responde. Troca aleatoriamente para afastar os adversários.Wi Qe Lu (Switcheroo)
Responde e pergunta aleatoriamente na primeira rodada. Depois, ele usa as respostas do exame anterior e muda uma pergunta se um número acima da média dos concorrentes acertar.
fonte
Um bot meu:
Thomas
Um viajante de uma terra longínqua tem algumas idéias perigosas sobre os resultados passados serem indicativos de desempenho futuro. Ele os usa para manter outros bots baixos, a menos que isso sufoque seu próprio avanço.
fonte
Alfa
Leia o bate-papo antes da votação. Esses bots não violam nenhuma regra. O PO está até incentivando bots cooperantes.
Alpha está formando uma equipe junto com o Beta. Ambos estão usando um conjunto predefinido de exames para se ajudarem a subir na hierarquia. Além disso, ambos estão aproveitando os bots usando os mesmos exames repetidamente.
fonte
Equalizador
Todos devem ser iguais (com nada disso bobagem do imperador bobo), para oferecer o máximo de mobilidade social possível. Facilite as perguntas (a resposta é sempre verdadeira) para que as pessoas possam ter sucesso.
fonte
Beta
Leia o bate-papo antes da votação. Esses bots não violam nenhuma regra. O PO está até incentivando bots cooperantes.
Beta está formando uma equipe junto com Alpha. Ambos estão usando um conjunto predefinido de exames para se ajudarem a subir na hierarquia. Além disso, ambos estão aproveitando os bots usando os mesmos exames repetidamente.
fonte
Gama
Leia o bate-papo antes da votação. Esses bots não violam nenhuma regra. O PO está até incentivando bots cooperantes.
Gamma descobriu os planos de Alpha e Beta e está tentando tirar vantagem de ambos disfarçando-se de um deles.
fonte
TitForTat
Faz perguntas fáceis se você fez perguntas fáceis no passado. Se você nunca fez um exame, o padrão é fazer perguntas fáceis.
Além disso, não confia em quem faz perguntas difíceis e fornecerá respostas imprevisíveis.
Este bot funciona bem se outros bots cooperarem com ele. Atualmente, apenas o Equalizer coopera, mas espero que isso seja suficiente.
fonte
list
objetos o tempo todo. Além disso, de acordo com as regras antigas e atualizadas, cópias perfeitas de um bot não são envios válidos; portanto, o número permitido de instâncias desse bot em execução é 1. #Contrário
O Imperador de Jade está sempre certo, por isso implementa a função de pedir do Imperador de Jade como sua própria função de resposta quando precisa de mais de 2 respostas. Para apenas 1 resposta, ela responde
true
(chances decentes de estar correta) e para 2, respondetrue,false
(essa resposta passa "pelo menos metade" das perguntas, três em cada quatro possíveis questionários, melhor do que escolher aleatoriamente).Usa lógica semelhante em sua atualização com relação à forma como altera seu padrão de pergunta, mas sua lógica de pergunta é semelhante à do imperador de Jade, apenas com um peso diferente. Flutua entre valores mais altos de
true
com valores mais altos defalse
quando muitos candidatos obtêm uma pontuação alta o suficiente para passar.fonte
true, false
falha se o exame éfalse, true
?answer
têm erros de sintaxe e nome -true
efalse
devem serTrue
eFalse
, eif
s estão faltando:
s no final #update
.pass
é um comando NOP, você pode excluí-lo. (O comentário por trás disso é apenas um trocadilho com o Drunkard que você copiou.) Além disso, você está usando implicitamentemath
erandom
modules, mas não declarou que os importou. Eu o reescrevi no meu arquivo de concursonp.copysign
enp.random.uniform
isso deve fazer a mesma coisa.Marx
Este é o bot de Marx. Ele acredita que, em vez de uma burocracia, deveríamos ter um sistema comunista. Para ajudar a alcançar esse objetivo, oferece testes mais difíceis a bots de classificação mais alta. Também fornece respostas mais aleatórias a questionários de bots mais altos, porque provavelmente são mais inteligentes, porque são mais altos.
fonte