Вы находитесь на странице: 1из 20

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Universidade de So Paulo Instituto de Cincias Matemticas e de Computao Departamento de Cincias da Computao e Estatstica Primeiro Semestre de 1999

SCE 5774 - Introduo Inteligncia Artificial


Profa.: Sandra Maria Alusio sandra@icmsc.sc.usp.br

Carlos A. Estombelo Montesco cestombe@icmsc.sc.usp.br Pastor W. Gonzales Taco pastor@sc.usp.br

Segundo Projeto:

Problema do Jogo das Oito Fichas (8 Puzzle) Fazendo uso da Busca Bidirecional
1. Introduo 2. Busqueda Bidirecional 2.1 O Uso da Lgica na Resoluo de Problemas 3. Comparao das Diversas Estratgias de Busca 4. Resoluo do Problema Bidirecional 5. Uma notao para descrever a soluo do problema Bidirecional 6. Problema do Jogo das Oito Fichas (8 Puzzle) 6.1 Raciocnio para Frente Versus Raciocnio para Trs 6.2 Combinar o Raciocnio para Frente e Para Trs 6.3 Casamento 6.4 Resoluo de conflitos 7. Algoritmo de Busca Bidirecional 8. Tipos de Busca Bidirecional Usando Largura e Profundidade 8.1 Puzzle A 8.2 Puzzle B 8.3 Puzzle C 8.4 Puzzle D 8.5 Puzzle E 8.6 Anlise dos Resultados Experimentais 8.7 Comparao Final dos Testes para os Diferentes Tipos de Puzzle Concluses Recomendaes Bibliografia

1. Introduo Os algoritmos de busca bidirecional tem o potencial de serem os mais eficientes quando comparados a suas contrapartes os algoritmos unidirecionais. Na verdade isto pode ser considerado quando o tamanho da rvore de busca tomado como um indicador do custo computacional envolvido, isto quanto maior a arvore mais ns podem ser expandidos e maior ser o esforo de busca. Desde que a arvore tenha uma tendncia de incremento exponencial como seus incrementos em profundidade, este ser usualmente o caso no qual a soma das longitudes dos dois pequenos arvores de busca (a busca bidirecional de forward e backward) menor que o tamanho da arvore de busca em largura da busca unidirecional. Alm disso reduzindo o numero total de ns expandindose sem igual, menores rvores de procura tambm oferecem a vantagem de menor custo computational na escolha de menores jogos de nodos abertos. Alguns trabalhos atestam promessa de espaos de procura menores usando algoritmos bidirecionais (Kwa, 1989). Outra

1 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

motivao a substancial reduo no tempo de funcionamento pela implementao da busca bidirecional em paralelo. Porm, isto no significa que seu algoritmo unidirecional rodar mais rapidamente, isto depender do computacional overheads envolvido no algoritmo bidirecional. 2.1 O Uso da Lgica na Resoluo de Problemas Segundo Nilson (1971), frequentemente a soluo de um problema qualquer requer a ajuda de uma anlise lgica. Algumas vezes as anlises mostram que esses problemas so irresoluveis. Por exemplo, no caso do 15 Puzzle, possivel provar que o estado inicial (Figura 1a) no pode produzir a configurao da meta (Figura 1b) em funo da configurao do estado inicial.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Figura 1: (a) Estado inicial

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Figura 1: (b) Estado meta

Assim, na soluo do problema ser necessario executar dedues lgicas que possam surgir em ambos os espaos-estados e na abordagem reduo-problema. Na abordagem espaos-estados, o teste usado para determinar se um estado o estado meta pode requerir ou no dedues lgicas. Adicionalmente, pode-se ter que fazer dedues lgicas para determinar quais os operadores a serem aplicados em um estado dado. Na abordagem reduo-problema, o processo da prova nos permitiria eliminar a possibilidade de resolver subproblemas insolveis. Em adio a essas aplicaes, podemos resolver os problemas de prova, encontrando alguns teoremas matemticos expressados em sistema formal, tal como o clculo de predicados de "firts-order". Assim um completo tratamento de tecnicas de reduo-problema, dever incluir uma discusso de mtodos mecnicos de busca de prova. Algums desses mtodos usam estrategias de busca que so similares a os discutidos nas abordagens dos espaos-estados e da reduo-problema. Porm, muitos dos quebra-cabea existentes considerados como problemas reais requerem da anlise de bom senso, podendo em princpio possuir um formalismo lgico o qual permite resolve-los atravs de tcnicas de busca de prova. 2. Busqueda Bidirecional A busca bidirecional basicamente uma busca simultnea que comea no estado inicial e que retrocede a

2 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

partir da meta, finalizando quando as ambas buscas se encontram em algum ponto intermdio (Figura 2.) No caso dos problemas cujo fator de ramificao b em ambas as direes, a busca bidirecional pode ser muito til (Russell & Norvig, 1996). Se em forma geral assumimos a existncia de uma soluo geral cuja profundidade d, ento a soluo estar a O(2b^(d/2)) = O(b^(d/2)) passos, dado que nas buscas para adiante (top-down) e atras (bottom-up), somente percorresse a metade do trajeto. Podemos entender melhor esta situao atravs de um exemplo real: se b = 10 e d = 6, uma busca preferencial por largura produzir 1 111, 111 (um milho cento onze mil e cento onze) ns. Entretanto, uma busca bidirecional ter xito quando cada uma das direes de busca est a uma profundidade 3, em cujo caso gerasse 2 222 (dois mil e duzentos vente e dos) ns. Na teoria isso fabuloso, mas antes da possivle implantao do algoritmo, necessrio resolver vrias situaes as quais podem serem resumidas em: O mais importante : O que significa fazer a busca "buttom-up" a partir da meta?. Define-se os predecessores de um n n como todos aqueles ns cujo sucessor n. A busca "bottom-up" significa a sucessiva gerao de predecessores a partir do n meta. Se todos os operadores so reversveis, os conjuntos do predecessor e sucessor so idnticos. Em alguns problemas, o clculo dos predecessores pode resultar muito difcil. O que fazer quando so vrios os possveis estados meta?. Em caso de contar com uma lista explcita dos estados meta, podemos aplicar uma funo de predecessor a esses conjuntos de estados meta da mesma forma como aplicada a funo do sucessor em uma busca a partir do estado inicial. Se somente possumos uma descrio do conjunto, sendo que possvel ter uma idia dos "conjuntos de estados que poderiam gerar o conjunto meta", isto resultaria num procedimento enganoso. Assim, por exemplo, poderamos indagar quais seriam o estados a serem considerados predecessores para obter o estado final que coincida com a configurao meta do Puzzle de 8 fichas? necessrio ter uma forma eficiente de verificao de cada um dos novos ns para comprovar se j esto na rvore de busca da outra metade da busca. Temos de definir o tipo de busca a realizar-se em cada uma das metades. Por exemplo na Figura 2, mostra-se duas buscas preferenciais por largura. Ser esta a melhor opo? No termo de complexidade O(b^(d/2)) supe-se que o procedimento para aprovar a interseo das duas fronteiras pode se efetivar em tempo constante (quer dizer, que esta independente da quantidade de estados). Para conseguir que as ambas buscas se encontrem em algum momento, os ns de pelo menos um deles dever ficar retenido na memria (como na busca preferente por largura). Isto quer dizer que a complexidade espacial de uma busca bidirecional que no tem informao da ordem O(b^(d/2)).

3 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Figura 2: Esquema de uma busca preferencial por amplitude bidirecional que est a ponto de conseguir xito, quando um ramo do n de inicio se encontre com um ramo do n meta (Russell & Norvig, 1996). 3. Comparao das Diversas Estratgias de Busca Na Tabela 1, a seguir comparam-se as seis estratgias de busca em funo dos critrios de avaliao. Tabela 1: Avaliao das Estratgias de Busca
Critrios de Avaliao Tempo Espao tima? completa? Preferente por Largura b^d b^d Sim Sim Custo Uniforme b^d b^d Sim Sim Preferente por Profundidade b^m bm No No Limitada em Profundidade b^l bl No Sim, quando l >= d Profundizao Iterativa b^d bd Sim Sim Bidirecional (quando aplicada) b^(d/2) b^(d/2) Sim Sim

b = fator de ramificao; d = profundidade da soluo; m = profundidade mxima da rvore de busca; l = limite de profundidade.

4 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

4. Resoluo do Problema Bidirecional As clausulas de Horn (um programa em PROLOG descrito como uma srie de definies lgicas, sendo que cada uma delas uma clusula horn) que descrevem uma tpica resoluo de problemas podem ser classificadas dentro de trs tipos (Kowalski, 1979):
a) Procedimentos de propsito geral (incluem asseres) com a descrio do domnio do problema; b) Asseres de problemas especficos, os que expressam a hiptese do problema a ser resolvido, e c) A declarao do objetivo o qual expressa esse mesmo problema.

As asseres de problemas especficos podem estar ausentes desde a descrio de uma tarefa dada. Mas quando estes estejam presentes podem ser teis para combinar procuras "top-down" (desde o problema at sua resoluo), com a procura "botom-up" (desde a hiptese ao problema). Porm, importante em este caso evitar a procura "botom-up" das asseres, as quais so parte da descrio geral do domnio do problema. Essa restrio usa da procura "botom-up" combinado com a procura "top-dowm" que uma caracterstica do sistema do teorema da prova de Bledsoe (1971) apud. Kowalski (1979). A maioria dos procedimentos de prova de "botom-up" no distingue entre os diferentes tipos de asseres. Como resultado estes geralmente conduzem a comportamentos de combinao explosiva, gerando asseres que seguem desde uma descrio geral do domnio do problema em adio, para asseres as quais seguem das suposies do problema particular em tratamento. Um critrio til para combinar problemas especficos de procura "botom-up" com procura "top-dowm" uma variao de uma proposta de Pohl (1972) apud. Kowalski (1979) para problemas de procura de rotas: "Para todo passo escolher a direo de concluso que d lugar ao ultimo numero de alternativas" Na direo "top-dowm" o numero de alternativas um numero pequeno de procedimentos os quais se emparelham ao sub-objetivo selecionado em um objetivo declarado. Na direo "butom-up", esto um pequeno numero de asseres as que podem ser derivadas de uma assero. O critrio de Pohl mostrado na Figura 3, a seguir como o problema de procura de rotas:

5 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Figura 3: (a) A busca de espao gerada numa direo, (b) busca de espao gerada na outra direo (Kowalski, 1979). O numero seguinte de cada n indica o numero dos ns sucessores. O critrio de Pohl seleciona a direo associada com a gerao do sucessor de N (Fig. 3b). Dada a previa formulao do problema de procura de rotas, a procura de rotas bidirecional realizada pela combinao das procuras "top-dowm" e "bottom-up". 5. Uma Notao para Descrever a Soluo doProblema Bidirecional Para a distino entre o "bottom-up" e "top-dowm", pode ser usado o desenho de flechas para indicar a direo da procura. Para cada par de tomos emparelhados na configurao inicial de clausulas (das quais um a condio e o outro a concluso) uma flecha dirigida de um tomo ao outro. Para a inferncia top-dowm as flechas so dirigidas das condies s concluses. Para o problema dos Grandparent, obtemos a seguinte representao:

6 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

O raciocnio guiado pela direo das flechas. Este inicia-se com u objetivo inicial, sendo transferido com procedimentos das concluses s condies e termina com a assero. Para a inferncia botom-up, as flechas so dirigidas das concluses s condies, como mostrado a seguir:

O raciocnio inicia-se com as asseres, este transferido com procedimentos das condies s concluses e termina com o objetivo declarado. A definio dos Grandparent pode tambm ser usada em uma combinao top-down, bottom-up, sendo que as diferentes combinaes podem ser representadas usando nmeros que indiquem a seqncia. Para simplificar mostraremos somente a notao associada com a definio dos Grandparent, onde a combinao de direes ser:

a qual representa o algoritmo seguinte:


1) 2) 3)

esperar at x seja confirmado como parente de z, ento encontrar um filho y de z, e finalmente confirmar que x Grandparent de y.

A combinao indicada por:

7 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

representar o algoritmo seguinte:


1) 2) 3)

responder ao problema mostrando que x o Grandparent de y, esperando at x ser confirmado como padre de z, e ento tente mostrar que z padre de y.

6. Problema do Jogo das Oito Fichas (8 Puzzle) O jogo das oito fichas pertence famlia dos blocos deslizveis (Puzzles). Est classe geral do tipo NP completa, sendo possvel achar mtodos de soluo como os dos algoritmos de busca em profundidade, busca em largura, uma combinao de ambos, ou tcnicas de busca como a busca bidirecional. Sendo que este tipo de jogos permite o teste de novos algoritmos em Inteligncia Artificial. O quebra-cabea de 8 ou jogo das oito fichas, cujo exemplo mostra-se na Figura 4a, consiste em um tabuleiro quadrado com nove divises, onde so colocadas oito fichas quadradas, numeradas de 1 a 8, e um espao em vazio. A ficha adjacente ao espao em vazio pode ser deslocada para aquele espao. O objetivo obter, a partir de uma posio inicial (configurao mostrada na Figura 4a), uma posio meta (configurao mostrada na Figura 4b), deslocando as peas at que elas atinjam o local desejado. Um estrategia importante obtida ao descobrir que em lugar de usar operadores como "desliza a ficha 3 ao espao vazio", melhor utilizar operadores como "o espao vazio pode trocar seu lugar com a ficha que est esquerda", dado que existe menos operadores como o anterior. Isto nos permite chegar a seguinte formulao de condies bsicas para resoluo do problema: Estados: A descrio de um estado especifica a localizao de cada uma das oito fichas em um dos nove lugares disponveis. Por motivos de eficincia conbem incluir a localizao do espao vazio Operadores: O espao vazio pode moverse esquerda, direita, acima ou abaixo. Prova da meta: O estado deve coincidir com a configurao da meta mostrada na Figura 4b. Custo da Rota: Cada passo custa 1 (um), porem o custo da rota corresponde ao comprimento da rota.

54 618 732
Figura 4a: Estado inicial

123 8 4

765
Figura 4b: Estado meta

Segundo Rich & Knight (1993) pode acontecer que ao tentar solucionar o quebra cabea, podemos fazer
8 de 20 25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

um movimento insensato. Por exemplo no jogo mostrado na Figura 4a, podemos comear deslocando o nmero 4 para o espao em branco. Depois desse movimento, no podemos mudar de idia e inmediatamente deslocar o nmero 8 para o espao em branco, j que este, em ltima anlise, ter mudado de lugar. Mas podemos voltar atrs e desfazer o primeiro movimento deslocando o nmero 4 para onde ele estava. Depois podemos mover o nmero 8. Note-se que os erros ainda podem ser recuperados. Porm, uma etapa adicional precisou ser executada para desfazer cada etapa incorreta, enquanto nenhuma ao foi necessria para "desfazer" o lema intil. Alm disso, o mecanismo de controle para o solucionador de um quebra-cabea com 8 peas precisa acompanhar a ordem em que as operaes so realizadas, para que elas possam ser desfeitas uma de cada vez, se necessrio. Assim o quebra-cabea de 8 pode ser considerado dentro dos Problemas Recuperveis, nos quais as etapas para a soluo podem ser desfeitas. A recuperabilidade de um problema tem papel importante na determinao da complexidade da estrutura de controle necessria para a soluo do problema. Os problemas recuperveis podem ser solucionados atravs de uma estrutura de controle ligeiramente mais complicada, que s vezes comete erros. O retrocesso ser necessrio para recuperar estes erros, logo a estrutura de controle precisa ser implementada usando-se uma pilha de cima para baixo, na qual as decises so gravadas caso precisem ser desfeitas mais tarde. 6.1 Raciocnio para Frente Versus Raciocnio para Trs O objetivo de um procedimento de busca descobrir um caminho atravs de um espao de problema, a partir de uma configurao inicial at um estado-meta. Embora o PROLOG s busque a partir de um estado-meta, uma busca na verdade pode prosseguir em duas direes: Para frente, a partir dos estados iniciais; Para trs, a partir dos estados-meta. O modelo de sistema de produo do processo de busca proporciona um modo fcil de visualizar o raciocnio para frente e para atrs como processos simetricos. Considere o problema de resolver uma determinada instncia do quebra-cabea de 8. As regras a serem usadas para solucionar o quebra-cabea podem ser escritas como mostra a Figura 4 Usando essas regras, podemos tentar solucionar o quebra-cabea mostrado na Figura4. de uma destas duas maneiras: Raciocinar para frente a partir dos estados inicias. Comece criando uma rvore de sequencias de movimentos, que podem ser solues, comeando com a configurao inicial na raiz da rvore. Gere o prximo nvel da rvore encontrando todas as regras cujos lados esquerdos casem como o n-raiz e usando os lados direitos para criar as novas configuraes. Gere o prximo nvel pegando cada n gerado no nvel anterior e aplicando a ele todas as regras cujos lados esquerdos casem. Continue at gerar uma configurao que case com o estado-meta. Raciocinar para trs a partir dos estados-meta. Comece criando uma rvore de sequencias de movimentos que possam ser solues comeando com a(s) configurao(es)-meta na raiz da rvore. Gere o prximo nvel da rvore encontrando todas as regras cujos lados direitos casem com o n-raiz. So essas as regras que, se pudsemos aplic-las, gerariam o estado que desejamos. Use os lados esquerdos das regras par gerar os ns neste segundo nvel da rvore. Gere o prximo nvel da rvore pegando cada n do nvel anterior e encontrando todas as regras cujos lados direitos casem com cada um deles. Depois use os lados esquerdos correspondientes para gerar os novos ns. Continue at gerar um n que case com o estado inicial. Este mtodo de raciocnio para trs a partir do estado final desejado normalmente chamado de raciocnio dirigido pelos objetivos. Observe que as mesmas regras podem ser usadas para raciocinar para frente a partir do estado inicial e para trs a partir do estado-meta.

9 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Podemos tambm buscar tanto simultaneamente para frente a partir do estado inicial quanto para trs a partir do objetivo at que dois percursos se encomtrem em algum lugar no meio do caminho. Esta estratgia chamada de busca bidirecional. Ela parece interessante se o nmero de ns em cada passo cresce exponencialmente em relao ao nmero de passos que j foram dados. Resultados empricos (Pohl, 1971) sugerem que no caso de buscas cegas, esta estratgia de dividir-e-conquistar realmente eficaz. A Figura 5, mostra porque a busca bidirecional pode ser ineficaz. As duas buscas podem passar uma pela outra, resultando em mais um trabalho do que teria sido necessrio para uma delas, por si s, terminar. Entretanto, se etapas isoladas para frente e para trs forem cumpridas conforme especificado por um programa cuidadosamente construdo para explorar cada uma dessas situaes exatamente nas situaes em que elas so mais lucrativas, os resultados podero ser mais encorajadores. Na verdade, muitas aplicaes de sucesso em IA foram elaborados usando-se uma combinao do raciocnio para frente e para trs, e a maioria dos ambientes de programao em IA fornece suporte explcito para esse raciocnio hbrido.

Figura 5: Busqueda em Largura Bidirecional e Busqueda em Largura Unidirecional Embora em princpio, o mesmo conjunto de regras possa ser usado tanto para o raciocnio para frente quanto para o raciocnio para trs, na prtica ficou provado que til definir duas classes de regras, cada uma delas codificando um determinado tipo de conhecimento: Regras para frente, que codificam conhecimentos sobre como responder a certas configuraes de entrada. Regras para trs, que codifican conhecimentos sobre como atingir determinados objetivos. Quando separamos as regras nessas duas classes, essencialmente acrescentamos a cada regra informaes adicionais que dizem como a regra deve ser usada na soluo do problema. 6.2 Combinar o Raciocnio para Frente e Para Trs s vezes, certos aspectos de um problema so mais bem abordados via encadeamento para frente, e outros aspectos pelo encadeamento para trs. Consideresse um programa de diagnstico mdico com encadeamento para frente. Ele pode aceitar vinte e tantos fatos sobre a condio de um paciente, e depois encadear para frente, com base nesses fatos, para tentar deduzir a natureza e/ou a causa da doena. Agora suponha que, em um determinado ponto, o lado esquerdo de uma regra esteja quase satisfeito - digamos, nove entre dez de suas precondies foram satisfeitas. Pode valer a pena aplicar o raciocnio para trs de maneira direcionada para satisfacer a dcima precondio em vez de esperar que o encadeamento para frente fornea o fato por acidente. Ou talvez a dcima condio exija mais testes mdicos. Nesse caso , o encadeamento para trs pode ser usado para consultar o usurio. Saber se possvel ou no usar as mesmas regras para o raciocnio para frente e para trs tambm depende da forma das regras em si. Se tanto os lados esquerdos quanto os lados direitos contm apenas declaraes,

10 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

ento o encadeamento para frente pode casar as declaraes no lado esquerdo de uma regra e acrescentar descrio do estado a declarao do lado direito. Mas, se procedimentos arbitrrios forem permitidos nos lados direitos das regras, ento elas no sero reversveis. algumas linguagens de regras de produo permiten apenas regras reversveis; outras no. Quando regras irreversveis so usadas, ento preciso que haja um acordo sobre a direo da busca no momento em que as regras forem escritas. Mas, conforme sugerimos, isto e com frequencia um recurso til, porque permite que o criador da regra acrescente conhecimentos de controle s prpias regras. 6.3 Casamento At aqui, descrevemos o proceso de uso de busca para solucionar problemas como sendo a aplicao de regras apropiadas a estados isolados de problemas, para gerar novos estados aos quais as regras podem ento ser aplicadas, e assim por diante, at ser encontradas uma soluo. Sugerimos que a busca inteligente deve envolver a escolha de regras que possam ser aplicadas em um determinado ponto, e que tm grande chance de levar a uma soluo. Mas foi dito pouco sobre como extrair de un conjunto inteiro de regras aquelas que podem ser aplicadas em um determinado ponto. Esta operao requer algum tipo de casamento entre o estado atual e a precondio das regras. Como isto deve ser feito? A resposta a esta pergunta pode ser crucial para o sucesso de um sistema baseado em regras. Temos algumas propostar a seguir : Indexao Casamento com Varaveis Casamento complexo e aproximado 6.4 Resoluo de conflitos O resultado do processo de casamento uma lista de regras cujos antecedentes casaram com a descrio do estado atual, juntamente com quaisquer ligaes da variveis geradas pelo mesmo processo. responsabilidade do mtodo de busca decidir sobre a ordem em que as regras sero aplicadas. Mas, s vezes, til incorporar parte da tomada de deciso ao processo de casamento. Esta fase ento chamada de resoluo de conflitos. Neste caso do quebra-cabea de 8 a abordagen usado para o problema da resoluo de conflitos em um sistema de produo e Preferncia Baseadas em Estados, quer dizer os estados so comparados em cada nivel de explorao. 7. Algoritmo de Busca Bidirecional Para execuso do programa da busca bidirecional recomenda-se aumentar a capacidade de memria ao trabalhar com LPA-PROLOG, digitando no ambiente DOS:
C:\...\pro386w /h16000

/* Busca em Profundidade x Largura */ /* Definio de Operadores Utilizados no Algoritmo, e Bases de Dados Dinmicas para a Contagem de Ns Expandidos eTempo de Execuso*/ :- op(35, xf, e_a_meta ). :- op(35, xfx, atinge_a_meta). :- op(35, xfx, transforma ). :- op(30, xfx, em ). :- op(35, xfx, nao_produz_circulos_em). :- dynamic(countinicio/1). :- dynamic(countmeta/1). :- dynamic(tempo/1). /********************************************************************/ /********************* Predicado Principais *************************/ /*Resolva o Predicado Principal para Iniciar a Busca Bidirecional, Onde inicia as Bases de Dados Dinmicas em Zero*/

11 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

resolva :- init_dynamic, estado_inicial( Inicio ), Meta e_a_meta, /*Carrega o estado inicial e o estado meta nas respectivas variaveis*/ busca_bidirectional( [[ r(raiz, Inicio) ]], [[r(meta, Meta)]], SolucaoDeInicio, SolucaoDeMeta ), /*Inicia a Busca Bidirecional, interccalando os casamentos de busca*/ imprimatempo, imprima( SolucaoDeInicio ), nl, nl, imprima( SolucaoDeMeta ), nl. /*Pergunta se tem a rota de soluo para cada iterao*/ busca_bidirectional( LLSolDeInicio, LLSolDeMeta, SolucaoDeInicio, SolucaoDeMeta ) :procura( LLSolDeInicio, LLSolDeMeta, SolucaoDeInicio, SolucaoDeMeta ). /*Passa ao nvel seguinte gerando os filhos do nvel pai, tanto para a busca da rvore de inicio como da busca da rvore de meta*/ busca_bidirectional( [HeadIni|TailIni], [HeadMeta|TailMeta], SolucaoDeInicio, SolucaoDeMeta) :ache_todos( ExtensaoAteUmFilhoIni, estende_ate_filho( HeadIni, ExtensaoAteUmFilhoIni ), ExtensoesIni ), soma_ini(ExtensoesIni), /*Conteo dos ns expandidos desde o n de inicio*/ ap( ExtensoesIni, TailIni, ListaEstendidaIni ), /*Adiciona todos os ns filhos listapara a busca em profundidade*/ ache_todos( ExtensaoAteUmFilhoMeta, estende_ate_filho( HeadMeta, ExtensaoAteUmFilhoMeta ), ExtensoesMeta ), soma_meta(ExtensoesMeta), /*Conteo dos ns expandidos desde o n meta*/ ap( TailMeta, ExtensoesMeta, ListaEstendidaMeta ), /*Adiciona todos os ns filhos para a busca em largura*/ busca_bidirectional( ListaEstendidaIni, ListaEstendidaMeta, SolucaoDeInicio, SolucaoDeMeta ). /*Extende tudos os ns filhos de um n determinado*/ estende_ate_filho( [r(Ramo,N)|Trajetoria], [r(Op,Filho), r(Ramo,N)|Trajetoria] ) :operacao( Op ) transforma N em Filho, not Filho nao_produz_circulos_em Trajetoria. /*Verifica que no existam ciclos na rota*/ Estado nao_produz_circulos_em Trajetoria :membro( r( Operacao, Estado ), Trajetoria ). /* Nesta Linha debe-se fazer a comparao Bidirecional */ r( RamoIni, ML ) atinge_a_meta r( RamoMeta, MP ):ML = MP. /* nova comparao */ procura( LLSolDeInicio, LLSolDeMeta, SolucaoDeInicio, SolucaoDeMeta ) :procura2( LLSolDeInicio, LLSolDeMeta, SolucaoDeInicio, SolucaoDeMeta ). procura( [_|LTailSolIni] , LLSolDeMeta, SolucaoDeInicio, SolucaoDeMeta ) :procura( LTailSolIni, LLSolDeMeta, SolucaoDeInicio, SolucaoDeMeta ). /*Comparao dos ns de inicio com os ns meta, em funo do tipo de busca bidirecional*/ procura2( [[ HeadIni|TailIni ] | _], [[ HeadMeta|TailMeta ] | _], SolucaoDeInicio, SolucaoDeMeta ) :HeadIni atinge_a_meta HeadMeta, SolucaoDeInicio = [ HeadIni | TailIni ], SolucaoDeMeta = [ HeadMeta | TailMeta ], !. procura2( LLSolDeInicio, [_|LTailMeta], SolucaoDeInicio, SolucaoDeMeta ) :procura2( LLSolDeInicio , LTailMeta, SolucaoDeInicio, SolucaoDeMeta ). /*********************************************************************/ /*********************** Base de Conhecimentos ***********************/ operacao(esq) operacao(esq) operacao(esq) operacao(esq) operacao(esq) operacao(esq) operacao(cima) operacao(cima) operacao(cima) operacao(cima) operacao(cima) operacao(cima) operacao(dir) operacao(dir) operacao(dir) operacao(dir) operacao(dir) operacao(dir) transforma [A,*,C,D,E,F,H,I,J] em [*,A,C,D,E,F,H,I,J]. transforma [A,B,C,D,*,F,H,I,J] em [A,B,C,*,D,F,H,I,J]. transforma [A,B,C,D,E,F,H,*,J] em [A,B,C,D,E,F,*,H,J]. transforma [A,B,*,D,E,F,H,I,J] em [A,*,B,D,E,F,H,I,J]. transforma [A,B,C,D,E,*,H,I,J] em [A,B,C,D,*,E,H,I,J]. transforma [A,B,C,D,E,F,H,I,*] em [A,B,C,D,E,F,H,*,I]. transforma [A,B,C,*,E,F,H,I,J] em [*,B,C,A,E,F,H,I,J]. transforma [A,B,C,D,*,F,H,I,J] em [A,*,C,D,B,F,H,I,J]. transforma [A,B,C,D,E,*,H,I,J] em [A,B,*,D,E,C,H,I,J]. transforma [A,B,C,D,E,F,*,I,J] em [A,B,C,*,E,F,D,I,J]. transforma [A,B,C,D,E,F,H,*,J] em [A,B,C,D,*,F,H,E,J]. transforma [A,B,C,D,E,F,H,I,*] em [A,B,C,D,E,*,H,I,F].

transforma [A,*,C,D,E,F,H,I,J] em [A,C,*,D,E,F,H,I,J]. transforma [A,B,C,D,*,F,H,I,J] em [A,B,C,D,F,*,H,I,J]. transforma [A,B,C,D,E,F,H,*,J] em [A,B,C,D,E,F,H,J,*]. transforma [*,B,C,D,E,F,H,I,J] em [B,*,C,D,E,F,H,I,J]. transforma [A,B,C,*,E,F,H,I,J] em [A,B,C,E,*,F,H,I,J]. transforma [A,B,C,D,E,F,*,I,J] em [A,B,C,D,E,F,I,*,J].

operacao(baixo) transforma [A,B,C,*,E,F,H,I,J] em [A,B,C,H,E,F,*,I,J]. operacao(baixo) transforma [A,B,C,D,*,F,H,I,J] em [A,B,C,D,I,F,H,*,J]. operacao(baixo) transforma [A,B,C,D,E,*,H,I,J] em [A,B,C,D,E,J,H,I,*]. operacao(baixo) transforma [*,B,C,D,E,F,H,I,J] em [D,B,C,*,E,F,H,I,J]. operacao(baixo) transforma [A,*,C,D,E,F,H,I,J] em [A,E,C,D,*,F,H,I,J]. operacao(baixo) transforma [A,B,*,D,E,F,H,I,J] em [A,B,F,D,E,*,H,I,J]. /********************************************************************/ /************************ Testes ***********************/

12 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

/*Test A*/ estado_inicial([1,2,3,4,5,6,7,8,*]). [3,*,1,2,5,6,4,7,8] e_a_meta.

/*Test B*/ /* estado_inicial([1,2,3,4,5,6,7,8,*]). [*,3,1,2,5,6,4,7,8] e_a_meta. */ /*Test C*/ /* estado_inicial([1,2,3,4,5,6,7,8,*]). [2,3,1,*,5,6,4,7,8] e_a_meta. */ /*Test D*/ /* estado_inicial([1,2,3,4,5,6,7,8,*]). [2,3,*,1,5,6,4,7,8] e_a_meta. */ /* Test E */ /* estado_inicial([1,2,3,4,5,6,7,8,*]). [1,2,3,5,*,6,4,7,8] e_a_meta. */

/********************************************************************/ /************************ Predicados de Ajuda ***********************/ init_dynamic :asserta(countinicio(0)), asserta(countmeta(0)), ticks(Tempo), asserta(tempo(Tempo)). imprimatempo :- ticks(Tempo2), retract(tempo(Tempo)), write('*********** Resultados **********'),nl,nl, write('O Tempo Rodado em ticks :'), Ticks is Tempo2 - Tempo, write(Ticks),nl,nl. /*Contadores da expanso dos ns de inicio e de meta*/ soma_ini([]):-!. soma_ini([Head|Tail]) :- retract(countinicio(N)), Tot is N + 1, asserta(countinicio(Tot)), soma_ini(Tail),!. soma_meta([]):-!. soma_meta([Head|Tail]) :- retract(countmeta(N)), Tot is N + 1, asserta(countmeta(Tot)), soma_meta(Tail),!.

/*Adiciona uma lista para outra lista*/ ap([],X,X) :- !. ap([X|Y],Z,[X|W]) :- ap(Y, Z, W). /*Verifica se um elemento encontra-se dentro de uma lista*/ membro(X,[X|_]) :- !. membro(X,[_|Y]) :- membro(X,Y). ache_todos(X, Y, Z) :- findall(X, Y, Z), !. ache_todos(_, _, []). imprima([r(raiz,Raiz)]) :- !, write('Estado Inicial( Busca De Inicio - Profundidade) : '), write(Raiz), write('.'),nl, retract(countinicio(Nos)), write('Nos Expandidos:'), write(Nos),nl. imprima([r(meta,Meta)]) :- !, write('Estado Final ( Busca De Meta - Largura write(Meta), write('.'),nl,

) : '),

13 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

retract(countmeta(Nos)), write('Nos Expandidos:'), write(Nos),nl. imprima([r(Ramo,Nodo)|R]) :- imprima(R), nl, write(Ramo), write(' e ,portanto, temos: '), nl, tab(4),write(Nodo), write('.').

8. Tipos de Busca Bidirecional Usando Largura e Profundidade Foram definidas as seguintes combinaes de busca, testadas para cada um dos tipos de 8-puzzle:
Largura x Largura; Largura x Profundidade; Profundidade x Largura, e Profundidade x Profundidade.

Em cada teste foi gerado, alem do estado meta, indicadores que possibilitem avaliar o comportamento de cada combinao de algoritmos mostradas acima (Tabelas 2, 3, 4, 5 e 6). Para isto obteve-se valores do tempo de execuso, medido em ticks do relogio do computador (como mostrado nas tabelas de cada tipo de Puzzle). Pode-se observar que alguns valores dos tempos esto indicados com ~ 0, significando que pela rapidez do processamento valor de saida do tempo considerado como de valor zero, sem serlo na realidade. Por isto indicamos que as caractersticas do computador utilizado nos testes so os seguintes: Pentium II, MMX, Processador Intel Inside, Sistema Operativo Windows. Alm disso obteve-se tambm valores dos nmeros de Ns expandidos para cada rvore, do estado de inicio e do estado meta, assim como os Numeros de ns na rota que corresponde a soluo do puzzle. 8.1 Puzzle A:

123 456 78
Estado inicial

256 478
Estado meta

Tabela 2
Largura x Largura Tempo (ticks) Ns expandidos Numero de ns na rota 14080 160 - 166 8-7 2560 91 - 95 7 - 62 Largura x Profundidade 256 29 - 29 15 - 4 Profundidade x Largura 512 38 - 40 18 - 21 Profundidade x Profundidade

14 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

8.2 Puzzle B:

123 456 78
Estado inicial

31 256 478
Estado meta

Tabela 3
Largura x Largura Tempo (ticks) Ns expandidos Numero de ns na rota 14336 164 - 164 8-8 Largura x Profundidade 33024 212 - 213 8 - 54 ~0 21 - 24 12 - 4 Profundidade x Largura 256 19 - 21 11 - 5 Profundidade x Profundidade

8.3 Puzzle C:

123 456 78
Estado inicial

231 56 478
Estado meta

Tabela 4
Largura x Largura Tempo (ticks) 77312 3584 Largura x Profundidade 256 Profundidade x Largura 256 Profundidade x Profundidade

15 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Ns expandidos Numero de ns na rota

297 - 271 9-8

99 - 106 7 - 58

35 - 34 12 - 5

19 - 20 11 - 6

8.4 Puzzle D:

123 456 78
Estado inicial

23 156 478
Estado meta

Tabela 5
Largura x Largura Tempo (ticks) Ns expandidos Numero de ns na rota ~0 7-7 3-3 256 34 - 31 5-5 Largura x Profundidade ~0 13 - 16 4-4 Profundidade x Largura ~0 5-5 3-3 Profundidade x Profundidade

8.5 Puzzle E:

123 456 78
Estado inicial

123 5 6

478
Estado meta

16 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Tabela 6
Largura x Largura Tempo (ticks) Ns expandidos Numero de ns na rota ~0 4-6 2-2 ~0 4-6 2-2 Largura x Profundidade ~0 4-6 2-2 Profundidade x Largura ~0 4-6 2-2 Profundidade x Profundidade

8.6 Anlise dos Resultados Experimentais Os esperimentos foram conduzidos por comparao pelos resultados obtidos em funo dos ns expandidos em cada tipo de busqueda bidirecional, e os ns de rota de casamento. Em ambos os casos tomou-se em considerao o estado de busqueda para frente desde o inicio, e os estado de busca para trs desde a meta. Assim possivel fazer uma comparao do tipo de busca bidirecional nos diferentes tipos de puzzle, tratando-se de determinar a variavilidade dos resultados.

Figura 6 Na Figura 6 observamos que a respito do nmero de ns expandidos, a combinao de largura x profundidade junto a largura x largura, ambos se expandem em uma quantidade de ns maior que s outras duas combinaes. Notemos que este resultado es especificamente para o Tipo de Puzzle B Na seguinte Figura 7, em funo dos Ns da rota soluo, podemos observar que na combinao largura x profundidade, a busca por profundidade gerou maior numero de ns para encontrar a rota soluo, quando a busca iniciou-se no n meta, confirmando-se que este tipode busca encontra a soluo mais distante do n onde iniciou-se a busca (meta) quando combinada com a busca em largura.

17 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Figura 7

Para o Tipode Puzzle C, como observado na Figura 8, podemos afirmar que em funo do numero de ns expandidos, a combinao largura x largura gerou a maior quantidade de ns, a respeito das outras combinaes, sendo esta combinao dependente da memria do computador. O caso oposto a isso observado na combinao profundidade x profundidade, onde gerou-se o menor numero de ns expandidos. Isso no significa que esta ultima seja uma combinao ideal, pois pode acontecer que os espaos de busca sejam distantes um do outro, impossibilitando encontrar-se, gerando assim o pior caso de busca unidirecional em ambos os sentidos de busca.

Figura 8 Para o caso dos nmero de ns da rota, no Tipode Puzzle C, podemos observar na seguinte Figura 9, este segue um comportamento muito similar ao produzido no Tipo de Puzzle B .

18 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Figura 9

8.7 Comparao Final dos Testes para os Diferentes Tipos de Puzzle Para efeitos de um melhor entendimento foi gerada a seguinte Figura 10, onde so comparados os numeros de Ns expandidos para cada Tipo de Puzzle, observamos que estes valores so maiores no caso da combinao largura x largura ((inicio)Lar --(meta)Lar). Alm disso estes valores nos mostram a maior dificuldade do Puzzle C, a respeito do Puzzle D. Para todas os Puzzles na combinao profundidade x profundicade ((inicio)Pro--(meta)Pro) o nmero de ns expandidos foram poucos, sendo que isto no necesariamente seja a melhor combinao, como explicado anteriormente .

Figura 10

Concluses:

19 de 20

25/9/2011 22:13

8_Puzzle

http://www.icmc.sc.usp.br/~sandra/G5_t2/8_Puzzle.htm

Algoritmos de busca bidirecional so de especial interes porque tm o potencial para procurar pequenos espaos e reduzem significativamente o tempo de funcionamento por implementao paralela. Enquanto o ltimo geralmente verdade, o primeiro pode ser enganoso quando existem mltiplos caminhos de soluo comparveis. Aplicado de forma incorreta o mtodo de busca bidirecional, pode originar os piores casos de busca, transformando-se em casos de busca unidirecionais onde os espaos de busca so distantes entre se. Com os teste aplicados, e as respectivas anlises, logrou-se diferenciar a dificuldade na soluo dos diferentes tipos de Puzzle, em funo do nmero de ns expandidos para cada caso. Recomendaes Prope-se aprofundar na pesquisa da busca bidirecional fazendo uso de algoritmos heuristicos, como os desenvolvidos por Champeaux & Sint (1977), Kwa (1989), Manzini (1995). Testas outras combinaes de Puzzles para acrescentar mais informaes, a respeito dos resultados obtidos.

Bibliografia Bsica:

Nilson, J. N. (1971) Problem-Solving Methods in Artificial Intelligence. McGraw-Hill, Unites Stated of America. Russell, S. & Norvig, P. (1996) Inteligencia Artificial: Un Enfoque Moderno. Prentice Hall, Mxico. Kowalski, R. (1979) Logic for Problem Solving. Elsevier Science Publishing Co., Inc. Rich, E. & Knight, K. (1993) Inteligncia Artificial. Makron Boks, So Paulo. Bibliografia Referncial:

Champeaux, D & Sint, L. (1977) An Improved Bidirectional Heuristic Search ALgorithm. Journal of the Association for Computing Machinery, vol. 24, N 2, pp. 177-191. _____________________(1977) An Optimality Theorem for a Bi-directional Heuristic Search Algorithm. The Computer Journal, vol. 20, N 2, pp. 148-150. Manzini, G. (1995) BIDA*: An Improved Perimeter Search Algorithm. Artificial Intelligence 75, pp. 347-360. Kwa, J. B. H. (1989) BS*: An Admissible Bidirectional Staged Heuristic Search Algorithm. Artificial Intelligence 38, pp. 95-109. Monard, M. C. & Nicoletti, M. C. (1993) Programa Prolog para Processamento de Listas e Aplicaes. Notas Didticas de do ICMSC, So Carlos-SP.

20 de 20

25/9/2011 22:13

Вам также может понравиться