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

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 Problema!!!

11 Problema!!!

12 Tabela de Movimentos

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

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

17 Exemplo do Projeto

18 Algoritmo Genético Conceito Características Vantagens

19 Algoritmo Genético aplicado - Fluxograma

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

21 Etapa 2 Definição do tempo limite e do nº de gerações
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 Definição da profundidade (game tree) e da função de fitness
Exemplo: Magic Square Etapa 3 Definição da profundidade (game tree) e da função de fitness Profundidade = 15

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

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

25 Exemplo: Magic Square Etapa 6 Execução do crossover

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

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

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

29 Finalização ou repetição da Etapa 6
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
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 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;

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

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

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; 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 n:=n+1;
numero[n]:=numero[k]; end; for i:=1 to max do resposta:=resposta+inttostr(escolhido[i])+' - '; //Form1.Edit1.Text:=resposta;

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

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 for contador1:=1 to nmovimentos do 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 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]; 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 for contador12:=1 to nmovimentos do ssomo[contador3][contador12]:=cromossomo[contador3][contador12]; end; //mutação for contador13:=1 to 10 do

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 for contador4:=1 to nmovimentos do cromossomo[contador3+20][contador4]:=ssomo[contador3][contador4];

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;
//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 seg:=cromof[2]; cromof[2] := cromof[1]; cromof[1] := seg; end; if(t1=2)then seg:=cromof[5]; cromof[5] := cromof[1];

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

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

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 for contador11:=1 to nmovimentos do cromossomo[contador10][contador11]:=maiorcromo[contador10 ][contador11]; v4:=v4+' '+ inttostr(cromossomo[contador10][contador11]); end;

49 Seleciona Melhores Cromossomos
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;

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 Form1.memo1.clear; Form1.memo2.clear; Form1.memo3.clear; Form1.memo4.clear; Form1.memo5.clear; Form1.memo6.clear; end;

51 Resolver o Problema 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

52 Resolver o Problema if (maiorfit[1]=100) then begin
form1.edit10.text:='Sim'; form1.Button16.Enabled:=true; form1.edit9.text:=inttostr(maiorfit[1]); end else form1.edit10.text:='Não'; 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;

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

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

56 Referências Bibliográficas
[1] Hong, P. T. et al. Applying Genetic Algorithms to Game Search Trees. Soft Computing, 2001. [2] Sugisaka, Masanori et al. Genetic algorithms (GAs) to evolve multiple- agent cooperative systems. Artif Life Robotics, 1999. [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 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 E-mails 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