Dicas para bots King of the Hill

12

Que dicas gerais você tem para criar um bot para participar de um desafio no King of the Hill? Quais estratégias você usa para considerar o desafio de criar seu bot? Quais estruturas de dados você considera mais úteis?

Poste uma dica por resposta.

mbomb007
fonte
16
Eu sinto que isso depende muito do problema específico.
Fund Monica's Lawsuit
@QPaysTaxes Modelei isso diretamente após muitas das outras perguntas de dicas. Existe uma maneira de corrigir esta questão para ser melhor? Além disso, essas perguntas de dicas mais antigas também precisam ser corrigidas?
mbomb007
As perguntas mais antigas sobre dicas são baseadas em idiomas, pelo que sei, o que significa que as dicas são universais, mas você pode não usá-las. Esta pergunta é mais análoga a "Dicas para os desafios do Code Golf" - onde depende inteiramente do desafio. No entanto, como as respostas abaixo provam, existem algumas coisas universais. Estou em conflito.
Fund Monica's Lawsuit
2
Eu acho que isso depende tanto sobre as questões específicas como "dicas para golfe na (lang)", porque você usar um monte de idioma diferente apresenta em diferentes desafios de qualquer maneira
Destrutível Lemon

Respostas:

4

Encontrar Nash Equilibria

Este é um conceito muito importante quando o KOTH envolve um conjunto relativamente simples de decisões, envolve apenas alguns jogadores (normalmente 2) e é determinístico. Um equilíbrio de Nash descreve uma posição de "impasse": se os dois jogadores decidiram suas duas estratégias, então os dois jogadores estão efetivamente presos nessas posições: qualquer um dos jogadores que muda de estratégia simplesmente cria vulnerabilidades adicionais.

Exemplos de jogos em que os equilíbrios de Nash são importantes são:

  • Pedra-Papel-Tesoura (-Lizard-Spock), na qual uma estratégia "imbatível" é jogada aleatória
  • Morra , que tem um "espectro" de equilíbrios. Peter Taylor escreveu um bom exemplo em sua resposta aqui .
  • Dilema do Prisioneiro, um jogo cooperativo notável por ter um impasse de "todo mundo perde"

Como encontrar um equilíbrio

Encontrar um equilíbrio é realmente muito simples para a maioria dos jogos simples e muitas vezes é bastante intuitivo. Uma tonelada de detalhes sobre os vários métodos pode ser encontrada na internet. O conceito básico, normalmente aplicável, é criar uma lista de estratégias possíveis que os dois jogadores possam usar (as opções fornecidas pelo jogo). Se uma estratégia é "dominada" por outra, essa estratégia pode ser removida da lista e o processo é repetido. Por "dominação", quero dizer que, se a estratégia A sempre der um resultado igual ou melhor que a estratégia B, contra todas as estratégias oponentes restantes, a estratégia B poderá ser removida da lista.

Exemplo: Pedra-Papel-Tesoura

O RPS tem algo chamado equilíbrio "misto", significando que uma distribuição está envolvida. Em vez de executar o mesmo movimento repetidamente (o que levará à derrota rápida), o equilíbrio é jogar 1/3 de pedra, 1/3 de papel e 1/3 de tesoura em uma distribuição aleatória. Se eu jogar aleatoriamente, não há nada que meu oponente possa fazer para me influenciar, ponto final. Se meu oponente optar por não jogar aleatoriamente, isso cria apenas uma vulnerabilidade da parte dele.

Jogos com equilíbrio misto são provavelmente os mais comuns no PPCG, pois podem assumir várias formas (o único jogo interessante que consigo pensar com um equilíbrio puro é o dilema do prisioneiro). Devo observar que o equilíbrio misto não precisa ser uniformemente aleatório , simplesmente algo diferente de fazer o mesmo movimento todas as vezes.

Usando esta informação

O equilíbrio de Nash de um jogo geralmente representa a "linha de base" a partir da qual você deve tentar operar. No RPS, jogar aleatoriamente garante um ponto final no meio do pelotão. Para ir para o topo, você precisa começar a identificar os pontos fracos de outros jogadores.

Para fazer isso, você deve manter o equilíbrio quando não tiver certeza das fraquezas do oponente. Depois que essas fraquezas forem identificadas (você detectou que seu oponente não está em equilíbrio), precisará sair suavemente do equilíbrio para tirar vantagem do seu oponente. Esta ação, por sua vez, cria fraquezas da sua parte. Você deve então detectar quando o seu oponente está mudando sua estratégia, para poder parar o ataque e retomar o jogo aleatório.

Detectando variação do equilíbrio

Isso é bem difícil, e eu não sou especialista. As variações podem ocorrer de várias formas:

  • Favorecer algumas opções acima / abaixo de outras por nenhuma razão, como um jogador de RPS que toca rock duas vezes mais que uma tesoura ou que evita jogar papel. Algumas estatísticas relativamente simples podem detectar isso.
  • Basear um movimento atual em movimentos anteriores, em algum padrão previsível. Isso inclui copiar gatos, "supera o que supera o seu último movimento", bots ou "andar de bicicleta". Isso requer lógica adicional para detectar, pois a distribuição geral de movimentos pode ser distribuída igualmente, mesmo que os movimentos não sejam aleatórios. Você deve tentar registrar os movimentos e encontrar correlações como "o movimento que eu fiz 2 turnos atrás e o movimento que meu oponente fez agora" e "o movimento que ele fez 1 turno atrás e o movimento que ele fez agora" etc.
  • Bots cuja distribuição de movimento é baseada na sua. A vulnerabilidade nestes bots muitas vezes não é criado (em uma quantidade mensurável) até depois você tem você mesmo variou de uma distribuição aleatória. Geralmente, seu próprio bot se enquadra nessa categoria.
PhiNotPi
fonte
3

Seja específico sobre os requisitos para executar seu bot

Os bots podem ser escritos em uma variedade de idiomas (e versões desses idiomas), para ajudar a todos quando você:

  1. Teste-o no ambiente especificado pelo OP (ou o mais próximo possível).
  2. Teste-o em vários outros ambientes, se possível (para ajudar outras pessoas que desejam executá-lo).
  3. Seja específico sobre o idioma e a versão que você usa e explique como executar seu bot.

Como um bônus: se você estiver usando um idioma menos conhecido, crie um link para onde as pessoas podem baixar o binário / fonte para executá-lo.

Mwr247
fonte
2

Se for baseado em equipe, trabalhe junto com sua equipe

Embora você possa escrever um bot que trabalha sozinho para concluir tarefas para ajudar seu time, há uma vantagem muito maior quando você coordena o jogo dentro e fora do jogo. Um excelente exemplo disso pode ser visto em Red vs Blue - Pixel Team Battlebots .

Durante o desenvolvimento, as equipes puderam conversar e discutir como coordenar seus bots para funcionar melhor do que sozinhos. Embora tecnicamente o mesmo bot, o SphiNotPi3000 tenha sido escrito para funcionar em conjunto com outro, e foi capaz de se mover de maneira a responder pelas fraquezas que enfrentaria se fosse por si só. O resultado final foi que eles foram capazes de dominar quase completamente o campo de batalha, mesmo quando eram apenas os dois contra o outro time inteiro .

Portanto, fora do jogo, planeje e coordene com seus colegas de equipe as estratégias a serem abordadas. Talvez alguém tenha um bot que varre o mapa na diagonal? Faça o seu escanear horizontalmente (apenas um exemplo). Dentro do jogo, se o desafio permitir a comunicação da equipe, tire vantagem disso. No jogo dos robôs de batalha, por exemplo, você pode enviar uma mensagem para seus colegas de equipe sobre a posição dos robôs fora do campo de visão deles e, em seguida, incentivá-los a escrever seus robôs de maneira compatível para usar esses sinais.

Mwr247
fonte
2

Use uma meta-estratégia

Para quase todas as estratégias inteligentes, há outra estratégia que a supera: por exemplo, seu oponente pode usar exatamente o mesmo raciocínio que você para antecipar seu próximo movimento e depois combatê-lo. Agora você pode tentar adivinhar seu oponente novamente, mas é difícil saber quando parar .

Outro problema é que uma estratégia que é boa em adivinhar um oponente inteligente pode estar longe de ser ideal contra oponentes mais simples.

Como você pode resolver isso? Você deixa seu bot decidir rapidamente qual estratégia usar!

Para isso, você começa dando ao seu bot um repertório de estratégias diferentes. Então, antes de cada movimento, seu bot examina o histórico gravado do jogo até agora e avalia como essas diferentes estratégias teriam se saído. Em seguida, mostra o que teria sido mais bem sucedido.

Incluir estratégias que são fortes em primeiro lugar ajudará a dar ao seu bot boas opções para escolher. Mas você também deve incluir alguns realmente simples, porque eles costumam funcionar melhor contra oponentes idiotas.

Você pode considerar um viés em algumas estratégias, tanto para evitar o ajuste excessivo (por exemplo, tentando superar um padrão em que o oponente age apenas aleatoriamente) ou favorecer certas estratégias no início, quando ainda não há muita informação.

Obviamente, essa abordagem funcionará apenas para certos tipos de desafios do tipo rei da colina. Foi muito bom para mim em uma partida de Pedra, Papel, Tesoura, Lagarto e Spock . Em outros jogos, pode ser quase impossível avaliar como uma determinada estratégia se sairia se não fosse realmente jogada.

Uma forma extrema dessa meta abordagem (que beira a trapaça) seria incluir o comportamento conhecido de todos os outros bots em seu próprio bot, para que ele possa antecipar perfeitamente seus movimentos.

Emil
fonte
A inclusão do comportamento conhecido de todos os outros bots no seu próprio bot não se limita apenas a trapacear, é trapacear. Estou bastante certo de que é uma brecha proibida.
mbomb007