Trabalho de Inteligecia Artificial Agentes de Procura

May 9, 2018 | Author: Evódia Chivinda Wafunga | Category: Computational Complexity Theory, Time, Algorithms, Limit (Mathematics), Memory
Share Embed Donate


Short Description

Download Trabalho de Inteligecia Artificial Agentes de Procura...

Description

UNIVERSIDADE KATYAVALA BWILA INSTITUTO SUPERIOR POLITECNICO DO LOBITO LICENCIATURA EM INFORMÁTICA

TEMA:

BENGUELA/2012

UNIVERSIDADE KATYAVALA BWILA INSTITUTO SUPERIOR POLITECNICO DO LOBITO LICENCIATURA EM INFORMÁTICA

TEMA:

ELABORADO POR: DAVID CANDELE CHIYELU CHITUNDA ERNESTO PEDRO TCHIWALE JOÃO ABEL MARTINS DA SILVA JOAQUIM TCHIPILICA JOSÉ DANILSON ALBERTO ORNÊLO SAMUEL PAULO KAMBONGA VENÂNCIO JOSÉ COSTANTINO O PROFESSOR:

WALDEMAR RAIMUNDO WAFUNGA

BENGUELA/2012

DEDICATÓRIA Dedicamos este trabalhos com muita vénia e consideração a todos os colegas da UKB especialmente do ISP, e não só aos nossos familiares e a todos leitores que lhes sirva de guia de aprendizagem nesta cadeira de Inteligência Artificial de formas a progredirem termos de conhecimento cientifico.

AGRADECIMENTO Em primordial instância queremos agradecer a DEUS TODO-PODEROSO pelo fôlego de vida, aos nossos familiares pelo sustento, e a todos aqueles que directas ou indirectamente contribuíram na elaboração deste trabalho.

PENSAMENTO  A reconciliação é o princípio de pacificação pacificação de duas cidades cidades em guerra. “David”

ÍNDICE INTRODUÇÃO PROCURA CEGA - EM LARGURA PRIMEIRO - EM PROFUNDUDADE PRIMEIRO - PROFUNDUDADE LIMITADA PROCURA HEURÍSTICA - PROCURA SÔFREGA - TREPA COLINAS - PROCURA TABU CONCLUSÃO BIBLIOGRAFIA

INTRODUÇÃO Historicamente, a procura de métodos genéricos de resolução de problemas foi uma das primeiras áreas de teste para os investigadores em inteligência artificial. Os ambientes em que ocorrem os problemas são tipicamente acessíveis, geralmente deterministas e estáticos. As diferentes estratégias serão agrupadas em função do grau de conhecimento que o agente tem sobre o domínio do problema. Será feito ainda um estudo da complexidade das diferentes propostas e serão apresentados princípios heurísticos para escolha da estratégia mais adequada.

Agentes de procura é assim denominado devido as analise das diferentes estratégias possíveis agrupados em função do grau de conhecimento que o agente tem para resolução de problemas.

PROCURA CEGA Quando não existe nenhuma informação sobre o problema que nos permita ajudar no processo de geração e teste dos nós, teremos de nos socorrer de uma estratégia dita cega. O que essas estratégias fazem basicamente é definir um modo Sistemático de navegação na árvore de procura. Existem fundamentalmente duas possibilidades, cada uma com variantes: Uma consiste em analisar repetidamente um sucessor do último nó analisado; outra baseia-se na análise de todos os sucessores de dado nó, antes de passar para a análise de todos os sucessores dos sucessores. Vejamos os algoritmos de forma mais detalhada.

EM LARGURA PRIMEIRO Numa árvore de procura cada nó tem um nível. Assim a raiz tem nível 0, os seus sucessores têm nível 1, os sucessores dos sucessores têm nível 2, etc. A estratégia de procurar em largura primeiro caracteriza-se pelo facto de os nós do nível n serem todos analisados antes dos nós do nível n+1. Vamos aos exemplos de umas das estradas de Portugal e admitimos de novo que pretendemos ir de Coimbra para Faro. A árvore de procura irá passando sucessivamente pelas etapas seguinte. Inicialmente a árvore de procura terá apenas um nó correspondente a Coimbra o estado inicial. Como Coimbra não corresponde ao objectivo (Faro), o nó correspondente ira ser expandido, aparecendo então os nós do nível seguinte e que são os vizinhos de Coimbra.

 Aveiro Viseu Coimbra Leiria C. Branco O algoritmo em largura primeiro irá analisar sucessivamente estes nós. Uma vez mais nenhum deles é a solução, passará para os nós do nível 2, como se indica na figura abaixo, processo de expansão e análise continuaria até se alcançar o objectivo Faro.

Do pondo de vista algorítmico, se estivermos a resolver um pr oblema em que apenas interessa a solução, então não será necessário manter guardada toda a árvore de procura, mas sim a sua fronteira. Caso nos interesse o caminho como no exemplo presente teremos de manter todos os caminhos que ligam a raiz da árvore aos na fronteira. Para assegurar que a estratégia tem o comportamento indicado, a fronteira deverá ser guardada numa fila, os elementos á cabeça da fila serão os primeiros a ser analisados e os sucessores de um nó gerados pela estratégia serão introduzidos no fim da fila associado a uma fila, existe um conjunto de funções. As funções FazFila, VaziaFila, RetiraFila e InseriFila são as usuais para o tipo de dados abstracto fila, permitindo respectivamente a construção de uma fila, o teste de filas vazias retirar um elemento da frente da fila ou acrescentar elementos no fim da fila. Esta última é a responsável pelo efeito de procura em largura, aparecendo aqui passada como argumento. Podemos descrever o algoritmo:

EM PROFUNDIDADE PRIMEIRO Procura em Profundidade primeiro segue a filosofia completamente distinta dos dois algoritmos anteriormente apresentados. Na realidade partindo da raiz, o algoritmo vai expandir um nó, escolher um dos seus sucessores, expandi-lo por sua vez. Continuando o processo até que eu encontre a solução ou nó não possa ser mais expandido. Neste ultimo caso, continua o processo com um irmão do último nó analisado, caso exista, ou regressa ao nível anterior para continuar o processo. Tentemos então ir de Coimbra a Faro. Comecemos por Coimbra, que não sendo a solução vai originar a expansão do nó.

Coimbra

 Aveiro

Viseu

Leiria

C. Branco

Fig. Árvore de procura após expandir Coimbra.  Admitamos que o algoritmo opta por por Escolher C. Branco para analisar. O facto de não ser a Solução, vai originar a sua expansão (fig 3.21).

Coimbra  Aveiro

Viseu

Leiria Guarda

C. Branco

Portalegre

Évora

Coimbra

Fig.  – Árvore de procura após ter expandido Castelo Branco

Suponhamos que a análise se faz com o Portalegre, que não sendo a solução, origina a sua expansão crescendo a arvore mais um nível.

Coimbra  Aveiro

Viseu

Leiria Guarda

C. Branco Portalegre

C. Branco

Évora

Coimbra

Évora

Fig.  – Árvore de procura depois da escolha e expansão de Portalegre

Para garantir que o nosso algoritmo se comporte conforme indicado, basta que a fronteira da árvore seja guardada numa pilha. Os objectos pilhas são manipuladas pelas funções usuais: Fazpilha, Vaziapilha, RetiraPilha e InserePilha, que criam uma pilha, testam se uma pilha não tem elementos, retiram o elemento à cabeça da pilha e inserem elementos à cabeça da pilha, respectivamente. A função mais importante é a função InserePilha, que determina o efeito de procura em profundidade. Assim o a lgoritmo mantém o aspecto genérico já anteriormente apresentado.

Algoritmo  – Algoritmo de procura em profundidade Primeiro

O algoritmo tem um comportamento análogo ao da procura em largura primeiro, começando por formar uma pilha contendo apenas o estado inicial (1). Entra depois o ciclo ( 2) e, caso a pilha não esteja vazia, sinal de que analisou todos os nós, ( 2.1), retira o elemento a cabeça da pilha ( 2.2) e analisao, relativamente ao teste objectivo ( 2.3); se, por acaso não existirem mais elementos na pilha termina falhando ( 2.1.1). Se o elemento retirado for solução, devolve-o (2.3.1), senão determina os seus sucessores de acordo com os operadores que lhes são aplicáveis os quais são inseridos a cabeça da pilha (2.3.2). Vejamos como evolui o conteúdo da variável l_nós, ao longo das primeiras iterações do algoritmo.

ITERAÇÃO 0 1 2 3

l_nós [Coimbra] [C. Branco, Aveiro, Viseu, Leiria,] [Portalegre, Évora, Guarda, Coimbra, Aveiro, Viseu, Leiria] [Évora, C. Branco, Évora, Guarda, Coimbra, Aveiro, Viseu, Leiria]

Tab.  – O conteúdo da pilha ao longo das primeiras iterações do algoritmo

Olhando para Tab. 3.5, verificamos que os nós dos níveis mais pequenos que são escolhidos vão ficando para trás da pilha, sendo por isso analisado posteriormente àqueles que se encontram mais afundo na arvore de procura. Verificamos também a possibilidade de existência de ciclos. Finalmente, o número de nós na pilha aparenta não crescer tão rapidamente como no caso das estratégias em largura primeiro. Podemos avaliar de forma mais precisa estes aspectos e as suas consequências? consequências?  A primeira conclusão da estratégia é de que não é completa, mesmo que o espaço de procura seja finito. Na realidade, basta que exista um ciclo no caminho de aprofundamento escolhido pelo algoritmo para ele não mais terminar. Por exemplo, se o sucessor de C. Branco escolhido fosse Coimbra, entraríamos num ciclo infinito que gerava o caminho Coimbra  – C. Branco  – Coimbra – C. Branco – etc. Também não é discriminadora. Com efeito podem existir duas soluções, uma num nível alto e outra num nível baixo, que o algoritmo pode seguir pelo caminho que leva à primeira. Caso os custos associados aos caminhos sejam não negativos, é lógico que a solução de menor custo não será encontrada. Por exemplo, pode acontecer que para ir de Coimbra a C. Branco a opção seja pelo caminho Coimbra  – Viseu  – Guarda  – C. Branco, percorrendo um total de 287 quilómetros em vez de 159 se optasse pelo caminho directo.

Que vantagens poderá apresentar está estratégia? Voltemo-nos para o problema da economia. Qual será a complexidade temporal do algoritmo?  Admitamos de novo um factor de ramificação constante e igual a r. Quantos nós são analisados quando estamos no nível n? A análise em um pouco mais complicado do que no caso da procura em largura primeiro. No entanto existem pelo menos duas coisas que são certas: no melhor dos casos se a solução estiver no ramo mais a esquerda no nível n, n+1 nós; se a solução estiver no ramo mais à direita e no último nível, teremos o caso menos favorável, semelhante à procura em largura primeiro pelo que o resultado é idêntico ao apresentado na equação 3.1. O valor concreto será um valor entre esses dois extremos. Podemos considerar o valor médio? Podemos, embora a explicação esteja fora do objectivo deste livro. r n+1 – 1 + (n+1) r-1 = r n+1 – 1- +r-2 2 2(r-1)

Equação  – Complexidade temporal: valor médio

EM PROFUNDIDADE LIMITADA  Acabamos de ver na secção anterior que um dos grandes problemas da procura em profundidade primeiro se prende com a sua incapacidade em líder  com caminhos infinitos. O algoritmo de procura em profundidade limitada procura evitar este problema. É claro que não é muito difícil alterar o algoritmo para que o problema dos ciclos seja evitado. Deixamos esta questão como exercício para o leitor. Fixando o nível máximo da procura. O algoritmo exige apenas uma pequena modificação ao algoritmo geral já apresentado.

Esta alteração consiste essencialmente em supor que faz parte da descrição do estado o nível a que se encontra, podendo apenas ser aplicados os operadores caso o nível do nó seja inferior ao máximo escolhido (ponto 2.3.2 do algoritmo). O problema que se coloca é o de saber qual o valor máximo para o nível que deve ser usado. Infelizmente, nem sempre é possível determinar esse valor e, quando tal é possível, isso depende do problema. A referir que no exemplo que temos vindo a usar, sabemos que existem 18 cidades, pelo que o comprimento máximo de uma solução (um caminho entre duas cidades) será 17. Do mesmo modo, na charada cripto-aritmética ilustrada, existem dez letras distintas devendo cada uma receber algarismo entre 0 e 9. Se os operadores efectuaram a atribuição de um algarismo a uma letra, a profundidade máxima de qualquer solução estará ao nível 10.  Admitindo que é possível definir def inir um limite máximo, então o algoritmo de procura em profundidade limitada será completo. Continua pelas razões já anteriormente explicadas a não ser discriminador. A complexidade temporal assimptótica será de ordem O(r1) e a espacial O(1*r), sendo 1 o valor do limite máximo. Será assim econômico do ponto de vista do espaço, mas não o será do ponto de vista temporal.

PROCURA HEURÍSTICA  Até agora admitimos a inexistência de conhecimento que nos pudesse auxiliar relativamente à travessia do espaço de procura. O melhor que conseguimos foi usar a função g (n) que nos dava o custo do caminho desde o estado inicial até ao estado n. Nos algoritmos que se seguem, vamos admitir  que possuímos informação adicional que nos torna capaz de estimar o custo do caminho do nó corrente até ao nó solução. Essa informação é dada por uma função h (n). No exemplo que temos vindo a utilizar, a função h (n) será simplesmente a distância quilométrica em linha recta entre as diferentes cidades e Faro.

Faro Aveiro

366

Braga

454

Bragança

487

Beja

99

C. Branco

280

Coimbra

319

Évora

157

Faro

0

Guarda

352

Leiria

278

Lisboa

195

Portalegre

228

Porto

418

Santarém

231

Setúbal

168

Viana

473

V. Real

429

Viseu

363

Tab. Distâncias quilométricas em linha recta

Os algoritmos que iremos apresentar podem ser distinguidos por vários aspectos. Por exemplo, o modo como o próximo operador é escolhido: Num caso, escolhe-se o melhor à luz de uma heurística global, noutros casos a heurística é puramente local. Podemos também catalogar os algoritmos de acordo com o modo como a memória é, ou não, limitada. Finalmente, podemos ainda considerar o modo como as componentes de custo, g (n) e h (n), são utilizadas.

PROCURA SÔFREGA Na procura sôfrega o princípio consiste em escolher o nó na fronteira da árvore de procura que aparenta ser o mais promissor de acordo com o valor  estimado por  h (n).  Assim o nosso algoritmo limita-se a manter a fronteira da árvore de procura ordenada pelos valores de h (n), sendo sempre escolhido o nó de valor  mais baixo, isto é, aquele que está a hipoteticamente mais próximo da solução. Vejamos um exemplo concreto com as estradas de Portugal. Admitamos de novo que o nosso problema se resume a ir de Coimbra a Faro. Começando em Coimbra podemos ir para Aveiro, Leiria, Viseu e Castelo Branco. Na Fig. 3.28, essas possibilidades foram ordenadas pela distância, estimada em linha recta, das cidades vizinhas de Coimbra a Faro. Os arcos que ligam a Faro as quatro cidades estão anotados com o valor estimado das di stâncias. Coimbra Leiria

C. Branco

(278)

(280)

Viseu

Aveiro

(363)

(366)

Faro Fig. -Primeira expansão da árvore de procura

Em função destes valores, a próxima cidade a ser visitada será Leiria. Como não é o ponto de chegada, temos de calcular os seus descendentes e respectivas distâncias estimadas a Faro. A nova fronteira terá de ser ordenada. Coimbra Leiria Lisboa (195)

(280) Santarém

C.Branco

Viseu

Aveiro

(319)

(363)

(366)

(231) Faro Fig.- Expansão do nó Leiria

Com estes resultados a próxima cidade a ser escolhida seria Lisboa. O processo continuava até ser encontrado um caminho. O algoritmo pode ser descrito de forma simples como nos casos anteriores.

Algoritmo de procura Sôfrega

 A estrutura de dados usada neste caso é uma lista ordenada. O nome das funções é auto-explicativo. A variável I_nós irá manter a lista ordenada pela heurística dos nós ainda por visitar. A heurística aparece aqui passada como argumento da função, o que torna o algoritmo mais genérico. Podemos simular algumas interacções.

Podemos verificar o reaparecimento de nós já visitados, como é o caso de Coimbra. Quais serão as características desta estratégia? É evidente que não é, em geral, completa. Basta notar que podem aparecer, como no exemplo anterior, nós repetidos que podem originar caminhos infinitos. Também não é

discriminadora. Consideremos o exemplo da figura abaixo. Admitimos que queremos ir de Aveiro para Vila Real e usamos as distâncias em linha recta, assinaladas na figura, como heurística. É evidente que o nosso algoritmo começará por expandir Aveiro em Viseu e Porto, optando por Viseu por ter a distancia mais curta a V. Real. Ao expandirmos Viseu encontraremos a solução. Na realidade, o caminho Aveiro Viseu - V.Real significa percorrer  205 quilómetros, enquanto o caminho não escolhido Aveiro-Porto-V.real obrigaria a percorrer apenas 184 quilómetros.

E como se comporta a estratégia do ponto de vista da complexidade? Se reparamos bem para a filosofia desta estratégia, os nós vão sendo expandidos num modo híbrido entre uma procura em profundidade e uma procura em largura. Assim, pode acontecer que, no pior caso, todos os nós tenham de ser  expandidos e visitados o que significa uma complexidade temporal da ordem de O (r) com r o factor de ramificação e n o nível da solução. Como a fronteira terá de ser mantida toda em memória. E atendendo ao modo como ela evolui, teremos também no limite uma complexidade espacial da ordem de O (rn).

TREPA COLINAS Vimos no início, que existem problemas relativamente aos quais o mais importante é encontrar  o caminho que conduz dom estado inicial ao estado final, enquanto para outros problemas é a solução propriamente dita que interessa e não tanto o modo como foi obtida. Pertence a este último tipo de questões o problema das n-rainhas. Para os resolver, é possível a partir de uma solução candidata e ir tentando melhorá-la passo a passo. No caso das nrainhas, por exemplo podemos partir de um tabuleiro com as n-rainhas colocadas em posições aleatórias e procurar movimentar  uma delas de cada vez, de tal modo que o número de ataques diminua. Este tipo de abordagem tem uma natureza tipicamente local e envolve ir  melhorando progressivamente a solução candidata. O algoritmo trepa colinas baseia-se nesta filosofia. Para além disso, o algoritmo ”deita fora” todos os vizinhos

menos o melhor. Vejamos como funcionaria no caso da nossa hipotética viagem de Coimbra até Faro.

 A distância real desta solução é de 576. Do que foi dito resulta que o algoritmo é extremamente simples.

Tentemos agora analisar as características desta estratégia. É vidente que não é completa. Não é difícil imaginar situações nas quais uma transição inicialmente promissora nos conduz para um estado que não qua não é a solução e cujos descendentes não melhoram o resultado dado pela função de avaliação.

Na figura, o nó C encontra-se mais perto da solução D do que o nó B. Deste modo será o seleccionado e B será descartado. Não havendo ligação directa de C a D, o algoritmo termina sem encontrar a solução.

Igualmente não é óptima. No exemplo anterior a solução CoimbraLeiria-Lisboa-Évora-Beja-Faro tem uma distância real de apenas 495 quilómetros. Estas duas situações podem ser descritas visualmente por aquilo que se costuma designar pelo problema dos máximos locais (ver figura abaixo).

 Admitamos que o nosso problema se resume a alcançar o ponto mais alto numa montanha. Partindo do Ponto A, aleatoriamente escolhido, o algoritmo consegue ir melhorando progressivamente a solução até alcançar o ponto B. Nessa altura é impossível melhorar a solução e chegar ao ponto D. Claro que se tivéssemos partido inicialmente de C, a solução seria encontrada. Passamos agora a avaliar a natureza económica desta abordagem. Comecemos pelo espaço. Este algoritmo apenas guarda um estado pelo que a sua complexidade espacial é constante, ou seja, da ordem O(k) em que k é uma constante. Do ponto de vista temporal a sua complexidade é semelhante à de uma procura em profundidade primeira. Assim, se tivermos um factor de ramificação r e a solução se encontrar no nível n, então a complexidade temporal será da ordem de O(r*n). A utilização deste algoritmo depende bastante da “natureza do terreno”. Para além do problema dos máximos locais

 já referido, também a existência de planaltos pode dificultar o funcionamento do algoritmo, pois, tendo este apenas uma visão local do terreno, se a função de avaliação devolver valores idênticos para todos os vizinhos, a escolha será então aleatória (ver figura abaixo).

Existem soluções para estes problemas. Uma das possibilidades de tratar dos máximos locais seria retomar o algoritmo a partir de uma nova posição. Do ponto de vista da complexidade, o algoritmo deixaria de ser tão apelativo. No caso dos planaltos, uma solução possível seria deixar o algoritmo ter uma vizinhança maior, isto é, poder analisar o que se passa depois de usar  mais do que um operador em cadeia. Deixamos neste caso de ter um algoritmo tão simples e ao mesmo tempo não sabemos qual deve ser a dimensão do “olhar para frente”

PROCURA TABU  A procura tabu (Glover, 1989), (Glover, e Laguna 1997) é um algoritmo heurístico, que procura melhorar progressivamente uma solução através de uma pesquisa local. O facto que distingue este algoritmo dos restantes, nomeadamente do trepa colinas, é a existência de uma memória, designada normalmente por  lista tabu, e que se destina a evitar ciclos, explorar zonas promissoras ou a forçar a visita a novas zonas do espaço de procura. Esse efeito é conseguido, pois a lista tabu contém ou soluções que foram testadas ou os operadores que foram utilizados. O conteúdo da lista é usado fundamentalmente para inibir o teste de soluções ou evitar operadores.  A memória pode ter várias dimensões, de que salientamos as que medem o momento da ocorrência de um dado evento (uso de um operador, por exemplo) ou, ainda, a frequência com que determinado evento ocorreu. Na primeira dimensão, porque são guardadas as ocorrências mais recentes, podemos dizer que estamos perante uma memória de curto termo, enquanto na segunda dimensão, ao guardarmos situações mais antigas, podemos falar  de memória de longo termo. Na procura tabu a memória pode ser utilizada segundo diferentes estratégias: para intensificar a busca na vizinhança de soluções de boa qualidade ou para diversificar a busca para regiões do espaço de procura ainda visitados. O algoritmo que a seguir se descreve em pseudocódigo é formado por  dois ciclos principais. No ciclo externo, controla-se o número de vezes que se tenta melhorar uma solução. No ciclo interno, estabelece-se o modo de produzir a nova solução candidata a partir da solução corrente, recorrendo aos vizinhos desta e à informação contida na memória tabu.

CONCLUSÃO Em suma o agente de procura esta destinado a criar estratégias, para solução de um determinado problema passando por diversos caminho, que lhe leve a solucionar parcialmente ou completamente o problema proposto, superando obstáculos, de profundidades, longitude, limites, aplicando os diversos métodos de procura e princípios heurísticos.

BIBLIOGRAFIA Obtida a partir do manual de Inteligência Artificial. Autores: Ernesto da Costa e Anabela Simões. 2ª Edição Páginas 71 - 111

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF