AI News, Artificial Intelligence in Motion

Artificial Intelligence in Motion

RandomPlayer é um jogador randômico, aposta na sorte e foi utilizado neste primeiro exemplo do jogo da velha.

A idéia é que quando for o turno do jogador 1 (telefone) realizar a sua jogada, uma árvore seja criada com o nó raiz sendo seu nível atual (ply1), ou seja o estado do tabuleiro antes de realizar a sua jogada.

Esse padrão continua alternadamente entre movimentos possíveis do jogador1 e jogador2 até chegar em uma configuração do tabuleiro que há uma vitória de um dos jogadores ou há um empate (não é mais possível realizar jogadas no tabuleiro).

Isto significa que até este jogo pode construir uma árvore de jogadas um pouco grande para ser armazenada na memória ou para ser totalmente percorrida em um tempo razoável, especialmente quando estamos tentando implementar um jogo para um aparelho móvel que não possui o mesmo poder de processamento e memória que um PC.

if score >= bestScore: bestScore = score alpha = bestScore if alpha >= beta: return alpha return bestScore def minValue(self,board,alpha,beta): #Checa se o jogo foi finalizado (Vitória ou empate).

if score <= bestScore: bestScore = score beta = score if beta <= alpha: return beta return bestScore def phoneDecision(self): #Testa todas jogadas possiveis.

if score >= bestScore: move = possible_move bestScore = score alpha = score if alpha >= beta: break else: #Como so existe uma única jogada, esta será a jogada do telefone.

move = possible_moves[0] return move (...) Com apenas algumas linhas de código adicionais, nós aumentamos a eficiência do algoritmo minimax com a inclusão da variação de cortes alpha-beta.

No entanto, está provado que no melhor caso (quando a jogada mais forte é considerada primeiro), o algoritmo alpha-beta terá apenas que avaliar o nó-pai do ramo de folhas das jogadas terminais, poupando assim tempo de processamento e memória.

A próxima otimização é limitar a profundidade da busca na árvore e definir alguma maneira de avaliar um nó se o mesmo não for o último da árvore (folha) que representa o estado do fim do jogo.

Consiste apenas de incluir um mecanismo que mantenha na memória o valor do nível (ply) em que se está na busca na árvore e que possa ser comparado com um valor armazenado em uma variável global (maxDepth) que define o quão profundo você pode descer pela árvore.

self.maxDepth = 3 (...) def calculateChances(self,board,turn): #Dado o tabuleiro suposto (new_game_state), calcula quantas chances #o jogador selecionado ainda tem para ganhar e retorna seu valor.

winning_rows = eval(repr(self.end_game_state)) for i in range(3): for j in range(3): if board[i][j] != 0 and board[i][j] != turn: forbidden_play = (i,j) list_remove = list() for row in winning_rows: if forbidden_play in row: list_remove.append(row) for chance in list_remove: winning_rows.remove(chance) return len(winning_rows) def judge(self,board): #Verifica o estado final do tabuleiro.

#(Vitoria: +10,Derrota: -10,Empate: 0 # Nao finalizada: [Número de 3-sequencias abertas para Vitoria] - [Numero de 3-sequencias abertas para derrota]) winning_rows = list(self.end_game_state) winner = None for row in winning_rows: row_win = [board[x][y] for x,y in row] if row_win == [1,1,1]: winner = 1 break elif row_win == [2,2,2]: winner = 2 break if winner == 1: return 10 if winner == None: #Sem mais jogadas disponiveis, significa que o jogo empatou.

return self.calculateChances(board,1) - self.calculateChances(board,2) return -10 def maxValue(self,board,alpha,beta,depth): depth+=1 #Checa se o jogo foi finalizado (Vitória ou empate) ou se está na profundidade máxima de busca.

if score >= bestScore: bestScore = score alpha = bestScore if alpha >= beta: return alpha return bestScore def minValue(self,board,alpha,beta,depth): depth +=1 #Checa se o jogo foi finalizado (Vitória ou empate) ou se está na profundidade máxima de busca.

if score <= bestScore: bestScore = score beta = score if beta <= alpha: return beta return bestScore def phoneDecision(self): #Testa todas jogadas possiveis.

if score >= bestScore: move = possible_move bestScore = score alpha = score if alpha >= beta: break else: #Como so existe uma única jogada, esta será a jogada do telefone.

A função aplicada neste jogo da velha retorna valores de -10 a 10, sendo que +10 significa vitória do telefone, - 10 derrota do telefone e 0 em caso de empate para as condições em que a jogada resultar no fim do jogo.

Para os outros casos, em que não se finalizou o jogo, a função calcula quantas chances o jogador1 (fone) tem de completar a sequência de símbolos para a vencer e quantas chances o jogador2 (humano) tem de completar a sua sequência.

Isso Que Eu Chamo de Jogada Inteligente

TOP 10 MELHORES JOGADAS DE SINUCA DA HISTÓRIA 😱

10 maiores jogadas de sinuca do mundo! Vamos apoia com um mega like pessoal? Muito obrigado pelo o acesso e até a próxima... play fatos curiosos ...

Cadela foi jogada pra fora de casa com seus filhotes mas seu resgate é emocionante

Curta nossa página no FACEBOOK ▻ CANAL ERA UMA VEZ Se inscreva▻ Canal Era uma vez. Coletânea .

Jogadas LENDÁRIAS No FUTSAL

Deixe o LIKE e INSCREVA-SE Obrigado Por Assistir! Se você gostou por favor, INSCREVA-SE ; Título: Jogadas LENDÁRIAS No FUTSAL ..

Jogadas LENDÁRIAS do Futebol

Youtube: ------------------------------------------------------------------ Facebook: ---------------------------------------------.

URGENTE: ANA AMÉLIA DENÚNCIA JOGADA SUJA DA ESQUERDA EM FORMAR CPI PARA ACABAR COM A LAVA JATO

IMPORTANTE QUE LEIA A DESCRIÇÃO ♕ ♕ ♕ ➤INSCREVA-SE E AJUDE O CANAL CLICANDO AQUI ➤➤ ◅◅e ATIVE O DAS ..

AQUELAS JOGADAS QUE SÓ ACONTECEM NO FUTSAL

O Vídeo de Hoje Contem As Melhores Jogadas do Futsal ✓ Se Inscreva no Canal e Deixe Seu Like ✓ Instagram - Queuvisom Musica do Vídeo: Levianth & Axol ...

06 - XEQUE MATE EM 2 JOGADAS. O MATE MAIS RÁPIDO DO XADREZ.

Link para quem quer comprar um jogo de xadrez igual ao meu: Xeque Mate em 2 Jogadas. O Xeque Mate mais rápido do ..

Jogada da Semana - Poker Stars

Confira a Jogada da Semana do Poker Stars: Top pair com As de kicker x Over pair. Veja quem levou!