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.
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.
Respostas:
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:
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:
Os bots podem ser escritos em uma variedade de idiomas (e versões desses idiomas), para ajudar a todos quando você:
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.
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.
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.