Inteligência artificial no Pedra-Papel-Tesoura

A seguir, ilustração de como criar alguns algoritmos para o jogo Pedra-Papel-Tesoura.

Evito usar o termo “Inteligência artificial”, por ser muito amplo, englobando desde técnicas conhecidas há décadas até descobertas bem mais recentes. Pode-se dizer que as técnicas a seguir são parte do toolkit de inteligência artificial.

1) O modo mais simples é fazer o computador jogar aleatoriamente. A função randbetween(1,3) fornece um número aleatório entre 1, 2 e 3. Em outra parte do código, há uma decofidicação de 1 para Pedra, 2 para Papel e 3 para Tesoura.

    Application.WorksheetFunction.RandBetween(1, 3)

2) Uma forma também simples é usar o histórico do jogador para predizer qual será a sua jogada, e assim tentar vencer.

A ideia é ir armazenando todas as jogadas do oponente. Digamos que, em dez jogadas, o oponente tenha jogado:

Pedra: 5

Papel: 3

Tesoura: 2

O algoritmo vai estimar que a jogada do adversário seja a mais frequente, Pedra, e então vai jogar Papel (que ganha de Pedra).

Há formas mais complicadas, como contar combinações de jogadas:

Pedra e Pedra:

Pedra e Papel:

Pedra e Tesoura:

Papel e Pedra:

Papel e Papel:

Papel e Tesoura:

Tesoura e Pedra:

Tesoura e Papel:

Tesoura e Tesoura:

A lógica é a mesma.

Há inúmeras outras técnicas, como treinar uma rede neural para predizer a jogada do adversário – mas não é muito simples fazer no Excel, nem vai dar um ganho tão melhor que as técnicas acima.

3) O desafio mesmo é vencer o computador no método “Trapaceiro”. Quero ver quem consegue!

Teste: O problema de Josephus

O problema de Josephus é um jogo com dois parâmetros: número de participantes e distância entre eliminações.

Diz a lenda que um certo Flavius Josephus, durante uma guerra, se encontrava entre um bando de 41 judeus rebeldes encurralados pelos romanos em uma caverna.

Os rebeldes formam um círculo e começam a partir de certo ponto a executar a terceira pessoa numa direção.
Sabe-se que Josephus sobreviveu. Em que posição ele estava para ser o último?

Por exemplo, para 7 participantes e eliminar a cada 3:

Na primeira rodada, elimina o número 3.

Pulando mais três, eliminar o número 6.

Depois, é a vez do número 2.

Depois, o número 7 – note que o 3 e o 6 já tinham sido eliminados.

Na sequência, o 5 e o 1.

No final das contas, o número 4 é o vencedor. Neste jogo, Josephus deveria ficar na posição 4 para sobreviver!

Desafio: criar uma função Josephus(n, p), que receba o número de participantes (n) e a distância a eliminar (p), e retorne qual a posição vencedora.

A resposta foi publicada aqui.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/