E aí Olá seja muito bem-vindo e bem-vinda a universo programado se você está chegando no canal agora eu me chamo Victor Dias foram gravador eu estou com uns arames de consumir açúcar nesse vídeo a gente viveu uma inteligência artificial aprendendo a jogar aquele clássico da humanidade o famoso jogo da cobrinha e Mano o que ela fez no final é um tanto quanto sem mais delongas não Bora prejuízo o primeiro como sempre a gente tem que programar o jogo para isso a gente vai precisar de alguns ingredientes uma matriz um quadrado vermelho um quadrado azul e
um quadrado Verde Mistura tudo e está pronto Diogo estou zuando Tô zoando quem dera fosse simples assim se ignora galera ele tá piadista hoje Pera aí que ainda tá faltando uma coisa nessa boleira aí agora sim para quem não conhece jogo eu vou explicar rapidamente ele era famoso nesse celulares da Nokia muito tempo atrás basicamente o personagem uma cobrinha que só pode virar para esquerda para direita ou seguir em frente o objetivo é coletar as comidas o cenário sem bater nas paredes ou no próprio corpo elas aparecem em posições aleatórias no tabuleiro e cada comida
que você pega aumenta o tamanho do personagem deixando o jogo mais difícil esse joguinho consegue ser extremamente simples e complicado ao mesmo tempo criar um algoritmo para dizer a ele não é difícil basta a gente programar esse movimento de varredura do Tabuleiro sempre deixando um caminho para voltar e fechar um ciclo desse jeito ela vai é a comida onde quer que ela esteja com sem por cento de certeza de que não vai corrigir com nada e como a máquina tem paciência infinita para ela pouco importa se o caminho é curto ou não ela vai ficar
fazendo isso até zerar na verdade qualquer algoritmo que faça esse tipo de ciclo no tabuleiro vai conseguir ganhar o jogo como por exemplo essa espiral que também passa por todos os pontos tabuleiro e fecham 5 e essa estratégia tem o nome ela se chama ciclo a miltoniano é um ciclo porque o caminho dela termina no mesmo lugar onde começa e é a miltoniano porque ela passa Obrigatoriamente por todos os pontos do Tabuleiro e Obrigatoriamente uma única vez em cada um deles o problema dessa estratégia é que ele é muito monótona e absurdamente ineficiente já que
ela precisa percorrer o tabuleiro inteiro para pegar uma comida dando muito espaço e desnecessárias nos meus testes em um tabuleiro 20 por 20 ela precisou de 38 a 40 mil movimentos para conseguir zerar então nosso objetivo nesse vídeo não vai ser apenas zerar o jogo e sim tentar fazer isso com a menor quantidade de movimento possível para isso a gente vai colocar uma rede neural para aprender a jogar o jogo e se você é novo aqui no canal e quiser entender melhor os detalhes do que vai rolar agora recomendo fortemente que você veja os outros
vídeos nessa playlist porque lá tem tudo explicado só que eu te colocar lá para treinar a gente precisa fazer uma pequena modificação do jogo como é um algoritmo E ai não ser humano pode acontecer ele entrar em loop eterno aí ele a cobrinha nunca vai morrer e se ela não morre a geração não acaba e o treinamento Não continua então para contornar isso eu vou colocar uma espécie de combustível que eu vou chamar de energia a cobrinha vai começar com uma determinada quantidade de energia e toda vez que ela fizer um movimento a energia vai
diminuir uma unidade quando ela pega a comida a energia reserva para o valor inicial Beleza beleza mas a questão agora é ponto de energia a gente vai dar para ela se a gente de pouca energia ela pode ficar sem combustível para chegar na comida mesmo eu estando em loop se a gente de muita energia acho que entrar em loop e vão demorar mais para morrer que o trem não vai demorar além do necessário bem se a gente parar para pensar que no pior caso ela teria que percorrer o tabuleiro inteiro para pegar uma comida então
uma quantidade interessante de energia para a gente dar para ela seria a quantidade bloco e do Tabuleiro E aí agora sim ambiente pronto vamos colocar ela para aprender quando começa o novo projeto eu sempre coloco ela para aprender o caso mais simples primeiro e eu vou complicando aos poucos nesse jogo o caso mais simples se ele ela apenas perseguir a comida sem o corpo crescer se ela aprenderá pensei que a comida evitar a colisão com as paredes e vai ser apreendido junto automaticamente só que para isso a cobra vai precisar enxergar comida de alguma forma
Existem várias formas de fazer a rede neural enxergar comida uma delas em vendo a posição da cabeça e da comida nos eixos x e y totalizando quatro informações ou seja quatro neurônios entrada o lado ruim das abordagem que o aprendizado vai ficar estritamente associado as coordenadas se o tabuleiro aumentar de tamanho ela não vai saber como se comportar nas novas coordenadas daí a gente vai ter que ter na hora de novo a forma de evitar isso em enviar para ela a distância entre a cabeça EA comida em vez da coordenada fura que foi inclusive que
eu fiz no vidro flappy Bird daí já reduz para dor é muito mais genéricos Dessa forma não importa se a cobra tá na coordenada 20 e a comida no 40 ou se ela tá na 80 EA comida não sem a distância 20 nos dois Casos que se ela aprender a se comportar quando ele distância 20 então ela saiba o que fazer e independente da coordenada outra forma de enxergar comida colocando alguns sensores de distância ao redor da cabeça do personagem tipo que eu fiz lá no vídeo do jogo mais difícil do mundo quando o sensor
coelho com a comida ele informa qual a distância e qual a direção que a comida tá para mim essa é uma das piores formas de detectar a comida porque além de deixar a vários pontos cegos na visão do personagem você acaba desperdiçando muitos neurônios para uma função que é essencialmente bem simples sincronizar todos esses neurônios vai ser um trabalho adicional e com certeza vai dificultar o treino sem necessidade porque nesse caso específico a gente sabe que no tabuleiro só aparece uma comida por vez sempre então não tem motivo para gente disparar para todos os lados
esses sensores só seriam úteis é uma quantidade de comida no tabuleiro variação a última forma EA melhor de todas é fazer igual o vídeo daí aprendendo estacionar e usar as coordenadas polares imagina um ponto vamos chamar ele de Gustavinho ele vai ser o nosso ponto de referência todos os outros pontos vão ser localizados a partir da posição de Gustavinho agora imagine Outro. Vamos chamar ele de Rogerinho se eu chego para você e falo que Rogerinho tá dois metros de distância degustar vir você não vai saber onde Rogerinho tá porque todos esses pontos estão dos medos
e Gustavinho tá faltando uma informação para você dar o xeque-mate descobrir onde está Rogerinho que é o ângulo se eu falasse que o Rogerinho tá dois metros de distância degustar vim no ângulo de 45° com esse x não teria erro só existe um ponto que satisfaz essas duas medidas ou seja distância e ângulo coordenadas polares esse tipo de condenado é excelente quando o assunto é rede neural porque essas duas medidas são sempre positivas ele me Oi e a gente neurais adora o número de positivos limitadas a gente não pode fazer uma otimização aqui como o
tabuleiro é simétrico nos dois eixos e nos dois sentidos Não importa se a cobrinha tá assim assim assim ou assim todas as situações são na verdade a mesma situação só que rotacionada então para tirar proveito dessas simetria eu vou deixar todas as entradas e saídas da região ao relativas com a cabeça ou seja as informações vão ser enviadas para ela do ponto de vista da cobrinha e não do ponto de vista de quem observa o tabuleiro por exemplo no lado esquerdo tem o ponto de vista de quem observa o tabuleiro e nesse ponto de vista
essas quatro situações Realmente são diferentes porque a cobrinha tá virada para uma direção diferente em cada uma delas já no lado direito tem o ponto de vista da cobrinha nesse ponto de vista não importa para qual direção ao da Virada o que importa é que a comida tá na frente dela exatamente da mesma maneira nos quatro casos fazendo isso a gente consegue impedir que a região o tempo aprendendo o mesmo comportamento quatro vezes porque agora todas as quatro situações são uma só se ela aprende para uma aprende para todas as quatro horas agora a gente
tem que fazer a mesma coisa na saída em vez das ações dela ser para cima para baixo para esquerda e para direita que seria um ações do ponto de vista de quem observa o tabuleiro as ações vão ser para frente para esquerda e para direita que são as ações que ela pode fazer do ponto de vista dela daí eu botei ela para treinar recebendo apenas esses dois valores a distância euclidiana até a comida e o ângulo entre a cabeça EA comida em relação ao eixo X e depois de trinta e seis gerações aproximadamente três minutos
de treinamento ela aprendeu a perseguir a comida de maneira perfeita e nunca mais perdeu nesse momento ela já pegou mais de 500 mil corridas Olha o estrago que essa última cobrinha fez no gráfico mas eu fiquei pensando será que dá para melhorar isso ainda mais e a resposta é sim e na verdade nesse caso em específico a cobrinha não precisa da distância até a comida só o ângulo já é o suficiente para você saber em qual direção deve ir daí eu tirei a distância e coloquei ela para treinar de novo apenas com o ângulo e
Mano ela aprendeu a perseguir A comida já na primeira geração logo de cara para quem viu o vídeo do Flash Band isso não é novidade porque lá eles também conseguiram jogar já na primeira geração aqui do lado a gente consegue ver claramente comportamento dela ela vai seguindo reto na direção até o ângulo ficar 90° quando fica 90° ela gira e vai de frente para comida o que aconteceu aqui foi que a gente lapidou tanto a visão dela eliminando tudo que era desnecessário que só sobrou a essência da informação e recebendo apenas a essência da informação
a chance de algum indivíduo Inicial já nasceu com esse comportamento de perseguição aumenta e o melhor de tudo é que se a distância até a comida não está sendo levado em consideração o tamanho tabuleiro também não então a gente pode treinar ela em um tabuleiro e sem outro de qualquer tamanho se liga eu tenho nem ela no tabuleiro 2525 agora exatamente a mesma rede neural tá jogando no tabuleiro 100% sem precisar e treinar a a e agora no tabuleiro 10 por 10 e realmente se a gente olhar assim para ter sucesso ela não precisa conhecer
o caminho e nem o tamanho dele ela só precisa saber direção certa e Então não esquece descobri direção certa é mais importante que o tamanho do Passo um passo grande na direção errada só de deixar mais distante do seu objetivo é Se Você interrompeu a linha de raciocínio para isso tu só pode tá zoando Beleza ela conseguiu aprender o jogo no formato mais simples tranquilamente agora vamos complicar mais um pouco vamos fazer o contrário ela não vai enxergar comida e o corpo vai crescer o que você acha que vai acontecer agora que o corpo pode
crescer ela vai precisar detectar isso de alguma forma ela precisa saber como que o corpo está posicionado no tabuleiro além de dizer que tá a parede também claro o certo seria a gente enviar para ela o tabuleiro inteiro um neurônio para cada quadradinho do mesmo jeito que o ser humano enxerga o jogo para não faltar nenhuma informação só que além de demorar dias para treinar uma rede desse tamanho pelo menos do meu computador esse modo de enxergar o tabuleiro ficaria atrelada ao tamanho dele se a gente aumentar o tamanho tabuleiro alguns pontos vão ficar para
fora desse quadrado ou seja ponto e se abre agora sim faz muito sentido colocar sensores na cabeça dela porque além da quantidade de a variável demoraria muito para ela treinar se ela tivesse a visão completa do Tabuleiro então vamos fazer o seguinte vamos colocar um sensor para cada uma das oito direções ao redor da cabeça e ver o que acontece aqui a gente tá vendo sensores de cada indivíduo é dessa forma que aí a tá enxergando tabuleiro assim você complica minha vida não tô enxergando quase nada meu parceiro e depois de algumas gerações pelo incrível
que pareça não é que ela quase convergiu para um ciclo a miltoniano isso faz muito sentido já que ela não consegue enxergar comida a única estratégia que pode manter ela viva é varreu tabuleiro de ponta a ponta garantindo que tá passando em todos os pontos aí mesmo sem chegar a comida ela consegue pegar e agora já que ela conseguiu apreender os dois casos mais simples Tá na hora do jogo completo E lembrando que agora ela vai receber tantos valores dos sensores quanto o ângulo com a comida e para a gente saber quais são os melhores
indivíduos eu tô dando um ponto para cada comida que o indivíduo pegar Enquanto elas trem não vamos dar uma olhada no que significa cada informação dessa daqui aqueles tem a quantidade de gerações que já passaram a partir daqui eles estão jogando nesse momento detalhe cada indivíduo vai jogar 3 partidas antes da gente ponto a ele para reprodução porque assim a gente consegue diluir um pouco um fator sorte ou azar se as comidas aparecerem na frente dele ele vai ganhar muitos pontos mesmo sem ter um comportamento inteligente ele tava apenas um bando para frente quando elas
apareceram e ele ganhou os pontos colocando o indivíduo para jogar várias vezes fica mais improvável que essa coincidência ocorra de novo mas é aquela pontuação alta que ele fez com a ajudinha da sorte vai ficar diluída na pontuação baixa das outras partidas quanto mais partidas ele joga melhor mais próximo da verdadeira a pontuação dele a gente chega porém o treinamento demora bem mais e três para o número legal que eu encontrei para não demorar tanto aqui a gente tem a quantidade de indivíduos que estão vivos no momento EA diversidade da população Esse valor da diversidade
é só uma estimativa porque calcular a diversidade uma população é uma operação bem gostosa computacionalmente falando então eu preferi perder um pouco de precisão para ganhar tempo e aqui o maior tamanho que qualquer a cobrinha já alcançou nesses gráficos a gente consegue ver a evolução da população tanto a evolução do Fitness com uma das estimativas da diversidade Olhando assim dá impressão que a queda diversidade faz o fitness a população aumentar mais lembre-se com relação não é causalidade só porque um gráfico tá descendo e o outro da subindo não significa que a queda de um gera
a subida do outro e a desse outro lado aqui a gente tem as informações do melhor indivíduo que ainda tá vivo a forma como ele enxerga o tabuleiro e a rede neural dele e jogando em tempo real aí depois de umas 900 gerações e quatro horas de treino o tamanho máximo que ela conseguiu chegar foi Oi gente talvez aquela encontrou até que é bem interessante ela pega as comidas enquanto fica girando pelo tabuleiro isso faz bastante sentido porque o caminho mais seguro de todos seria ficar perseguindo a calda Então ela meio que tá fazendo isso
só que aproveitando para pegar a comida ao mesmo tempo E aí e o problema é que ela ainda tá entrando em loop e perdendo porque falta de energia bom então vamos fazer o seguinte em vez de ganhar só um ponto quando ela pega a comida ela vai ganhar a quantidade de energia que sobrou desse jeito a gente vai dar mais ponto para quem pegou a comida andando menos porque quanto menos ela anda mais energias obra e consequentemente mais pontos ela ganha depois de quatro horas de treinamento ela chegou nesse nível mudar o cálculo do fiz
não ter o muita coisa ela continua nessa mesma estratégia de ficar girando e pegando as comidas só que pelo menos agora ela parou de perder por falta de energia e tá perdendo por ficar preso em si mesma o que já é um avanço e eu acho que ela tá andando em círculos porque ela não enxerga a parte de trás da cabeça daí fica com essa tendência de sempre para frente porque o único lugar que ele enxerga portanto é mais seguro os indivíduos que tentam virar para trás e explorar o desconhecido acabam dando de cara com
o próprio corpo daí perdem fazem poucos pontos e não são selecionados para reprodução eu vou tentar jogar enxergando do mesmo jeito que ela só para gente ter uma noção não se a visão tá boa ou não tá vamos lá eu tenho que seguir a setinha vermelha certo que é o ângulo para onde beleza eu não posso deixar Linha Azul ficar pequena demais porque aí eu bati o foi de acho que dois em que isso é isso vamos lá vamos lá ó tá extremamente confortável jogar assim eu não faço ideia do que tá acontecendo que eu
tô achando que ela tá enxergando muito mal ainda vamos fazer o seguinte vamos adicionar uma pequena Visão ao redor da cabeça dela o neurônio vai receber um se tiver algum obstáculo naquele bloco e menos uns se tiver vazio então agora ela tem o tipo de visão os sensores de distância que servem para detectar os obstáculos distantes e tem uma noção de onde está livre para ir e os oito blocos ao redor da cabeça para ter uma visão mais detalhada do que tá perto e conseguindo enviar do corpo com mais facilidade e e depois de umas
500 gerações ela começou a estagnar eu resolvi parar o treino nesse trem ela teve um grande avanço além de ter batido o recorde ter chegado no tamanho 147 ela ainda aprendeu duas estratégias novas A primeira foi ficar andando em zigue-zague o que também faz muito sentido porque ela aproveita melhor os espaços e tabuleiro andando em zigue-zague ela fica mais compacta e ficar mais compacta significa ela tá menos de Palhada em menos espalhados significa menos chance de se prender e eu vou mandar Cadê o tempo livre a segunda estratégia é que em alguns momentos ela faz
aquele esquema de varredura do ciclo a mentoniano como se ela quisesse organizar o corpo para liberar espaço talvez quando vi ela fazendo isso eu fiquei bem surpreso porque eu não esperava essa mudança de comportamento geralmente elas convergem para uma estratégia e ficam melhorando ela até estagnar Só que nesse trem foi diferente em algum momento provavelmente aqui essa estratégia nova surgiu [Música] E aí nesse momento eu pensei quer saber eu vou voltar para aquela ideia de que quanto mais simples melhor e só de curiosidade vou diminuir a quantidade de neurônios e tirar os sensores de distância
e foi no modo mais simples e ela bateu todos os recordes de novo depois de vários testes Essa foi a configuração que teve a melhor performance nessa configuração levou estratégia do zigue-zague para outro nível e alcançou um recorde de 176 comidas coletadas não é a cobrinha mais eficiente de todas porque ela tá dando muito espaços entre aspas desnecessários mas pelo menos está sobrevivendo bem ó É bem a performance da rede neural Até que foi bem boa mas infelizmente não consegui usar o jogo é muito combinatório e Isso dificulta muito aprendizado dela são muitos casos para
generalizar e acaba ficando complicado e demorado só que esse vídeo vai ter uma continuação uma Não na verdade duas Na próxima eu vou mostrar um outro algoritmo que é capaz de ser a esse jogo como a quantidade de interessante de passas e na última a gente vai incrementar o jogo adicionando obstáculos teletransportes e outras coisas para dificultar para ver como que os algoritmos vão se comportar nesse novo ambiente inclusive se você tiver alguma ideia de como complicar o jogo deixa aqui nos comentários que eu vou implementar Então a hora é agora se inscreve no canal
e Ative o tal do Sino para o YouTube te notificar quando esses dois vídeos saírem eu acabei de postar na área de membros esse vídeo analisando o e da cobrinha uma forma um pouco mais aprofundada plotando alguns gráficos então se você interesse nesse tipo de conteúdo considere se tornar um membro do universo programado e agradecimento de hoje vai para o nosso super membro of Syrian muito obrigado vicio.em por apoiar o canal e me ajudar a continuar produzindo esses vídeos tamo junto pessoal e até a próxima E aí