1 / 58

Autores: Alex Fernandes da Veiga Machado Carla Rezende Barbosa Bonin Esteban Walter Gonzales Clua

Autores: Alex Fernandes da Veiga Machado Carla Rezende Barbosa Bonin Esteban Walter Gonzales Clua Gustavo Montes Novaes Mauro Lúcio Ruy de Almeida Filho. TUTORIAL: SBGAMES 2009 Criação de um Jogo de Quebra-Cabeças Usando Algoritmo Genético como Motor de Resolução.

martha
Download Presentation

Autores: Alex Fernandes da Veiga Machado Carla Rezende Barbosa Bonin Esteban Walter Gonzales Clua

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Autores: Alex Fernandes da Veiga Machado Carla Rezende Barbosa Bonin Esteban Walter Gonzales Clua Gustavo Montes Novaes Mauro Lúcio Ruy de Almeida Filho TUTORIAL: SBGAMES 2009Criação de um Jogo de Quebra-Cabeças Usando Algoritmo Genético como Motor de Resolução

  2. Algumas Apresentações (2007) • SEMINF (Semana de Informática do CEFET-MG - Campus Leopoldina) • X META Leopoldina ( X Mostra Específica de Trabalhos e Aplicações do Campus Leopoldina) • Semana de Informática das Faculdades Doctum – Cataguases • Semana de Informática da FAGOC – Ubá • SBGames 2007(VI Simpósio Brasileiro de Jogos para Computador e Entretenimento Digital) – São Leopoldo/RS • XII Semana de Informática da Universidade Federal de Viçosa (UFV)

  3. Algumas Apresentações (2008) • 6ª Feira Brasileira de Ciências e Engenharia (FEBRACE), na Universidade de São Paulo (USP), São Paulo • 59th INTEL International Science and Engineering Fair (INTEL ISEF), Atlanta, Estados Unidos • 1ª GameSul Mato Grosso, Rondonópolis, Mato Grosso • 2ª Feira de Ciências e Tecnologia do Sul do Maranhão (FECITEC-MA) 2008, Imperatriz, Maranhão • Semana de Informática das Faculdades Doctum – Cataguases • SBGames 2008(VII Simpósio Brasileiro de Jogos para Computador e Entretenimento Digital) – Belo Horizonte, Minas Gerais

  4. Índice • Heurísticas e Aplicações • Problema!!! • Algoritmo Genético com Árvore de Buscas

  5. Heurísticas e Aplicações • Define soluções para um problema através da otimização dos resultados gerados • Tem como objetivo medir ganhos de eficácia e de precisão para definir os melhores resultados. • São utilizadas em problemas que possuem uma complexidade elevada em função do grande número de soluções possíveis • Denomina-se 'heurística' a capacidade de um sistema fazer inovações e desenvolver técnicas de forma imediata e positiva para um determinado fim.

  6. Heurísticas e Aplicações • Tipos Utilizados • Algoritmo Genético • GRASP • AG-GRASP • Áreas de Atuação • Implementação das Heurísticas

  7. Jogo Modelo para Tutorial

  8. Software e Linguagem • A Linguagem utilizada foi a FreePascal • O Software escolhido foi o Lazarus (Ferramenta RAD) • Característica de CrossCompiling • Facilidade de Desenvolvimento • Boa Velocidade de Resolução • Gratuidade e Disponibilidade de Licença

  9. Problema!!!

  10. Problema!!!

  11. Tabela de Movimentos

  12. Árvore de Buscas (Exemplificação) Estrutura Game Search Tree (Árvore de Buscas) Na teoria combinatória dos jogos, representa um Grafo Direcionado cujos nodos são as posições de um jogo e os vértices são os movimentos possíveis.

  13. Procedimentos de Interação Usuário/Jogo • Embaralhar o Quebra-Cabeças • Iniciar a contagem do tempo • Realizar a troca de peças • Solicitar Dicas (Hints)

  14. Procedimentos de Interação Usuário/Jogo • Solucionar todo o jogo • Receber informação da solução completa do jogo • Paralisar o tempo • Sair do jogo

  15. Conceitos gerais • Gene • Cromossomo • Geração Inicial • Mutação • Crossover • Fitness

  16. Exemplo do Projeto

  17. Algoritmo Genético • Conceito • Características • Vantagens

  18. Algoritmo Genético aplicado - Fluxograma

  19. Exemplo: Magic Square Etapa 1Representação de todas as situações

  20. Exemplo: Magic Square Etapa 2Definição do tempo limite e do nº de gerações Tempo Limite (segs.) = 10 N de Gerações = 10

  21. Exemplo: Magic Square Etapa 3 Definição da profundidade (game tree) e da função de fitness Profundidade = 15

  22. Exemplo: Magic Square Etapa 4 Definição da taxa de crossover e mutação Crossover= 50% Mutacao= 10%

  23. Exemplo: Magic Square Etapa 5Geração da população inicial de cromossomos

  24. Exemplo: Magic Square Etapa 6 Execução do crossover C1= {14, 4, 8, 0, 18, 17, 10, 12, 4, 6, 17, 17, 17, 14, 16} C2= {10, 0, 1, 6, 3, 2, 2, 0, 5, 0, 8, 15, 12, 2, 2} OS1= {14, 4, 8, 0, 18, 17, 10, 12, 4, 6, 17, 15, 12, 2, 2} OS2= {10, 0, 1, 6, 3, 2, 2, 0, 5, 0, 8, 17, 17, 14, 16}

  25. Exemplo: Magic Square Etapa 7 Execução da mutação C1= {7, 11, 8, 12, 8, 0, 3, 9, 1, 2, 11, 13, 9, 3, 2} OS1= {7, 11, 8, 12, 8, 0, 3, 9, 8, 2, 11, 13, 9, 3, 2}

  26. Exemplo: Magic Square Etapa 8 Cálculo do valor de fitness de cada offspring

  27. Exemplo: Magic Square Etapa 9 Seleção dos melhores candidatos (critério elitista)

  28. Exemplo: Magic Square Etapa 10 Finalização ou repetição da Etapa 6 Solucao= {16, 9, 2 1, 4, 8, 7, 10, 16, 4, 12, 13, 7, 11, 4}

  29. Códigos e Procedures Procedimentos que devem ser criados para viabilizar a implementação dos conceitos do Algoritmo Genético

  30. Troca de Botões • // Botão 1 • if(q1=1)then • begin • if(q2=2) then • begin • cap:=Form1.BitBtn2.caption; • Form1.BitBtn2.caption := Form1.BitBtn1.caption; • Form1.BitBtn1.caption := cap; • Form1.BitBtn10.Glyph:=Form1.BitBtn2.Glyph; • Form1.BitBtn2.Glyph:=Form1.BitBtn1.Glyph; • Form1.BitBtn1.Glyph:=Form1.BitBtn10.Glyph; • end;

  31. Troca de Botões • if(q2=6) then • begin • cap:=Form1.BitBtn6.caption; • Form1.BitBtn6.caption := Form1.BitBtn1.caption; • Form1.BitBtn1.caption := cap; • Form1.BitBtn10.Glyph:=Form1.BitBtn6.Glyph; • Form1.BitBtn6.Glyph:=Form1.BitBtn1.Glyph; • Form1.BitBtn1.Glyph:=Form1.BitBtn10.Glyph; • end;

  32. Troca de Botões • if(q2=3) then • begin • cap:=Form1.BitBtn5.caption; • Form1.BitBtn5.caption := Form1.BitBtn1.caption; • Form1.BitBtn1.caption := cap; • Form1.BitBtn10.Glyph:=Form1.BitBtn5.Glyph; • Form1.BitBtn5.Glyph:=Form1.BitBtn1.Glyph; • Form1.BitBtn1.Glyph:=Form1.BitBtn10.Glyph; • end;

  33. Troca de Botões • if(q2=21) then • begin • cap:=Form1.BitBtn52.caption; • Form1.BitBtn52.caption := Form1.BitBtn1.caption; • Form1.BitBtn1.caption := cap; • Form1.BitBtn10.Glyph:=Form1.BitBtn52.Glyph; • Form1.BitBtn52.Glyph:=Form1.BitBtn1.Glyph; • Form1.BitBtn1.Glyph:=Form1.BitBtn10.Glyph; • end; • end;

  34. Embaralhar Imagem • procedure aleatorio(max: integer); • var • numero: array[1..2000] of integer; • resposta: string; • k,n,i, ale: integer; • begin • for i:=1 to max do • numero[i]:=i; • for i:=1 to max do • begin • ale:=random(max+1-i)+1; • escolhido[i]:=numero[ale]; • n:=0; • for k:=1 to max+1-i do

  35. Embaralhar Imagem • begin • if(k<>ale) then • begin • n:=n+1; • numero[n]:=numero[k]; • end; • end; • end; • for i:=1 to max do • resposta:=resposta+inttostr(escolhido[i])+' - '; • //Form1.Edit1.Text:=resposta; • end;

  36. Definição dos Possíveis Movimentos • if(cromo=1)then • begin • prime:=Form1.BitBtn2.caption; • Form1.BitBtn2.caption := Form1.BitBtn1.caption; • Form1.BitBtn1.caption := prime; • Form1.BitBtn10.Glyph:=Form1.BitBtn2.Glyph; • Form1.BitBtn2.Glyph:=Form1.BitBtn1.Glyph; • Form1.BitBtn1.Glyph:=Form1.BitBtn10.Glyph; • end;

  37. Definição dos Possíveis Movimentos • if(cromo=2)then • begin • prime:=Form1.BitBtn1.caption; • Form1.BitBtn1.caption := Form1.BitBtn5.caption; • Form1.BitBtn5.caption := prime; • Form1.BitBtn10.Glyph:=Form1.BitBtn1.Glyph; • Form1.BitBtn1.Glyph:=Form1.BitBtn5.Glyph; • Form1.BitBtn5.Glyph:=Form1.BitBtn10.Glyph; • end;

  38. Geração da População Inicial • // gerar o primeiro grupo de cromossomos aleatorios • procedure primeiro(); • begin • //criar os cromossomor da população inicial • for contador:=1 to 10 do • begin • for contador1:=1 to nmovimentos do • begin • num2:=random(51); • cromossomo[contador][contador1]:=num2; • end; • end;

  39. Realização do Crossover • procedure crossover(); • begin • v1:=''; • //taxa:=round(taxacross/100*nmovimentos); • taxa:=35; • t:=1; • while (t<=10) do • begin • z:=t+1; • for u:=1 to taxa+1 do cromossomo[t+10][u]:=cromossomo[t][u]; • for u:=taxa+1 to nmovimentos do cromossomo[t+10][u]:=cromossomo[z][u]; • t:=t+1; • for u:=taxa to nmovimentos do cromossomo[t+10][u]:=cromossomo[t-1][u]; • for u:=1 to taxa do cromossomo[t+10][u]:=cromossomo[z][u]; • t:=t+1; • end;

  40. Realização da Mutação • procedure mutacao(); • begin • //taxa1:=round(taxamut/100*nmovimentos); • taxa1:=3; • //pega a população inicial para a mutação • for contador3:=1 to 10 do • begin • for contador12:=1 to nmovimentos do • begin • ssomo[contador3][contador12]:=cromossomo[contador3][contador12]; • end; • end; • //mutação • for contador13:=1 to 10 do • begin

  41. Realização da Mutação • for qnt:=1 to taxa1 do • begin • gene:=1+random(nmovimentos); • muta:=random(51); • ssomo[contador13][gene]:=muta; • end; • end; • //guarda o resultado da mutação • for contador3:=1 to 10 do • begin • for contador4:=1 to nmovimentos do • begin • cromossomo[contador3+20][contador4]:=ssomo[contador3][contador4]; • end; • end;

  42. Cálculo do Fitness • procedure fitness(); • begin • //Button 1 • if (cromof[1]=1)then um :=0; • if (cromof[1]=2)then um :=1; • if (cromof[1]=3)then um :=2; • if (cromof[1]=4)then um :=2; • if (cromof[1]=5)then um :=1; • if (cromof[1]=6)then um :=1; • if (cromof[1]=7)then um :=2; • if (cromof[1]=8)then um :=3; • if (cromof[1]=9)then um :=3; • if (cromof[1]=10)then um :=2; • if (cromof[1]=11)then um :=2; • if (cromof[1]=12)then um :=3;

  43. Cálculo do Fitness • if (cromof[1]=13)then um :=4; • if (cromof[1]=14)then um :=4; • if (cromof[1]=15)then um :=3; • if (cromof[1]=16)then um :=2; • if (cromof[1]=17)then um :=3; • if (cromof[1]=18)then um :=4; • if (cromof[1]=19)then um :=4; • if (cromof[1]=20)then um :=3; • if (cromof[1]=21)then um :=1; • if (cromof[1]=22)then um :=2; • if (cromof[1]=23)then um :=3; • if (cromof[1]=24)then um :=3; • if (cromof[1]=25)then um :=2; • //total de fitness • total:=100-(um+dois+tres+...+vintetres+vintequatro+vintecinco);

  44. Troca Interna com Entrada de Genes procedure trocab(t1:integer); • begin • if(t1=1)then • begin • seg:=cromof[2]; • cromof[2] := cromof[1]; • cromof[1] := seg; • end; • if(t1=2)then • begin • seg:=cromof[5]; • cromof[5] := cromof[1]; • cromof[1] := seg; • end;

  45. Alinha os Cromossomos (melhores fitness) • procedure setimo(); • begin • dan:=1; • nad:=1; • maior:=100; • while(maior>=0) do • begin • for most1:=1 to 30 do • begin • if(fitcromossomo[most1]=maior) then • begin • for contador7:=1 to nmovimentos do maiorcromo[dan][contador7]:=cromossomo[most1][contador7]; • maiorfit[nad]:=maior;

  46. Alinha os Cromossomos (melhores fitness) • dan:=dan+1; • nad:=nad+1; • end; • end; • maior:=maior-1; • end; • //Apenas mostra os cromossomos alinhados • pf:=''; • for most:=1 to 30 do • begin • pf:=inttostr(maiorfit[most]); • Form1.Memo7.Lines.Add(pf); • end; • end;

  47. Seleciona Melhores Cromossomos • procedure oitavo(); • begin • Form1.memo1.lines.Clear; • Form1.memo2.lines.Clear; • Form1.memo7.lines.Clear; • for contador10:=1 to 10 do • begin • for contador11:=1 to nmovimentos do • begin • cromossomo[contador10][contador11]:=maiorcromo[contador10][contador11]; • v4:=v4+' '+ inttostr(cromossomo[contador10][contador11]); • end;

  48. Seleciona Melhores Cromossomos • fitcromossomo[contador10]:=maiorfit[contador10]; • Form1.memo1.lines.add(v4); • Form1.memo2.lines.add(inttostr(fitcromossomo[contador10])); • form1.Memo7.Lines.Add(inttostr(maiorfit[contador10])); • v4:=''; • end; • end;

  49. Resolver o Problema • procedure botaoag(); • var dia, mes, ano, horas, minutos1, segundos1, milisegundos1, minutos2, segundos2, milisegundos2: Word; • begin // uses DateUtils • DecodeDateTime(Now, ano, mes, dia, horas, minutos1, segundos1, milisegundos1); • solu:=0; • for constante:=1 to maxite do • begin • if (exibir)then • begin • Form1.memo1.clear; • Form1.memo2.clear; • Form1.memo3.clear; • Form1.memo4.clear; • Form1.memo5.clear; • Form1.memo6.clear; • end;

More Related