🔍
Inteligência Artificial ZERANDO o jogo da cobrinha (SNAKE) - YouTube
Channel: unknown
[0]
No vídeo anterior nós vimos que criar um
algoritmo pra zerar o jogo da cobrinha não
[3]
tem nenhum mistério, basta ficar varrendo
o tabuleiro desse jeito, sempre deixando um
[8]
espaço pra voltar, que vai dar pra zerar
tranquilamente.
[11]
Essa estratégia se chama Ciclo Hamiltoniano
e o único problema dela é que ela é bem
[16]
ineficiente, já que dá muitos passos desnecessários…
daí nós mudamos o objetivo de “zerar o
[22]
jogo” para “zerar com a menor quantidade
de passos possível”, e pra isso, a gente
[26]
colocou uma rede neural pra aprender a jogar.
[29]
O resultado final você já viu, a rede não
conseguiu zerar porque ela acabava deixando
[33]
a cobrinha presa em si mesma
[35]
Se você conheceu o canal agora e ainda não
viu o vídeo da rede neural aprendendo a jogar,
[39]
não tem problema, eu vou deixar o link dele
no final desse vídeo aqui.
[42]
então hoje, nós vamos superar isso e vamos
criar um algoritmo, que além de não se prender,
[47]
consegue zerar o jogo com uma quantidade bem
menor de passos.
[51]
levando em consideração que o ciclo hamiltoniano
precisa de mais ou menos 40 mil passos pra
[55]
zerar num tabuleiro 20x20,
[58]
Quantos passos você acha que esse novo algoritmo
vai precisar?
[64]
Seja muito bem vindo ao universo programado!
[70]
Eu me chamo Victor Dias, programador e editor
desse canal.
[74]
Pra você que é novo aqui, o objetivo desse
canal é te mostrar a beleza da Ciência da
[79]
Computação, programando alguns algoritmos
que são verdadeiras obras de arte.
[82]
Se você gosta desse tipo de conteúdo, se
inscreve no canal pra receber os próximos
[86]
vídeos.
[87]
E pra você que já é velho aqui no canal,
considere se tornar um membro, assim você
[91]
nos apoia a fazer mais vídeos como esse.
[94]
Os benefícios estão ali no botão Seja membro!
[97]
e como diria o poeta: “mais vale um passo
na direção certa, do que dois na direção
[101]
errada”
[102]
vam bora pro vídeo
[104]
No vídeo anterior nós vimos que a rede neural
tava jogando razoavelmente bem, só que ainda
[108]
assim tava se prendendo no próprio corpo.
[111]
E realmente, se a gente parar pra pensar,
esse é o verdadeiro desafio do jogo.
[116]
Evitar que a cobrinha se prenda no próprio
corpo.
[118]
Pro nosso algoritmo conseguir essa façanha,
ele tem que de alguma forma, levar o futuro
[123]
em consideração na hora de tomar a decisão
de pra onde ele vai virar.
[127]
Ele precisa saber quais direções levam pra
um caminho sem saída.
[131]
Se liga nessa situação:
apenas olhando pra essa imagem e conhecendo
[134]
as regras do jogo, você sabe quase instintivamente
que ela não deve virar pra esquerda, porque
[140]
o seu cérebro humano é capaz de projetar
o futuro, ainda mais numa situação simples
[145]
como essa.
[146]
O nosso cérebro é tão bom nisso que fica
extremamente óbvio que ela vai se prender,
[147]
E isso é tão nítido que a sensação que
dá é quase como se a gente tivesse realmente
[148]
enxergando o futuro.
[149]
Você consegue facilmente imaginar e visualizar
na sua cabeça a cobrinha chegando no final
[151]
do caminho e batendo.
[152]
Antecipar o futuro é essencial pra você
poder tomar a decisão certa hoje, agora.
[158]
Porque em alguns casos, deixar pra tomar essa
decisão em cima da hora pode ser tarde demais.
[162]
Se ela estiver errada, não dá mais pra desfazer.
[165]
e é justamente essa habilidade que a gente
quer dar pro algoritmo.
[168]
a de enxergar o futuro.
[170]
Pra ele conseguir ter essa habilidade, nós
vamos fazer várias simulações do jogo antes
[175]
de escolher uma direção pra virar.
[176]
Nós vamos criar vários clones da cobrinha.
[179]
Só que esses clones vão jogar aleatoriamente.
[181]
Fazendo isso a gente consegue experimentar
vários futuros diferentes e consequentemente
[187]
descobrir qual é a melhor direção pra virar.
[189]
Só que pera ai, clones jogando??
[191]
isso te lembra alguma coisa?
[193]
se você viu o vídeo da rede neural jogando
o 2048, sim, é ele mesmo
[197]
O Monte Carlo
[200]
Se você não sabe ou não lembra como esse
algoritmo funciona, vamos recapitular rapidamente
[204]
em apenas X segundos.
[207]
crie vários clones 100% identicos a cobrinha
coloque todos pra jogarem aleatoriamente
[212]
quando todos perderem, calcule a pontuação
final de cada um deles.
[216]
das 3 direções que a cobrinha original pode
seguir, encontre aquela que teve a maior pontuação
[220]
média dentre os clones.
aplica ela na cobrinha original.
[223]
e repete tudo de novo
[225]
A ideia desse algoritmo é descobrir quais
direções levam ao fracasso.
[229]
por exemplo, nesse caso,
os clones que foram pra frente bateram na
[232]
parede e não fizeram pontos.
os clones que foram pra esquerda pegaram uma
[236]
comida só, ficaram presos e depois perderam.
já os clones que foram pra direita não se
[241]
prenderam, alguns vão conseguir dar a volta
e pegar a comida e outros vão conseguir até
[245]
mesmo pegar a próxima a comida.
[248]
A probabilidade de pegar a comida jogando
aleatoriamente é bem baixa, mas como a quantidade
[252]
de clones é bem alta, uma coisa compensa
a outra e alguns clones acabam conseguindo
[257]
chegar lá.
[258]
Aí o algoritmo vai concluir que a direita
é a melhor direção pra seguir, já que
[262]
os clones que foram nessa direção ganharam
mais pontos que os clones que foram nas outras
[266]
direções
[267]
Então na prática é como se o algoritmo
estivesse ‘’atirando pra todos os lados’’
[272]
e vendo qual é a direção mais promissora.
[274]
Agora vamos colocar o monte carlo pra jogar…
[276]
Isso é o que acontece quando a gente tenta
desenhar todos os clones jogando ao mesmo
[280]
tempo… uma verdadeira bagunça.
[281]
Deixa eu dar uma acelerada aqui...
[283]
show.
[286]
Nessa partida os clones estão 100% aleatórios
e a métrica que classifica se o clone foi
[291]
bem sucedido ou não é apenas a quantidade
de comidas que ele pegou.
[296]
Agora vamos ocultar os clones pra gente ver
a cobrinha original jogando… ó, repara
[300]
que ela tá bem eficiente, ela tá indo direto
pra comida, sem ficar dando voltas. e mano,
[306]
isso é sensacional. sério, reflete sobre
isso...
[309]
A média dos clones, que são livres pra fazerem
o que quiserem, converge pro menor caminho.
[315]
Eu particularmente acho esse algoritmo extremamente
bonito.
[319]
Ele consegue encaixar a matemática e a programação
de uma forma muito boa.
[323]
A programação torna possível fazer as simulações
e a matemática se encarrega da convergência.
[329]
Como dizia meu professor:
[331]
“Esse é um daqueles algoritmos elegantes,
que usam terno e gravata!”
[336]
mas tem um problema… olha só esse momento,
a cobrinha se prendeu sem a menor necessidade.
[344]
Isso aconteceu por causa do formato dela no
tabuleiro e o fato da comida ter nascido lá
[348]
do outro lado… Nessa situação ficou muito
difícil dos clones conseguirem chegar lá
[353]
na comida jogando aleatoriamente, a maioria
bateu na cauda e os outros perderam no caminho.
[358]
Aí ninguém fez pontos e aconteceu um empate
na hora de decidir a direção que a cobrinha
[362]
original tinha que seguir.
[364]
Aí o algoritmo teve que desempatar escolhendo
uma direção aleatória.
[367]
E infelizmente, ele deu azar.
[369]
Existem algumas formas de consertar isso:
[372]
Uma delas é aumentando a quantidade de clones,
pra aumentar a chance de pelo menos um deles
[376]
conseguir chegar lá na comida e assim evitar
o empate.
[379]
Só que essa não é uma boa forma de resolver
o problema.
[382]
Aumentar a quantidade de clones só vai empurrar
o problema pra frente… Isso vai continuar
[387]
acontecendo quando a cobrinha atingir tamanhos
maiores.
[389]
Aí a gente teria que aumentar a quantidade
de novo, de novo e de novo... e não dá pra
[401]
ficar aumentando pra sempre.
[403]
Nesse exemplo eu to usando 30 mil clones e
mesmo assim não foi suficiente, ela perdeu
[408]
no tamanho 55.
[409]
Se eu aumentar pra 100 mil clones o meu computador
já leva alguns vários segundos pra calcular
[414]
apenas 1 passo da cobrinha original.
[416]
Quanto mais clones, mais lento e mais pesado
fica o algoritmo.
[420]
A boa notícia é que existem outras formas
muito melhores de resolver esse problema.
[425]
Em vez de simplesmente aumentar a quantidade
de clones, nós podemos melhorar os clones
[430]
que a gente já tem, deixando eles um pouco
mais inteligentes.
[434]
Se liga:
[435]
Como o clone decide a direção que ele vai
seguir de forma 100% aleatória, ele acaba
[439]
se jogando na parede ou no próprio corpo,
e perde o jogo sem a menor necessidade.
[445]
e como a função do clone é coletar informações
sobre o futuro, quanto mais tempo ele ficar
[450]
vivo melhor. mais informações ele coleta.
[453]
Perder prematuramente é péssimo pro algoritmo.
[456]
Pra corrigir isso e deixar o clone um pouco
mais inteligente,
[459]
a gente pode fazer o seguinte: na hora de
sortear uma direção pra virar, se essa direção
[463]
faz ele bater em alguma coisa, então ela
tá fora do sorteio.
[467]
Assim ele não consegue mais se jogar na parede
nem no próprio corpo e as únicas formas
[472]
de perder passam a ser: acabando a energia
ou ficando preso em si mesmo.
[476]
Que são duas coisas que a gente não tem
como evitar.
[477]
Se você não sabe que energia é essa, ela
tá explicada no vídeo anterior.
[480]
Fazendo isso a gente transforma os clones
de meros jogadores aleatórios para exploradores
[486]
inteligentes que evitam perder a toa.
[488]
E só com essa modificação a cobrinha já
conseguiu ultrapassar os 55 pontos e chegar
[501]
em 146.
[503]
Um resultado bem próximo da nossa rede neural
do vídeo anterior.
[506]
só que o problemas, com certeza, ainda não
acabaram.
[511]
olha o que tá acontecendo:
Nessa situação, os clones que viraram pra
[514]
direita conseguiram pegar a comida mas se
prenderam e perderam.
[518]
Já os clones que foram pro lado esquerdo
não se prenderam, mas também não conseguiram
[522]
pegar a comida.
[523]
Mesmo eles sendo exploradores inteligentes,
nessa situação ficou muito difícil chegar
[528]
na comida com movimentos aleatórios.
[530]
Olha quantas camadas de cobrinha dividem a
comida dos clones que foram pra esquerda.
[535]
Aí, diante desse dilema, o que o algoritmo
escolheu?
[538]
Claro, a comida.
[540]
e isso faz todo sentido, já que a pontuação
do clone só leva em consideração a quantidade
[545]
de comidas que ele pegou.
[546]
Um ser humano jogando saberia que o certo
seria ficar seguindo a cauda até chegar perto
[551]
da comida pra pegar.
[552]
Mas esse nosso algoritmo ainda tá muito Ganancioso.
[555]
Ele não tá conseguindo perceber a vantagem
em esperar agora, pra ganhar no futuro.
[560]
E nós precisamos consertar isso.
[562]
Saber o que levar em consideração na hora
de calcular a pontuação do clone é muito
[567]
importante.
[568]
Essa pontuação é chamada de Heurística,
e você precisa ficar testando vários tipos
[574]
até encontrar a que performa melhor no seu
problema.
[577]
Se a gente quiser que a cobrinha sobreviva
por mais tempo, a gente precisa, de alguma
[582]
forma, dizer pra ela que a comida não é
a coisa mais importante, a gente precisa dizer
[587]
pra ela que percorrer o tabuleiro pra não
se prender também é necessário.
[591]
E pra fazer isso, a gente vai mudar a Heurística,
em vez dela levar em consideração apenas
[595]
a quantidade de comidas, agora ela vai ser
uma multiplicação entre a quantidade de
[600]
comidas e a distância que o clone andou.
[603]
Dessa forma, os clones também ganham pontos
quando se movimentam pelo tabuleiro, fazendo
[607]
a cobrinha ser menos gananciosa em relação
à comida.
[611]
De cara a gente já vê uma diferença no
comportamento dela, repara que ela não tá
[614]
mais fazendo o menor caminho.
[616]
Ela continua indo até a comida, mas agora
ela tá curtindo um pouco mais o passeio,
[621]
sem pressa de chegar no destino, porque quanto
mais ela anda, mais pontos ela ganha.
[625]
E essa heurística deu tão certo que ela
conseguiu bater o recorde da rede neural e
[633]
chegou no tamanho 239, e só perdeu porque
ficou sem energia.
[636]
e foi nesse momento que eu percebi que o segredo
tava na distância percorrida pelo clone,
[641]
e que ele deveria dar mais importância pra
ela do que pra quantidade de comidas.
[646]
então vamos aumentar o peso da distância
percorrida no cálculo da heurística.
[650]
Aí o clone vai ganhar ainda mais pontos quando
ele andar e vai focar ainda mais em não se
[655]
prender ao invés de focar em pegar a comida.
[658]
Assim a gente consegue diminuir ainda mais
a ganância e fazer a cobrinha focar mais
[662]
no longo prazo.
[663]
E como fazemos isso?
[664]
Elevando a distância ao quadrado, ou ao cubo,
por exemplo.
[667]
Só que, se a gente fizer isso, olha o que
vai acontecer:
[671]
No início do jogo a cobrinha vai ficar ainda
mais ineficiente.
[675]
Já que ela tá ganhando muitos pontos apenas
por andar.
[678]
Se antes de aumentar o peso ela já tava dando
um passeio maneiro até pegar a comida, imagina
[684]
agora, que a distância tá ao cubo.
[685]
Como o nosso objetivo é zerar com a menor
quantidade de movimentos possível, nós vamos
[690]
ter que fazer mais uma otimização.
[693]
Quando você joga esse jogo, você percebe
que no início, nem sequer passa pela sua
[698]
cabeça evitar de se prender.
[700]
Ela ainda é pequena demais pra isso te preocupar.
[702]
Você apenas vai na direção da comida e
pronto.
[704]
Só que ao longo da partida, ela vai crescendo
e aos poucos a situação vai complicando,
[710]
até o momento em que evitar de se prender
passa a ser a prioridade.
[714]
Ou seja, o nosso comportamento vai mudando
ao longo da partida.
[718]
O que era prioridade no início, deixa de
ser no final.
[721]
Só que a nossa heurística é estática,
ela permanece a mesma ao longo de toda a partida.
[726]
E como é a heurística quem define o comportamento
da cobrinha, acaba que ela se comporta da
[731]
mesma maneira durante toda a partida.
[734]
A solução pra isso é fazer uma ‘’heurística
dinâmica’’.
[736]
Se a gente quiser que o comportamento da cobrinha
mude ao longo da partida, a gente precisa
[740]
que a heurística mude também.
[742]
A gente precisa de uma heurística que evolua
junto da cobrinha.
[746]
E pra isso, nós vamos colocar o cálculo
da heurística em função do tamanho dela.
[751]
ou seja, quando a partida começar, o expoente
da distância percorrida vai ser igual 0,
[757]
pra cobrinha poder focar totalmente em pegar
a comida o mais rápido possível…
[761]
e a medida que ela for crescendo, esse expoente
vai crescendo junto.
[765]
Dessa forma, o peso da distância vai aumentando
aos poucos e ela, consequentemente, vai deixando
[771]
de ser gananciosa ao longo da partida.
[773]
Dessa forma a gente consegue ter o melhor
dos 2 mundos.
[776]
Pegar a comida rápido no início e não ser
ganancioso no final.
[779]
e mano, o jeito que o Monte Carlo joga sempre
me surpreende… É estranho.
[787]
É um jeitão meio aleatório mas ao mesmo
tempo estratégico...
[791]
Dá uma sensação de que ele realmente tá
enxergando o futuro e não apenas simulando.
[795]
Tem situações que você acha que ele vai
se prender.
[798]
Mas ele não se prende.
[799]
Porque os clones dele conseguem enxergar muito
mais longe do que a gente.
[805]
Que algoritmo bonito mano.
[810]
e o final desse jogo é tão complicado que
olha só a situação que ela se meteu. e
[815]
agora???
[816]
Pra frente ela bate, pra esquerda ela se prende,
e pra direita também.
[819]
Essa é uma daquelas situações em que deixar
pra tomar a decisão em cima da hora é tarde
[822]
demais.
[823]
Ela deveria ter se organizado quando ainda
tava aqui, aí sim, ela teria chance de sobreviver
[829]
e zerar o jogo.
[830]
Aí depois de mais alguns testes e mais ajustes
na heurística.
[833]
Esse foi o formato que teve o melhor desempenho
e finalmente conseguiu zerar o jogo usando
[839]
29 mil passos.
[840]
Lembrando que a quantidade de comidas e a
distância percorrida são relativas ao clone,
[841]
e não ao total da cobrinha original.
[842]
Por exemplo, Se o clone andou 200 blocos e
pegou 1 comida antes de perder, são esses
[843]
números que vão pro cálculo da pontuação..
[844]
Uma coisa que eu achei muito interessante
nessa heurística é que o fato de colocar
[845]
a distância percorrida no cálculo da pontuação
faz com que o comportamento dela no final
[849]
do jogo fique muito parecido com o ciclo hamiltoniano,
e isso faz todo sentido, já que os clones
[855]
que se espalham mais ganham mais pontos.
[858]
Olha só esse momento mano, olha como ela
vai preenchendo certinho todos os espaços.
[867]
Sensacional.
[869]
Só que ainda existem 3 problemas nesse algoritmo:
[871]
O primeiro é que 29 mil passos ainda é um
valor alto, dá pra diminuir ainda mais essa
[877]
quantidade e fazer a cobrinha zerar com menos
passos.
[881]
O segundo problema é que ele não consegue
zerar em 100% das partidas.
[885]
Às vezes acontece isso ó.
[887]
Bem no finalzinho do jogo, a comida nasceu
na frente dela, e depois nasceu de novo.
[891]
Como a cobrinha tava muito perto da cauda,
não sobrou espaço pra ela andar depois que
[895]
o tamanho aumentou 2 vezes, aí ela perdeu
faltando apenas 2 comidas pra ganhar.
[901]
E o último problema é que, se a gente aumentar
o tamanho do tabuleiro, a dificuldade vai
[906]
aumentar exponencialmente mais,
daí a gente teria que aumentar a quantidade
[910]
de clones pra conseguir explorar a mesma área
de antes, só que uma hora isso chega no limite
[916]
e o algoritmo não consegue zerar mais.
[919]
Isso significa que, no próximo vídeo dessa
série, nós vamos ver outro algoritmo que
[923]
também consegue zerar esse jogo, só que
ele resolve esses 3 problemas.
[928]
Esse algoritmo consegue zerar o jogo 100%
das vezes, com uma quantidade de passos menor
[932]
que o Monte Carlo e em tabuleiros maiores.
[937]
Eu to deixando um vídeo com a partida inteira
na descrição, pra quem tiver interesse em
[940]
assistir o monte carlo jogando do início
ao fim.
[943]
E se você quiser saber mais sobre inteligência
artificial, você pode seguir o canal no instagram,
[948]
que é por lá que eu respondo as dúvidas
de vocês.
[951]
Aqui na esquerda tem o vídeo anterior dessa
série, aquele onde a rede neural aprende
[956]
a jogar.
[957]
E aqui na direita tem o próximo vídeo dessa
série, onde nós vamos ver o algoritmo que
[960]
resolve os 3 problemas do monte carlo.
[962]
Pra assistir qualquer um dos dois, é só
clicar neles.
[963]
Tamo junto galera e até daqui a pouco!
Most Recent Videos:
You can go back to the homepage right here: Homepage





