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.

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

AULA 02 PROGRAMAÇÃO LINEAR INTEIRA
Inteligência Artificial
Amintas engenharia.
Exercício do Tangram Tangram é um quebra-cabeças chinês no qual, usando 7 peças deve-se construir formas geométricas.
Algoritmos Genéticos Problema das 8 Rainhas Algoritmo Genético
Interação entre objetos
Software Básico Silvio Fernandes
Campus Curitiba Departamento Acadêmico de Matemática Angela Olandoski Barboza UTFPR – Damat.
Algoritmos Genéticos Alex F. V. Machado.
UNIVERSIDADE FEDERAL DE SANTA MARIA Disciplina:
Inteligência Artificial I
PARTIÇÃO DE BENDERS Secundino Soares Filho Unicamp.
Inteligência Artificial
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Implementação de AG no Balanceamento Interativo de Linhas de Montagem
Arquivos Seqüenciais Inhaúma Neves Ferraz
Estatística Básica Utilizando o Excel
Otimização de Funções Contínuas via Algoritmos Genéticos Adaptado do trabalho realizado por: Frederico Heitor Mônica do Amaral.
Otimização de Funções Contínuas via Algoritmos Genéticos
Árvore Geradora de Peso Mínimo
Classificação e Pesquisa de Dados
Projeto e Análise de Algoritmos
Wagner Santos C. de Jesus
Aula 4 Nomes, Vinculações, Tipos e Escopos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Programação Dinámica Análise de algoritmos UNISUL
Yolanda Dora Martinez Évora Rosana Suemi Nakamura
Jogo de Damas Alex Saito Leonardo Bezerra Bruno Rocha Maria Gabriela
Carlos Alberto de Freitas Pereira Júnior
Inteligência Artificial
Estrutura de decisão e repetição em JAVA
O Portal do Estudante de Computação
Problemas Numéricos com Representação por Números Reais
Calculada a solução óptima
Liane Tarouco CINTED/UFRGS
Cinemática Plana de um Corpo Rígido Cap. 16
Fundamentos de Engenharia de SW
Object Oriented Software Construction (MEYER, Bertrand)
Pontos por Função medindo tamanho de software Prof. Rodrigo Nin
Algoritmos Culturais.
Resolução de problemas por meio de busca
GAPH Integração de Hardware do Usuário ao CoreConnect Leandro Heleno Möller e Leonel Pablo Tedesco Prototipação Rápida e Computação.
Salas de Matemática.
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
Introdução e Busca Cega
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
1 2 Observa ilustração. Cria um texto. Observa ilustração.
SairPróximo Itens de Seleção Probabilidades e Combinatória Cálculo de Probabilidades. Regra de Laplace. ITENS DE SELEÇÃO DOS EXAMES NACIONAIS E TESTES.
SairPróximo Itens de Seleção Probabilidades e Combinatória Cálculo Combinatório. Problemas de Contagem. ITENS DE SELEÇÃO DOS EXAMES NACIONAIS E TESTES.
Anne Magály de PaulaCanuto DIMAp/UFRN
Aula 6 - Estruturas de Controle
Algoritmos Evolutivos Algoritmos Genéticos Introdução
Regiões de Saúde Resolução Normativa – RN nº 259, de 17 de junho de 2011, e suas alterações.
Introdução a Engenharia de Alimentos
FORMATANDO O TRABALHO NO WORD 2007
Cinemática Plana de um Corpo Rígido Cap. 16
NOÇÕES DE PROBABILIDADE
Algoritmos Genéticos Ricardo Prudêncio.
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
PROBLEMA DO EMPACOTAMENTO
Apresentação da Disciplina Inteligência Artificial/Computacional
Inteligência Artificial
Técnicas de Localização para Robôs em Ambientes Internos Claudia Patricia Ochoa Díaz Mestrado em Sistemas Mecatrônicos UnB
Inteligência Artificial
Computação Evolutiva Nome dado ao estudo de algoritmos cuja inspiração é o processo de evolução natural das espécies. Origem: trabalho de um pesquisador.
Universidade do Sul de Santa Catarina Ciência da Computação Técnicas de Inteligência Artificial Aula 10 Algoritmos Genéticos Max Pereira.
Algoritmos Genéticos Alex F. V. Machado 1.
Algoritmos Genéticos Alex F. V. Machado.
Transcrição da apresentação:

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

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)

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

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

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.

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

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

Problema!!!

Problema!!!

Tabela de Movimentos

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

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

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

Exemplo do Projeto

Algoritmo Genético Conceito Características Vantagens

Algoritmo Genético aplicado - Fluxograma

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

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

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

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%

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

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

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}

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

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

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}

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

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;

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;

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

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;

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;

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;

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;

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

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

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; //total de fitness total:=100-(um+dois+tres+...+vintetres+vintequatro+vintecinco);

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

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;

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

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;

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;

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;

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

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;

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;

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

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

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.

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.

E-mails para contato Alex Fernandes da Veiga Machado alexcataguases@hotmail.com Carla Rezende Barbosa Bonin carlacefet@hotmail.com Esteban Walter Gonzales Clua esteban@ic.uff.br Gustavo Montes Novaes gmontes@oi.com.br Mauro Lúcio Ruy de Almeida Filho cefetmauro@yahoo.com.br