A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

TUTORIAL: SBGAMES 2009 Criação de um Jogo de Quebra-Cabeças Usando Algoritmo Genético como Motor de Resolução Autores: Alex Fernandes da Veiga Machado.

Apresentações semelhantes


Apresentação em tema: "TUTORIAL: SBGAMES 2009 Criação de um Jogo de Quebra-Cabeças Usando Algoritmo Genético como Motor de Resolução Autores: Alex Fernandes da Veiga Machado."— Transcrição da apresentação:

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

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 6ª Feira Brasileira de Ciências e Engenharia (FEBRACE), na Universidade de São Paulo (USP), São Paulo 59 th 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 Algumas Apresentações (2008)

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

5 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 6 Tipos Utilizados Algoritmo Genético GRASP AG-GRASP Áreas de Atuação Implementação das Heurísticas Heurísticas e Aplicações

7 Jogo Modelo para Tutorial

8

9 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

10 10 Problema!!!

11 11 Problema!!!

12 12 Tabela de Movimentos

13 13 Á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.

14 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)

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

16 16 Conceitos gerais Gene Cromossomo Geração Inicial Mutação Crossover Fitness

17 17 Exemplo do Projeto

18 18 Algoritmo Genético Conceito Características Vantagens

19 19 Algoritmo Genético aplicado - Fluxograma

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

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

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

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

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

25 25 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}

26 26 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}

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

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

29 29 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}

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

31 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;

32 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; Troca de Botões

33 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; Troca de Botões

34 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; Troca de Botões

35 Embaralhar Imagem procedure aleatorio(max: integer); var numero: array[ ] 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

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

37 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;

38 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; Definição dos Possíveis Movimentos

39 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;

40 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;

41 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; //mutação for contador13:=1 to 10 do begin

42 Realização da Mutação for qnt:=1 to taxa1 do begin gene:=1+random(nmovimentos); muta:=random(51); ssomo[contador13][gene]:=muta; 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;

43 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;

44 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);

45 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;

46 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;

47 dan:=dan+1; nad:=nad+1; 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; Alinha os Cromossomos (melhores fitness)

48 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;

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

50 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;

51 if (solu<>1)then begin primeiro(); //gerar população inicial segundo(); //calcula o fitness da população inicial solu:=1; end; terceiro(); //faz o crossover quarto(); //calcula o fitness do crossover quinto(); //faz a mutação sexto(); //calcula o fitness da mutação setimo(); //alinha em ordem decrescente de fitness oitavo(); //pega os dez melhores Resolver o Problema

52 if (maiorfit[1]=100) then begin form1.edit10.text:='Sim'; form1.Button16.Enabled:=true; form1.edit9.text:=inttostr(maiorfit[1]); end else begin form1.edit10.text:='Não'; form1.edit9.text:=inttostr(maiorfit[1]); end;

53 Resolver o Problema Application.ProcessMessages; form1.edit1.text:=''; for contador15 :=1 to nmovimentos do begin cromoescolhido[contador15]:=maiorcromo[1][contador15]; s2[contador15]:=cromoescolhido[contador15]; form1.edit1.text:=form1.edit1.Text+ ' '+ inttostr(cromoescolhido[contador15]); end; if (maiorfit[1]=100)then break; end;

54 Resolver o Problema form1.edit3.Text:=inttostr(constante); DecodeDateTime(Now, ano, mes, dia, horas, minutos2, segundos2, milisegundos2); form1.Edit7.Text:=inttostr(60000*(minutos2- minutos1)+1000*(segundos2-segundos1)+milisegundos2- milisegundos1); end; procedure TForm1.Button11Click(Sender: TObject); begin botaoag(); end;

55 Demais Áreas de Aplicação de AG Jogos de Raciocínio como: Sudoku, Jogos de Tabuleiro Softwares aplicados à Economia

56 56 Referências Bibliográficas [1] Hong, P. T. et al. Applying Genetic Algorithms to Game Search Trees. Soft Computing, [2] Sugisaka, Masanori et al. Genetic algorithms (GAs) to evolve multiple- agent cooperative systems. Artif Life Robotics, [3] Lacerda, E. G. M.; Carvalho, A. C. P. L. F. Introdução aos algoritmos genéticos. In: Galvão, C.O., Valença, M.J.S. (orgs.) Sistemas inteligentes: aplicações a recursos hídricos e ciências ambientais. Porto Alegre: Ed. Universidade/UFRGS : Associação Brasileira de Recursos Hídricos. [4] Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest, Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill,. ISBN

57 57 Agradecimentos Aos nosso orientadores Alex Fernandes da Veiga Machado e Esteban Clua Ao CEFET-MG - Campus Leopoldina Aos nossos familiares e a todos aqueles que ajudaram direta ou indiretamente. À atenção de todos aqui presentes.

58 58 s para contato Alex Fernandes da Veiga Machado Carla Rezende Barbosa Bonin Esteban Walter Gonzales Clua Gustavo Montes Novaes Mauro Lúcio Ruy de Almeida Filho


Carregar ppt "TUTORIAL: SBGAMES 2009 Criação de um Jogo de Quebra-Cabeças Usando Algoritmo Genético como Motor de Resolução Autores: Alex Fernandes da Veiga Machado."

Apresentações semelhantes


Anúncios Google