Upload
internet
View
105
Download
0
Embed Size (px)
Citation preview
TUTORIAL: SBGAMES 2009Criação de um Jogo de
Quebra-Cabeças Usando Algoritmo Genético como
Motor de ResoluçãoAutores:
Alex Fernandes da Veiga MachadoCarla Rezende Barbosa BoninEsteban Walter Gonzales CluaGustavo Montes NovaesMauro Lúcio Ruy de Almeida Filho
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)
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
Algumas Apresentações (2008)
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
Tipos Utilizados• Algoritmo Genético
• GRASP
• AG-GRASP
Áreas de Atuação
Implementação das Heurísticas
Heurísticas e Aplicações
Jogo Modelo para Tutorial
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.
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)
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
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
Exemplo: Magic SquareEtapa 1
Representação de todas as situações
21
Exemplo: Magic Square
Etapa 2Definição do tempo limite e do nº de gerações
Tempo Limite (segs.) = 10
N de Gerações = 10
22
Exemplo: Magic SquareEtapa 3
Definição da profundidade (game tree) e da função de fitness
Profundidade = 15
23
Exemplo: Magic Square
Etapa 4Definição da taxa de crossover e mutação
Crossover= 50%
Mutacao= 10%
24
Exemplo: Magic Square
Etapa 5Geração da população inicial de cromossomos
25
Exemplo: Magic SquareEtapa 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
Exemplo: Magic Square
Etapa 7Execuçã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
Exemplo: Magic Square
Etapa 8Cálculo do valor de fitness de cada offspring
28
Exemplo: Magic Square
Etapa 9Seleção dos melhores candidatos (critério elitista)
29
Exemplo: Magic Square
Etapa 10Finalização ou repetição da Etapa 6
Solucao= {16, 9, 2 1, 4, 8, 7, 10, 16, 4, 12, 13, 7, 11, 4}
Códigos e Procedures
Procedimentos que devem ser criados para viabilizar a
implementação dos conceitos do Algoritmo Genético
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;
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
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
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;
Troca de Botões
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
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;
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;
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
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;
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;
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
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;
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;
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);
Troca Interna com Entrada de Genesprocedure 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;
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;
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;
Alinha os Cromossomos (melhores fitness)
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;
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;
Seleciona Melhores Cromossomos
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;
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
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 begin form1.edit10.text:='Não'; form1.edit9.text:=inttostr(maiorfit[1]); end;
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;
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;
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, 2001. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill,. ISBN 0-262-03293-7.
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• [email protected]
Carla Rezende Barbosa Bonin• [email protected]
Esteban Walter Gonzales Clua• [email protected]
Gustavo Montes Novaes• [email protected]
Mauro Lúcio Ruy de Almeida Filho• [email protected]