Busca Espaco Estados - Inteligência Artificial

17
Busca em Espaço de Estados Prof a. Denise Franzotti Togneri 1 Unidade 3 Busca em Espaço de Estados A maioria dos problemas interessantes do ponto de vista da IA não dispõe de soluções algorítmicas, ou tem soluções algorítmicas conhecidas, mas sua complexidade as torna impraticáveis. Dentre os problemas deste tipo, os primeiros, historicamente, a serem estudados foram prova automática de teoremas, quebra-cabeças e jogos. Isto se deve ao fato de que estes problemas, além de não disporem de soluções algorítmicas viáveis, apresentam uma série de características que os tornam bons candidatos para a pesquisa em IA (BITTENCOURT, 2001): são solucionáveis por seres humanos e, neste caso, sua solução está associada à inteligência; formam classes de complexidade variável existindo desde instâncias triviais (por exemplo, o “jogo da velha”) até instâncias extremamente complexas (jogo de xadrez); são problemas de conhecimento total, isto é, tudo que é necessário saber para solucioná- los é conhecido, o que facilita sua formalização; suas soluções têm a forma de uma seqüência de situações “válidas” e as maneiras de passar de uma situação para outra são em número finito e conhecidas, ou seja, as soluções são seqüências de situações válidas. Diante da falta de solução algorítmica viável, o único método de solução possível é a busca. 3.1 – Formulação de Problemas Antes de formular um problema e utilizar métodos de busca para solucioná-lo, é importante formular o objetivo a ser alcançado. Objetivos auxiliam a organizar comportamento, através da limitação dos objetivos que se pretende alcançar. Sendo assim, a formulação de objetivos, baseada na situação atual e na medida de desempenho, é o primeiro passo na resolução de problemas. Um objetivo é um conjunto de estados do mundo – exatamente os estados em que o objetivo é satisfeito. Ações podem ser vistas como aquelas que causam transições entre estados do mundo (RUSSELL; NORVIG, 2004). Suponha que um agente esteja na cidade de Arad na Romênia e ele tenha uma passagem aérea Bucareste-Paris para o dia seguinte, que não é reembolsável e seu visto esteja prestes a expirar. Além disto, após esse dia, não existem assentos disponíveis pelos próximos seis meses. Para não ser preso e deportado, faz sentido para o agente adotar o objetivo de chegar a Bucareste. Ele, então, decide alugar um carro e dirigir de Arad até Bucareste. A tarefa do agente é descobrir Busca em Espaço de Estados Prof a. Denise Franzotti Togneri 2 que seqüência de ações o levará a um estado objetivo. Antes de poder fazer isso, ele precisa decidir que espécie de ações e estados deve considerar. A formulação do problema é o processo de decidir que ações e estados devem ser considerados, dado um objetivo. A formulação do problema define o grau de detalhamento na abordagem do problema. Nosso agente adotou como objetivo dirigir para Bucareste e está considerando para qual cidade irá a partir de Arad. Existem 3 rodovias a partir de Arad: uma em direção a Sibiu, uma para Timisoara e outra para Zerind. Nenhuma dessas, no entanto, alcançam o objetivo e o agente não saberá qual delas seguir. Em outras palavras, o agente não saberá qual das possíveis ações é a melhor, porque não conhece o bastante sobre o estado resultante da execução de cada ação. Se o agente não tiver nenhum conhecimento adicional, ele ficará paralisado e o melhor que pode fazer é escolher uma dessas 3 ações de forma randômica (ao acaso). No entanto, supondo que ele tenha um mapa da Romênia, o agente pode usar as informações contidas no mapa para considerar estágios subseqüentes de uma jornada hipotética passando por cada uma dessas três cidades, procurando descobrir um percurso que o leve para Bucareste. Uma vez que tenha encontrado um caminho (path) no mapa de Arad para Bucareste, ele pode alcançar seu objetivo executando as ações de dirigir que correspondam aos passos da viagem. Sendo assim, um agente com várias opções imediatas de valor desconhecido pode decidir o que fazer examinando primeiro as diferentes seqüências de ações possíveis que o levem a estados de valor conhecido e depois escolher a melhor seqüência. O processo de procurar pela melhor seqüência de ações possível que leve a estados de valor conhecido é chamado busca. Um algoritmo de busca recebe um problema como entrada e retorna uma solução sob a forma de uma seqüência de ações. Uma solução é, portanto, a seqüência de ações que levarão à satisfação do problema e é encontrada por meio de um mecanismo de busca. Um problema pode ter mais de uma solução. Uma vez que uma solução tenha sido encontrada, as ações que ela recomenda podem ser executadas. Essa fase é então chamada de fase de execução. Sendo assim, após formular um objetivo e um problema a ser resolvido, o agente chama um procedimento de busca para resolvê-lo. A seguir, o agente usa a solução fornecida pelo procedimento de busca para guiar suas ações. Uma vez que a solução tenha sido executada, o agente formulará um novo objetivo (RUSSELL; NORVIG, 2004). 3.1.1 – Elementos de um problema Um problema pode ser definido como uma coleção de informações que deve ser usada para decidir o que fazer e pode ser abstraído na forma de conjunto de estados e ações possíveis (que são as transições entre estados). De maneira geral, um problema pode ser definido formalmente por quatro componentes (RUSSELL; NORVIG, 2004): o estado inicial que descreve a situação inicial do problema.

description

Material de IA

Transcript of Busca Espaco Estados - Inteligência Artificial

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

1

Unidade 3

Busca em Espaço de Estados

A maioria dos problemas interessantes do ponto de vista da IA não dispõe de soluções algorítmicas, ou tem soluções algorítmicas conhecidas, mas sua complexidade as torna impraticáveis. Dentre os problemas deste tipo, os primeiros, historicamente, a serem estudados foram prova automática de teoremas, quebra-cabeças e jogos. Isto se deve ao fato de que estes problemas, além de não disporem de soluções algorítmicas viáveis, apresentam uma série de características que os tornam bons candidatos para a pesquisa em IA (BITTENCOURT, 2001):

• são solucionáveis por seres humanos e, neste caso, sua solução está associada à inteligência;

• formam classes de complexidade variável existindo desde instâncias triviais (por exemplo, o “jogo da velha”) até instâncias extremamente complexas (jogo de xadrez);

• são problemas de conhecimento total, isto é, tudo que é necessário saber para solucioná-los é conhecido, o que facilita sua formalização;

• suas soluções têm a forma de uma seqüência de situações “válidas” e as maneiras de passar de uma situação para outra são em número finito e conhecidas, ou seja, as soluções são seqüências de situações válidas.

Diante da falta de solução algorítmica viável, o único método de solução possível é a busca.

3.1 – Formulação de Problemas

Antes de formular um problema e utilizar métodos de busca para solucioná-lo, é importante formular o objetivo a ser alcançado. Objetivos auxiliam a organizar comportamento, através da limitação dos objetivos que se pretende alcançar. Sendo assim, a formulação de objetivos, baseada na situação atual e na medida de desempenho, é o primeiro passo na resolução de problemas. Um objetivo é um conjunto de estados do mundo – exatamente os estados em que o objetivo é satisfeito. Ações podem ser vistas como aquelas que causam transições entre estados do mundo (RUSSELL; NORVIG, 2004).

Suponha que um agente esteja na cidade de Arad na Romênia e ele tenha uma passagem aérea Bucareste-Paris para o dia seguinte, que não é reembolsável e seu visto esteja prestes a expirar. Além disto, após esse dia, não existem assentos disponíveis pelos próximos seis meses. Para não ser preso e deportado, faz sentido para o agente adotar o objetivo de chegar a Bucareste. Ele, então, decide alugar um carro e dirigir de Arad até Bucareste. A tarefa do agente é descobrir

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

2

que seqüência de ações o levará a um estado objetivo. Antes de poder fazer isso, ele precisa decidir que espécie de ações e estados deve considerar.

A formulação do problema é o processo de decidir que ações e estados devem ser considerados, dado um objetivo. A formulação do problema define o grau de detalhamento na abordagem do problema.

Nosso agente adotou como objetivo dirigir para Bucareste e está considerando para qual cidade irá a partir de Arad. Existem 3 rodovias a partir de Arad: uma em direção a Sibiu, uma para Timisoara e outra para Zerind. Nenhuma dessas, no entanto, alcançam o objetivo e o agente não saberá qual delas seguir. Em outras palavras, o agente não saberá qual das possíveis ações é a melhor, porque não conhece o bastante sobre o estado resultante da execução de cada ação. Se o agente não tiver nenhum conhecimento adicional, ele ficará paralisado e o melhor que pode fazer é escolher uma dessas 3 ações de forma randômica (ao acaso).

No entanto, supondo que ele tenha um mapa da Romênia, o agente pode usar as informações contidas no mapa para considerar estágios subseqüentes de uma jornada hipotética passando por cada uma dessas três cidades, procurando descobrir um percurso que o leve para Bucareste. Uma vez que tenha encontrado um caminho (path) no mapa de Arad para Bucareste, ele pode alcançar seu objetivo executando as ações de dirigir que correspondam aos passos da viagem. Sendo assim, um agente com várias opções imediatas de valor desconhecido pode decidir o que fazer examinando primeiro as diferentes seqüências de ações possíveis que o levem a estados de valor conhecido e depois escolher a melhor seqüência.

O processo de procurar pela melhor seqüência de ações possível que leve a estados de valor conhecido é chamado busca. Um algoritmo de busca recebe um problema como entrada e retorna uma solução sob a forma de uma seqüência de ações. Uma solução é, portanto, a seqüência de ações que levarão à satisfação do problema e é encontrada por meio de um mecanismo de busca. Um problema pode ter mais de uma solução.

Uma vez que uma solução tenha sido encontrada, as ações que ela recomenda podem ser executadas. Essa fase é então chamada de fase de execução.

Sendo assim, após formular um objetivo e um problema a ser resolvido, o agente chama um procedimento de busca para resolvê-lo. A seguir, o agente usa a solução fornecida pelo procedimento de busca para guiar suas ações. Uma vez que a solução tenha sido executada, o agente formulará um novo objetivo (RUSSELL; NORVIG, 2004).

3.1.1 – Elementos de um problema

Um problema pode ser definido como uma coleção de informações que deve ser usada para decidir o que fazer e pode ser abstraído na forma de conjunto de estados e ações possíveis (que são as transições entre estados). De maneira geral, um problema pode ser definido formalmente por quatro componentes (RUSSELL; NORVIG, 2004):

• o estado inicial que descreve a situação inicial do problema.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

3

• Uma descrição das ações possíveis que estão disponíveis. A formulação mais comum utiliza a função sucessor. Dado um estado particular x, SUCESSOR(x) retorna um conjunto de pares ordenados <ação, sucessor>, em que cada ação é uma das ações válidas no estado x e cada sucessor é um estado que pode ser alcançado a partir de x aplicando-se a ação;

• uma função de teste de objetivo (goal test) que determina se um dado estado é um estado objetivo. Algumas vezes existe um conjunto explícito de estados objetivo possíveis, e o teste simplesmente verifica se o estado dado é um deles. Por exemplo, o objetivo do agente na Romênia é o conjunto unitário {Em (Bucareste)}. Algumas vezes, o objetivo é especificado por uma propriedade abstrata (forma implícita) e não por um conjunto de estados explicitamente enumerados. No xadrez, por exemplo, o objetivo é alcançar um estado chamado “xeque-mate”;

• uma função de custo de caminho (path cost) que atribui um custo numérico a cada caminho. Quando mais de uma solução existe para atingir o estado objetivo, é necessário verificar qual deles tem menor custo. Sendo assim, a função de custo do caminho é usada para calcular o custo de um caminho através da soma dos custos das ações individuais ao longo do caminho. O custo de passo de adotar a ação a para ir do estado x ao estado y é denotado por c(x, a, y).

Juntos, o estado inicial, as ações possíveis, a função de teste de objetivo e a função de custo do caminho definem um problema e podem ser reunidos em uma única estrutura de dados que é fornecida como entrada para um algoritmo de resolução de problemas, como mostra a figura 1.

datatype PROBLEM

componentes: ESTADO-INICIAL, AÇÕES, TESTE-DE-OBJETIVO, FUNÇÃO-CUSTO-CAMINHO

Figura 1 – Estrutura de dados para representação de problemas Fonte: RUSSELL; NORVIG, 2004.

Juntos, o estado inicial e a função sucessor definem implicitamente o espaço de estados do problema – o conjunto de todos os estados acessíveis a partir do estado inicial. O espaço de estados forma um grafo em que os nós são estados e os arcos entre nós são ações. Um caminho no espaço de estados é uma seqüência de estados conectados por uma seqüência de ações que leva de um estado para outro.

Uma solução para um problema é um caminho desde o estado inicial até um estado objetivo. A qualidade da solução é medida pela função de custo de caminho, e uma solução ótima tem o menor custo de caminho entre todas as soluções (RUSSELL; NORVIG, 2004).

3.2 – Em Busca de Soluções

Até o momento foram discutidos como definir um problema e como reconhecer uma solução. A parte restante – encontrar uma solução – é feita através de uma busca através do espaço de estados. A idéia é manter e estender um conjunto de seqüências de soluções parciais.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

4

Este capítulo lida com técnicas de busca que utilizam uma árvore de busca explícita, gerada pelo estado inicial e pela função sucessor que, juntos, definem o espaço de estados. Em geral, pode-se ter um grafo de busca em lugar de uma árvore de busca, quando o mesmo estado pode ser alcançado a partir de vários caminhos.

Para resolver o problema de encontrar a rota de Arad para Bucareste, por exemplo, o primeiro passo é testar se esse estado inicial é o estado objetivo. Uma vez que não é o estado objetivo, devem ser considerados outros estados, o que é feito aplicando-se a função sucessor ao estado atual, gerando assim, um novo conjunto de estados. Esse processo é chamado expansão de um estado. No exemplo, existem três novos estados (Sibiu, Timisoara e Zerind), como mostra a figura 2. Como existe mais de um novo estado, ou seja, múltiplas possibilidades, deve-se fazer uma escolha de qual considerar a seguir.

(a) o estado inicial Arad

(b) após expandir Arad Arad

Sibiu Timisoara Zerind

(c) após expandir Sibiu Arad

Sibiu Timisoara Zerind

Arad Fagaras Oradea Rimnicu Vilcea

Figura 2 – Árvore de Busca Parcial para encontrar rota de Arad para Bucareste Fonte: RUSSELL; NORVIG, 2004

Essa é a essência da busca – escolher uma opção e deixar as outras reservadas para mais tarde, no caso da primeira escolha não levar à solução (RUSSELL; NORVIG, 2004). Suponha que a escolha seja Sibiu. Deve-se verificar se ela não é o estado objetivo e como não é, expandi-la, obtendo-se os estados Arad, Fagaras, Oradea e Rimnicu Vilcea. A seguir, podem ser escolhidos um desses 4 novos estados ou então voltar e escolher Timisoara ou Zerind.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

5

Esse processo de escolher, testar e expandir é repetido até que a solução seja encontrada ou até que não existam mais estados para serem expandidos.

A escolha de qual estado expandir primeiro é determinada através da estratégia de busca (RUSSELL; NORVIG, 2004).

3.3 – Grafos e Árvores de Busca

Para auxiliar no processo de busca, é útil construir uma árvore de busca cujo nó raiz está associado a um estado inicial e onde os sucessores de qualquer nó são associados aos estados obtidos através da aplicação da função sucessor sobre a descrição do estado associado ao nó (BITTENCOURT, 2001).

Uma representação gráfica de um espaço de estados genérico é apresentada na figura 3(a). O conjunto de estados é dado por {e1, ......., e7}; o único estado inicial - e5 – é marcado com uma seta; o, também único, estado final – e4 – é marcado pela cor escura; e, finalmente, o conjunto de operadores é dado por {op1, op2, op3}.

Figura 3 – Espaço de Estados Fonte: BITTENCOURT, 2001.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

6

A forma como é mostrada na figura a relação entre estados e operadores, através de setas e círculos, é chamada grafo orientado. Na figura 3(b), mostra-se uma árvore de busca associada a este espaço de estados. A árvore apresenta dois caminhos distintos entre o nó inicial e o nó final, um com comprimento três e outro com comprimento quatro (BITTENCOURT, 2001).

A árvore de busca é uma estrutura independente, mas que guarda relação com o grafo do problema, como mostra a figura 4.

Figura 4 – Relação entre Grafo do problema e Árvore de Busca Fonte: WINSTON, 1992.

Para transformar um grafo em uma árvore de busca, devem ser descartados os caminhos que revisitam qualquer nó em particular, com objetivo de se evitar looping, como, por exemplo, na seqüência S A D S A D S A D ...

Com os caminhos em looping eliminados, pode-se arranjar todos os caminhos possíveis em forma de árvore de busca (search tree), com o nó inicial como nó raiz (root node). A conversão de grafo em árvore de busca faz-se traçando todos os caminhos possíveis a partir de cada nó, extendendo-os ao máximo, sem gerar looping (WINSTON, 1992, p. 64).

Russell e Norvig (2004) afirmam que é importante distinguir entre o espaço de estados e a árvore de busca. No caso da figura 4 existem apenas 8 estados no espaço de estados, representando cada um deles uma cidade, por exemplo. No entanto, há um número infinito de caminhos nesse espaço de estados, e assim a árvore de busca tem um número infinito de nós.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

7

Uma árvore de busca possui diversos elementos, como mostra a figura 5.

Figura 5 – Elementos de uma árvore de busca

Os Nós são estruturas complexas que podem ser representadas de diversas maneiras. Russell e Norvig (2004) afirmam que um nó é uma estrutura de dados com cinco componentes:

• estado. o estado no espaço de estados a que o nó corresponde;

• nó-pai. É o nó na árvore de busca que gerou esse nó;

• ação. A ação que foi aplicada ao pai para gerar o nó;

• custo do caminho. O custo, tradicionalmente denotado por g(n), do caminho desde o estado inicial até o nó, indicado pelos ponteiros do pai;

• profundidade do nó. O número de passos ao longo do caminho (path) desde o estado inicial (a partir do nó raiz até ele).

Sendo assim, o tipo de dado de um nó pode ser representado como mostra a figura 6.

datatype NÓ

componentes: ESTADO, NÓ-PAI, AÇÃO, CUSTO-CAMINHO, PROFUNDIDADE

Figura 6 – Tipo de dado para representação de um nó

Fonte: RUSSELL; NORVIG, 2004.

Profundidade (depth) = 0

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

8

É importante lembrar as diferenças entre nós e estados. Um nó é uma estrutura de dados usada para representar a árvore de busca. Um estado representa uma configuração (ou conjunto de configurações) do mundo. Desse modo, os nós estão em caminhos específicos, definidos por ponteiros NÓ-PAI, enquanto os estados não estão. Além disso, dois nós diferentes podem conter o mesmo estado do mundo, se esse estado for gerado por meio de dois caminhos de busca diferentes.

Os ramos da árvore denotam a expansão de um nó para o próximo nó.

O nó raiz é o ponto de início da busca no grafo.

Os nós expandidos são aqueles que já deram origem a um outro conjunto de nós e não podem mais ser expandidos.

Os nós em expansão são aqueles que já começaram a ser expandidos, mas ainda podem ser potencialmente expandidos.

A expansão de um nó significa determinar os filhos deste nó.

Os nós fronteiriços ou borda são aqueles que foram gerados, mas ainda não foram expandidos.

As folhas ou nós terminais são aqueles que não puderam ser expandidos, ou seja, são nós sem sucessores.

O fator de ramificação b de um nó é o número de sucessores (ou filhos) do mesmo. Tomando como exemplo a figura 7, o fator de ramificação b do nó B é igual a 2 (Bfactor = 2), enquanto que o do nó D é igual a 1 (Bfactor = 1).

Figura 7 – Fator de ramificação de nó

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

9

3.4 – Estratégias de Busca

Os algoritmos de busca são aqueles que, a partir de um estado inicial, percorrem os nós do grafo que representa o problema, buscando por um caminho ou nó que represente a solução do problema. A saída desses algoritmos consiste em falha ou em uma solução.

No entanto, a maior parte do trabalho na área de busca diz respeito a encontrar a estratégia de busca (que determina qual estado deve ser expandido primeiro) correta para um problema.

O desempenho do algoritmo de resolução de problemas pode ser avaliado em termos de quatro aspectos (RUSSELL; NORVIG, 2004):

• Completeza. O algoritmo oferece a garantia de encontrar uma solução quando ela existir?

• Otimização. A estratégia encontra a solução ótima (tem o menor custo de caminho entre todas as soluções)?

• Complexidade de tempo. Quanto tempo ele leva para encontrar uma solução?

• Complexidade de espaço. Quanta memória é necessária para executar a busca?

A complexidade de tempo e a complexidade de espaço são sempre consideradas em relação a alguma medida da dificuldade do problema. Na Ciência da Computação teórica, a medida típica é o tamanho do grafo do espaço de estados, porque o grafo é visualizado como uma estrutura de dados explícita inserida no programa de busca. No entanto, na Inteligência Artificial, na qual o grafo é representado implicitamente pelo estado inicial e pela função sucessor e com freqüência é infinito, a complexidade é expressa em termos de três quantidades (RUSSELL; NORVIG, 2004):

• b, o fator de ramificação ou número máximo de sucessores de qualquer nó;

• d, a profundidade do nó objetivo menos profundo (mais próxima do nó raiz);

• m, o comprimento máximo de qualquer caminho no espaço de estados.

Com freqüência, o tempo é medido em termos do número de nós gerados durante a busca, e o espaço é medido em termos do número máximos de nós armazenados na memória.

Para avaliar a efetividade de um algoritmo de busca, dois custos diferentes podem ser considerados (RUSSELL; NORVIG, 2004, WINSTON, 1992):

• Custo de busca. Em geral depende da complexidade de tempo, mas também pode incluir um termo para uso da memória;

• Custo total. Combina o custo de busca e o custo de caminho da solução encontrada.

Sendo assim, algumas considerações devem ser feitas. Por exemplo, se for necessário ir de Arad para Bucareste com freqüência, vale a pena gastar tempo de busca (search time) para encontrar um caminho (path) realmente bom. Por outro lado, se for necessário fazer a viagem

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

10

somente uma vez e já for difícil encontrar qualquer caminho, será satisfatório encontrar algum caminho, mesmo que seja possível encontrar, com mais trabalho, um caminho melhor (Winston, 1992).

As estratégias de busca podem ser classificadas em (RUSSELL; NORVIG, 2004):

• Busca cega ou sem informação. Significa que elas não têm nenhuma informação adicional sobre estados, além daquelas fornecidas na definição do problema. Tudo o que elas podem fazer é gerar sucessores (novos estados) e distinguir um estado objetivo de um estado não-objetivo (RUSSELL; NORVIG, 2004). Essas estratégias de busca não levam em conta informações específicas sobre o problema a ser resolvido (como por exemplo, o custo do caminho) (BITTENCOURT, 2001). Estão interessadas em encontrar qualquer caminho e não o de melhor custo e não detém conhecimento do problema;

• Busca heurística ou com informação. Usa conhecimentos específicos do problema - além da definição do próprio problema - para encontrar soluções de forma mais eficiente que uma estratégia sem informação. Essas estratégias sabem se um estado não-objetivo é “mais promissor” que outro (RUSSELL; NORVIG, 2004). Esses conhecimentos específicos podem ser, por exemplo, o custo do menor caminho do nó inicial até o nó em questão e o custo do caminho até um nó associado ao estado-objetivo mais próximo (BITTENCOURT, 2001). Sendo assim, a eficiência da busca pode ser incrementada de forma espetacular, pois existe uma maneira para obter medidas e ordenar as escolhas, de forma que os caminhos mais promissores possam ser explorados mais cedo (Winston, 1992, p. 70).

As buscas cegas são menos efetivas que as buscas heurísticas. No entanto, as buscas cegas continuam sendo importantes, uma vez que existem muitos problemas para os quais não existem informações adicionais para serem consideradas (RUSSELL; NORVIG, 2004).

No entanto, independente da estratégia de busca, para construir uma solução, um processo de busca necessita de (AHONEN, 1998):

1. Uma representação dos elementos de um espaço de busca;

2. Ferramentas de transformação (ou regras de produção) para gerar novos elementos do espaço de busca a cada passo do processo de busca;

3. Estratégia de controle (como proceder).

A busca em árvore é um processo de busca no qual uma árvore (árvore de busca) é construída passo a passo. O nó-raiz da árvore representa a situação inicial, onde nada foi construído, os nós da árvore representam o espaço de busca, seus nós-folha representam os elementos do espaço de solução ou os elementos do espaço de busca sem sucessores e os arcos representam os passos de construção (ou as decisões tomadas no processo de busca).

Utilizando, portanto, uma árvore de busca (AHONEN, 1998):

1. A representação dos elementos é feita através da representação dos nós da árvore;

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

11

2. As ferramentas de transformação são os geradores de nós filhos (expandindo um nó);

3. A estratégia de controle é definida através da definição de quais nós devem ser expandidos a seguir.

3.5 – Estratégias de Busca Cegas ou sem Informação

Na literatura existem várias estratégias de busca cega descritas. Russell e Norvig (2004) classificam as estratégias de busca cega em:

• busca em largura ou extensão (breadth-first search);

• busca de custo uniforme (uniform cost search);

• busca em profundidade (depth-first search);

• busca em profundidade limitada (depth-limited search);

• busca de aprofundamento iterativo (iterative deepening search);

• busca bidirecional (bidirectional search).

Nilsson (1998) classifica essas estratégias em:

• busca em largura (breadth-first search);

• busca em profundidade (depth-first search ou backtracking search);

• busca de aprofundamento iterativo (iterative deepening search);

Winston (1992) classifica essas estratégias em:

• busca em profundidade (depth-first search);

• busca em largura (breadth-first search);

• busca não determinística (nondeterministic search).

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

12

Bittencourt (2001) propôs um algoritmo genérico para Busca Cega conforme mostra a figura 8. O procedimento de solução deve construir uma árvore de busca. Como uma árvore é definida por um conjunto de nós, é necessário definir uma estrutura de dados para um nó genérico, independente da estratégia de busca ser cega ou heurística. Um nó é, então, caracterizado, de forma geral, pelos seguintes elementos:

ni = (ei, pi, gi, hi)

onde:

• ni = nó qualquer da árvore de busca;

• ei = o estado ao qual ele está associado;

• pi = um ponteiro para o nó antecessor do nó ni (para permitir a determinação do caminho que forma a solução, uma vez encontrado um estado final);

• gi = comprimento do caminho entre o nó inicial e o nó em questão;

• hi = valor associado a uma estimativa da distância até o nó final mais próximo; a chamada função heurística específica de cada problema.

Busca-cega ( ) 0. open { (e0, ⊥, 0, h(e0) ) }

closed 0 1. Se open = 0 então retorne Falha 2. ni Seleciona (open) 3. open open - {ni} 4. closed closed ∪ {ni} 5. seja ni = (ei, pi, gi, hi)

se Final(ei) então retorne Sucesso 6. ∀ej ∈ Sucessores(ei)

se ∃ nk = (ek , pk , gk , hk) ∈ open, ej = ek ∧ ∃ nk = (ek, pk , gk , hk) ∈ closed, ej = ek

então open open ∪ { ( ej, ni, gi + 1, h(ej) ) } 7. Volte para 1

Figura 8 – Procedimento de Busca Cega Fonte: BITTENCOURT, 2001.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

13

Para desenvolvimento do algoritmo de busca cega é necessário manter um conjunto de nós a examinar e outro conjunto de nós já examinados pois, em geral, cada estado pode ser alcançado por mais de um caminho. Sendo assim, é necessário verificar, antes de adicionar um novo nó à árvore, se o estado atual já não foi encontrado antes. Esses conjuntos podem ser chamados, respectivamente, de open e closed na definição do procedimento de busca cega apresentado na figura 8.

O procedimento da função Seleciona é que escolhe o próximo nó a ser examinado (BITTENCOURT, 2001, p. 214). Os procedimentos de busca cega aplicam operadores a nós sem usar qualquer conhecimento especial sobre o domínio do problema (NILSSON, 1998). Isto significa que o valor hi da estrutura de um nó não é usado nesses procedimentos. O único parâmetro que pode ser utilizado para controlar a busca é o valor g da profundidade do nó. Duas opções são possíveis (BITTENCOURT, 2001):

• definir a função Seleciona de tal maneira que ela escolha o nó de menor g, o que corresponde à busca em largura ou

• fazê-la escolher o nó de maior g, o que corresponde à busca em profundidade.

3.5.1 - Busca em largura ou extensão (breadth-first search)

A figura 9 apresenta como a árvore de busca é percorrida na estratégia de busca em largura.

Figura 9– Um exemplo de busca em largura Fonte: WINSTON, 1992.

A busca em largura é uma estratégia simples em que o nó raiz é expandido primeiro, em seguida, todos os sucessores do nó raiz são expandidos, depois os sucessores desses nós e assim por

Nível 0

Nível 1

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

14

diante. Em geral, todos os nós em uma dada profundidade na árvore de busca são expandidos, antes que todos os nós no nível seguinte sejam expandidos (RUSSELL; NORVIG, 2004).

Como mostrado na figura 9, a busca em largura verifica todos os caminhos de uma dada profundidade antes de se mover para outros caminhos com profundidades maiores (WINSTON, 1992). Nessa estratégia, cada nível da árvore é inteiramente construído antes que qualquer nó do próximo nível seja adicionado à árvore (BITTENCOURT, 2001, p. 214).

A figura 10 mostra o progresso da busca em largura em uma árvore binária simples. Em

cada fase, o nó a ser expandido em seguida é indicado por um marcador.

A busca em largura é uma busca completa – se o nó objetivo mais raso estiver em alguma profundidade finita d, a busca em largura eventualmente o encontrará após expandir todos os nós mais rasos (desde que o fator de ramificação b seja finito). O nó objetivo mais raso não é necessariamente o nó ótimo (RUSSELL; NORVIG, 2004).

Segundo Nilsson (1998), esse procedimento gera um grafo de espaço de estados explícito através da aplicação de todos os operadores possíveis ao nó inicial e dessa forma, obtendo todos os seus sucessores. Para cada sucessor direto do nó inicial obtido, são aplicados todos os operadores possíveis novamente e assim por diante. Uma vez que, a cada passo, são aplicados todos os operadores possíveis a um nó, é conveniente agrupá-los em uma função chamada função sucessora. A função sucessora, quando aplicada a um nó, produz o conjunto completo de nós sucessores daquele nó. A aplicação da função sucessora a um nó é chamada expansão do nó.

Figura 10 – Passo-a-passo – Busca em Largura em uma árvore binária simples.Fonte: RUSSELL; NORVIG, 2004.

S

E

A

B

S

D

D A

A

S

D

A

B

S

D

D

(a) (b)

(c) (d)

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

15

Na estratégia de busca em largura convencionou-se começar a busca da esquerda para a direita, até atingir o nó objetivo. Sendo assim, o algoritmo de busca em largura consiste nos seguintes passos (WINSTON, 1992):

1. Construir uma fila (queue) com 1 elemento consistindo de um caminho de comprimento zero contendo somente o nó raiz (root);

2. Repetir até encontrar o primeiro caminho da fila que contenha o nó-objetivo ou até que a fila esteja vazia

a. “Remover” o primeiro caminho da fila; criar novos caminhos estendendo o primeiro caminho para todos os nós vizinhos do nó terminal;

b. Rejeitar todos novos caminhos com ciclos (loop);

c. Adicionar novos caminhos, se existirem, no final da fila, ou seja, os nós-filhos ou sucessores são colocados no final da fila para serem visitados somente após pesquisa a todos os pais do nível anterior;

3. Se o objetivo for encontrado anunciar sucesso! Caso contrário, anunciar falha.

Suponha que, inicialmente, uma fila seja formada por (A1, A2, A3, ...Ak ... An), como mostra a figura 11.

Figura 11 – Exemplo de Árvore de Busca

A2 A1 Ak An

A12 A11 A13

A112 A111

..... ..... A3

1

A22 A21

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

16

O procedimento determina tirar um membro da fila (mais à esquerda) e explorá-lo, ou seja, verificar se ele não é o nó-objetivo. Se não for, obter seus filhos e colocá-los no final da fila, como por exemplo

(A2, A3, ... Ak ... An, A11, A12, A13)

Dessa forma, todos os nós de um mesmo comprimento são explorados antes de se começar a explorar seus sucessores que têm um comprimento maior. No próximo ciclo, a fila ficaria da seguinte forma:

(A3, ... Ak ... An, A11, A12, A13, A21, A22).

Percebe-se, portanto, que o nó a explorar é sempre o nó cabeça da fila.

3.5.2 - Busca em Profundidade (Depth-first Search)

A busca em profundidade sempre expande o nó mais profundo na borda atual da árvore de busca (RUSSELL; NORVIG, 2004). A figura 12 apresenta como a árvore de busca é percorrida na estratégia de busca em profundidade.

Figura 12 – Um exemplo de busca em profundidade Fonte: WINSTON, 1992.

Como mostrado na figura 12, uma vez que na busca cega um caminho é tão bom quanto qualquer outro, a busca em profundidade obtém os filhos de cada nó visitado, trabalhando, então, em direção à profundidade da árvore de busca. As demais alternativas (nós) do mesmo nível de um determinado nó são ignoradas completamente (WINSTON, 1992).

Nessa estratégia, a prioridade de expansão é dada aos sucessores do último estado (nó) adicionado à árvore (BITTENCOURT, 2001, p. 214).

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

17

A figura 13 mostra o progresso da busca em profundidade em uma árvore binária simples. A busca prossegue imediatamente até o nível mais profundo da árvore de busca, onde os nós não têm sucessores. À medida que esses nós são expandidos, eles são retirados da borda, e então a busca “retorna” ao nó seguinte mais raso que ainda tem sucessores inexplorados, ou seja, os nós que foram expandidos e não têm descendentes na borda podem ser removidos da memória; eles são mostrados em cor verde (RUSSELL; NORVIG, 2004).

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

18

Figura 13 – Passo-a-passo – Busca em profundidade em uma árvore binária simples.Fonte: RUSSELL; NORVIG, 2004.

S

A

S

D

A

B

S

D

D

C

A

S

D

D

C

A

B

S

D

E

D

C

A

B

S

D

E

nó-folha

D

(a) (b)

(c) (d)

(e) (f) E

B

F D

C

A

S

D

D

D

(g) (h) E

B

F

C

A

S

D

D

D

E

B

F

G nó-objetivo!!

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

19

Na estratégia de busca em profundidade, também convencionou-se começar a busca da esquerda para a direita, até atingir o nó-objetivo. Sendo assim, o algoritmo de busca em profundidade consiste nos seguintes passos (WINSTON, 1992):

1. Construir uma fila (queue) com 1 elemento consistindo de um caminho de comprimento zero contendo somente o nó raiz (root);

2. Repetir até encontrar o primeiro caminho da fila que contenha o nó-objetivo ou até que a fila esteja vazia

a. “Remover” o primeiro caminho da fila; criar novos caminhos estendendo o primeiro caminho para todos os nós vizinhos do nó terminal;

b. Rejeitar todos novos caminhos com repetição (loop);

c. Adicionar novos caminhos, se existirem, no início da fila (front), ou seja, os nós-filhos ou sucessores são colocados no início da fila (mais à esquerda) para serem visitados antes da pesquisa dos demais pais do nível anterior;

3. Se o objetivo for encontrado anunciar sucesso! Caso contrário, anunciar falha.

Considerando a figura 11 e supondo, então, que inicialmente uma fila seja formada por (A1, A2, A3, ...Ak ... An), o procedimento determina tirar um membro da fila (mais à esquerda) e explorá-lo, ou seja, verificar se ele não é o nó-objetivo. Se não for, obter seus filhos e colocá-los no início da fila de nós abertos, como por exemplo

(A11, A12, A13, A2, A3, ... Ak ... An)

Dessa forma, os nós filhos serão explorados antes dos demais nós-pais de mesmo comprimento, uma vez que sempre exploramos antes os nós mais à esquerda da fila. No próximo ciclo, a fila ficaria da seguinte forma:

(A111, A112, A12, A13, A2, A3, ... Ak ... An).

Da mesma forma que a busca em largura, o nó a explorar é sempre o nó cabeça da fila.

3.5.3 – Comparação entre Busca em Largura e Busca em Profundidade

A Busca em Profundidade é uma boa idéia quando:

• a profundidade não é grande;

• para destinos próximo à raiz;

• existe confiança de que todos os caminhos parciais ou atingem seu fim ou se tornam completos após um razoável número de passos.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

20

A Busca em Profundidade é má idéia quando existem caminhos longos (fator de ramificação = branching factor = número de sucessores ou filhos do nó é grande).

A Busca em Largura é uma boa idéia para árvores com grande profundidade e com fator de ramificação = branching factor = número de sucessores ou filhos do nó pequeno).

A Busca em Largura é dispendiosa quando

• todos os caminhos levam ao nó-objetivo localizado na mesma profundidade, independente de caminho;

• o fator de ramificação é grande (por causa da explosão exponencial).

3.6 – Estratégias de Busca Heurísticas ou com Informação

A eficiência da busca pode ser incrementada de forma espetacular, se existir uma maneira para ordenar as escolhas, de forma que os caminhos mais promissores possam ser explorados mais cedo.

Em várias situações é possível obter medidas de forma a determinar uma ordem razoável. Os métodos de busca que obtêm vantagens com tais medidas são chamados métodos de busca informados heuristicamente (WINSTON, 1992, p. 70). As medidas heurísticas são, portanto, informações específicas a respeito do problema que permitam um direcionamento aproximado da busca (BITTENCOURT, 2001, p. 219).

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

21

3.6.1 – Busca Branch-and-Bound

Uma das formas de encontrar um caminho ótimo é usar a busca branch-and-bound. A idéia básica é simples. Suponha que se deseje uma solução ótima para o grafo apresentado na figura 14. Suponha também que um oráculo tenha informado que S-D-E-F-G é a solução ótima. Sendo um cientista, no entanto, você não acredita em oráculos.

Figura 14 – Exemplo de Grafo Fonte: WINSTON, 1992.

Entretanto, sabendo que o comprimento do caminho S-D-E-F-G é 13, é possível eliminar algum trabalho que, de outra forma, deveria ser feito. Por exemplo, como mostra a árvore de busca correspondente, apresentada na figura 15, não há necessidade de considerar caminhos que iniciam com S-D-A-B, porque seu comprimento será no mínimo 13, dado que o comprimento de S-D-A-B já é 13.

Figura 15 – Parte da árvore de busca corresponde ao grafo da figura 19 Fonte: WINSTON, 1992.

4

4 4

5 5

3

3 4 2

C A

B

S

E D

G

F

E

G

F

A

S

D

A

B

13

13

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

22

De forma mais geral, a busca branch-and-bound mantém sempre uma trilha de todos os caminhos parciais em disputa para maiores considerações posteriores. O caminho mais curto é estendido 1 nível, criando tantos caminhos parciais novos quantas forem as ramificações. A seguir, esses novos caminhos são considerados, junto com os anteriores ainda restantes na fila de abertos. Esse processo se repete até que o objetivo seja alcançado ao longo de algum caminho.

Levando em consideração que o caminho mais curto foi sempre o escolhido para ser expandido, o primeiro caminho que alcançou o objetivo parece ser o caminho ótimo.

Para se ter certeza, é necessário expandir todos os caminhos parciais até que eles sejam do mesmo tamanho ou maiores do que o tamanho do caminho completo (o primeiro caminho que alcançou o objetivo). A razão é que o último passo executado para alcançar o objetivo pode ser longo o bastante para tornar a suposta solução maior do que os tamanhos de um ou mais caminhos parciais. Sendo assim, ao invés de terminar a execução do algoritmo quando o primeiro caminho for encontrado, a busca termina quando caminhos parciais mais curtos, relativos aos nós abertos, forem do mesmo comprimento (mesma distância acumulada) ou maiores que o do menor caminho completo.

Na busca Branch-and-Bound, o algoritmo “avança e volta” caso se “arrependa” do caminho adotado. Sendo assim, a busca Branch-and-Bound consiste nos seguintes passos (WINSTON, 1992):

1. Construir uma fila (queue) com 1 elemento consistindo de um caminho de comprimento zero contendo somente o nó raiz (root);

2. Repetir até encontrar o primeiro caminho da fila que contenha o nó-objetivo ou até que a fila esteja vazia

a. “Remover” o primeiro caminho da fila; criar novos caminhos estendendo o primeiro caminho para todos os nós vizinhos do nó terminal;

b. Rejeitar todos novos caminhos com ciclos (loop);

c. Adicionar à fila os novos caminhos restantes, se existirem;

d. Classificar toda a fila pelos valores do comprimento do caminho até o nó (distâncias acumuladas), colocando os caminhos de menor custo no início ou na cabeça (front) da fila. Dessa forma, o caminho de menor custo será avaliado primeiro;

3. Se o objetivo for encontrado anunciar sucesso! Caso contrário, anunciar falha.

A figura 16 apresenta a seqüência de exploração da busca branch-and-bound quando executada sem avaliação de caminhos parciais, supondo que o nó-objetivo é o nó G. No primeiro passo, a distância do caminho parcial S-A é 3 e de S-D é 4 e, sendo assim, o caminho parcial S-A é selecionado para expansão. A seguir, S-A-B e S-A-D são gerados a partir de S-A com distâncias de 7 e 8, respectivamente.

Como o objetivo não foi encontrado e avaliando os caminhos parciais existentes na fila de open (S-D com 4, S-A-B com 7 e S-A-D com 8), o caminho parcial S-D com 4 é expandido,

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

23

gerando os caminhos parciais S-D-A e S-D-E. Nesse ponto, existem 4 caminhos parciais para serem avaliados (S-A-B com 7, S-A-D com 8, S-D-A com 9 e S-D-E com 6) e o caminho parcial S-D-E é o mais curto.

No sétimo passo, os caminhos parciais S-A-D-E e S-D-E-F são os caminhos mais curtos com distância 10. Expandindo o caminho S-A-D-E, são obtidos dois caminhos terminando com os nós B e F. Expandindo S-D-E-F, do lado direito da árvore, obtém-se o caminho completo S-D-E-F-G, com uma distância total de 13. Este caminho é o mais curto existente, mas para você ficar absolutamente seguro disso, deve estender os caminhos parciais S-D-E-B com distância de 11 e S-A-B-E com distância de 12. Observe que o segundo caminho parcial S-A-B-C com valor 11 não pode mais ser expandido pois C é nó-folha. Não existe necessidade de estender o caminho parcial S-D-A-B, uma vez que sua distância de 13 é igual à distância do caminho completo.

A busca termina quando todos os caminhos parciais relativos aos nós abertos são do mesmo comprimento (mesma distância acumulada) ou maiores que o do caminho completo (S-D-E-F-G) (WINSTON, 1992).

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

24

(passo 1)

(passo 2)

(passo 3)

(passo 4)

A

S

D

3 4

E

A

B

S

D

D A

7 8 9 6

A

B

S

D

D 7 8

4

E

F

A

B

S

D

D A

B

11 10

7 8 9

Figura 16 – Passo-a-passo – Busca Branch-and-Bound Fonte: WINSTON, 1992.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

25

(passo 5)

(passo 6)

(passo 7)

C

E

F

A

B

S

D

D A

B E

8 9

11 12 11 10

C

E

F

A

B

S

D

D A

E B E

9

11 12 10 11 10

C

E

F

A

B

S

D

D A

E B B E 11 12 10 13 11 10

Figura 16 – Passo-a-passo – Busca Branch-and-Bound Fonte: WINSTON, 1992.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

26

(passo 8)

(passo 9)

C

E

F

A

B

S

D

D A

E B B E

B F

11 12 13 11 10

15 14

C

E

G

F

A

B

S

D

D A

E B B E

B F

11 12 13 11

15 14 13

Figura 16 – Passo-a-passo – Busca Branch-and-Bound Fonte: WINSTON, 1992.

nó-folha

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

27

(passo 10)

(passo 11)

C

E

G

F

A

B

S

D

D A

E B B

D

E

F B F A C

11 13

14 16 15 14 15 15 13

C

E

G

F

A

B

S

D

D A

E B B E

B F A C

11 12 13

15 14 15 15 13

Figura 16 – Passo-a-passo – Busca Branch-and-Bound Fonte: WINSTON, 1992.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

28

3.6.2 – Busca Branch-and-Bound com Estimativa

Em alguns casos, é possível melhorar de forma significativa a busca branch-and-bound utilizando as distâncias já percorridas e as estimativas de distâncias restantes.

Se as estimativas sobre as distâncias restantes forem boas, a estimativa do comprimento total do caminho e também será boa, onde:

e = d + r

e = custo total estimado de um caminho;

d = custo do caminho já percorrido – já conhecido;

r = custo da distância restante (do ponto atual até o objetivo) – é uma estimativa.

Segundo Winston (1992), uma super-estimativa das distâncias restantes pode levar a busca branch-and-bound para longe do caminho ótimo permanentemente. No entanto, a sub-estimativa das distâncias restantes não permite que o caminho ótimo seja negligenciado, pois produz uma sub-estimativa das distâncias do caminho total.

Sendo assim, a busca Branch-and-Bound com estimativa consiste nos seguintes passos (WINSTON, 1992):

1. Construir uma fila (queue) com 1 elemento consistindo de um caminho de comprimento zero contendo somente o nó raiz (root);

2. Repetir até encontrar o primeiro caminho da fila que contenha o nó-objetivo ou até que a fila esteja vazia

a. “Remover” o primeiro caminho da fila; criar novos caminhos estendendo o primeiro caminho para todos os nós vizinhos do nó terminal;

b. Rejeitar todos novos caminhos com ciclos (loop);

c. Adicionar à fila os novos caminhos restantes, se existirem;

d. Classificar toda a fila pela soma dos valores do comprimento do caminho (distâncias acumuladas) + a estimativa do custo restante (até o objetivo), colocando os caminhos de menor custo total no início ou na cabeça (front) da fila. Dessa forma, o caminho de menor custo TOTAL será avaliado primeiro;

3. Se o objetivo for encontrado anunciar sucesso! Caso contrário, anunciar falha.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

29

A figura 17 apresenta as distâncias restantes em linha reta de cada cidade até o objetivo, relativas ao grafo e respectiva árvore de busca apresentados na figura 4 (WINSTON, 1992).

Figura 17 – Exemplo de distâncias estimadas entre cada cidade e o objetivo Fonte: WINSTON, 1992.

A figura 18 apresenta uma árvore de busca que foi gerada considerando as estimativas de distâncias restantes de cada cidade até o objetivo apresentadas na figura 17 e o grafo apresentado na figura 14. Os valores em letra preta sem negrito representam as distâncias entre cidades (nós) e os valores em vermelho/em negrito/sublinhados representam as estimativas de distâncias restantes de cada nó até o nó objetivo.

C A B

S

E

6.7 4.0

11.0

10.4

6.9

8.9 3.0

D

G

F

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

30

Figura 18 – Árvore de Busca com distância entre nós e estimativa de custo restante Fonte: WINSTON, 1992.

A figura 19 apresenta a seqüência de exploração da busca branch-and-bound com estimativa, a partir da árvore de busca apresentada na figura 18. Como dito anteriormente, os nós A e D são gerados a partir do nó raiz S. Analisando-os, percebe-se que a busca começará pelo nó D pois o custo estimado do seu caminho total é 12.9, que é menor que o do nó A (13.4).

A expansão do nó D leva aos caminhos parciais S-D-A, cujo custo total estimado é de 19.4 e S-D-E, com custo de 12.9. S-D-E é, portanto, o caminho parcial a expandir. O resultado é um caminho para B, com uma distância estimada de 17.7 e outro caminho para F, com distância total estimada de 13.0. O caminho parcial a expandir é S-D-E-F, pois tem custo total estimado menor que o S-D-E-B.

Essa expansão leva a um caminho completo S-D-E-F-G, com uma distância total de 13.0 e como nenhum caminho parcial tem uma distância estimada total menor que 13, nenhuma busca adicional será requerida.

C

E

G

F

A

B

S

D

D A

E B B

D

E

F B F C E A C

G C

G

G F

3 4

4 5 5 2

4 5 2 4 5 4

2 4 5 4 4 5 4 4 3

3 4 3 4

3

10.4

6.7

4.0

8.9

8.9 6.9 10.4

6.9 6.7 3.06.9 6.7

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

31

É claro que, quanto mais próxima a estimativa for da distância verdadeira, mais eficiente será a busca, pois se não houver diferenças entre elas, não haverá chance de qualquer movimento falso (WINSTON, 1992).

A

S

D

13.4 (10.4 + 3) 12.9 (8.9 + 4)

Figura 19 – Passo-a-passo – Busca Branch-and-Bound com estimativa Fonte: WINSTON, 1992.

E

A

S

D

A

19.4 (10.4 + 5 + 4) 12.9 (6.9 + 2 + 4)

13.4

E

F

A

S

D

A

B

19.4

13.4

17.7 (6.7 + 11) 13 (3.0 + 10)

19.4

13.4

17.7

E

G

F

A

S

D

A

B

13 (0.0 + 4 + 2 + 4 + 3)

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

32

3.6.3 – Busca A* (A Estrela)

A busca A* é uma busca branch-and-bound com estimativa de distância restante, combinada com o princípio da programação dinâmica, ou seja, é o algoritmo de busca heurística que utiliza como custo do caminho a soma das distâncias já percorridas com as estimativas de distâncias restantes, combinado com o princípio da programação dinâmica. Considerando o problema de minimização, é um algoritmo que encontra o caminho de menor custo entre dois pontos, se ele existir.

Se as estimativas sobre as distâncias restantes forem boas, a estimativa do custo total do caminho e também será boa, onde:

e = d + r e = custo total estimado do caminho; d = custo total do caminho já percorrido. É uma medida conhecida do custo de ir do estado inicial ao nó atual; r = custo estimado da distância restante (do ponto atual até o nó objetivo). É uma estimativa do custo adicional de ir do nó atual para o nó objetivo. É o lugar onde o conhecimento a respeito do domínio do problema é explorado (Rich, 1988).

O princípio da programação dinâmica afirma que (WINSTON, 1992):

“O melhor caminho para chegar até um local (nó) intermediário particular consiste no melhor caminho para chegar até ele, a partir de um local inicial, seguido pelo melhor caminho deste local intermediário até seu objetivo. Não há necessidade de investigar qualquer outro caminho até ele ou a partir dele”.

Sendo assim, na procura do melhor caminho de S para G, todos os caminhos de S para qualquer nó intermediário I, exceto os de comprimento mínimo podem ser ignorados. A figura 20 ilustra o princípio da programação dinâmica. Os números indicam distâncias acumuladas. Não faz sentido expandir a instância do nó D no final do caminho S-A-D, pois buscar o objetivo através da instância de D no final do caminho S-D é mais eficiente, uma vez que tem o menor custo. O caminho S-A-D pode, portanto, ser eliminado.

Figura 20 – Exemplo do Princípio da Programação Dinâmica Fonte: WINSTON, 1992.

A

B

S

D

D

12.9

16.9 13.7

nunca será expandido

próximo a ser expandido

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

33

O algoritmo A* produz uma solução ótima quando a estimativa da distância restante for menor que a distância real, ou seja, o algoritmo será ótimo (caso exista um caminho, ele sempre será o de menor custo, examinando o menor número de nós). No entanto, Winston (1992) afirma que uma super-estimativa das distâncias restantes pode levar a busca A* para longe do caminho ótimo permanentemente.

A busca A* consiste nos seguintes passos (WINSTON, 1992):

1. Construir uma fila (queue) com 1 elemento consistindo de um caminho de comprimento zero contendo somente o nó raiz (root);

2. Repetir até encontrar o primeiro caminho da fila que contenha o nó-objetivo com custo total estimado ≤ custo total estimado dos caminhos parciais OU até que a fila esteja vazia;

a. “Remover” o primeiro caminho da fila; criar novos caminhos estendendo o primeiro caminho para todos os nós vizinhos do nó terminal, obtendo todos os seus filhos;

b. Rejeitar todos os novos caminhos com ciclos (loop);

c. Se dois ou mais caminhos alcançarem um nó comum, excluir todos esses caminhos, com exceção daquele que alcança o nó comum com mínimo custo estimado total;

d. Classificar toda a fila pela soma dos valores do comprimento do caminho (distâncias acumuladas – já percorridas) com a estimativa sub-estimada do custo restante (até o objetivo), colocando os caminhos de menor custo total no início ou na cabeça (front) da fila. Dessa forma, o caminho de menor custo total será avaliado primeiro;

3. Se o objetivo for encontrado anunciar sucesso! Caso contrário, anunciar falha.

Levando em consideração que o caminho mais curto foi sempre o escolhido para ser

expandido, o primeiro caminho que alcançou o objetivo parece ser o caminho ótimo. No entanto, para se ter certeza, é necessário expandir todos os caminhos parciais até que

eles tenham o mesmo custo total ou tenham o custo total maior do que o custo total do caminho que contém o nó objetivo. A justificativa é que o último passo executado para alcançar o objetivo pode ser longo o bastante para tornar a suposta solução maior do que os tamanhos de um ou mais caminhos parciais. Sendo assim, ao invés de terminar a execução do algoritmo quando o primeiro caminho for encontrado, a busca termina quando caminhos parciais mais curtos, relativos aos nós abertos, forem do mesmo comprimento (mesma distância acumulada) ou maiores que o do menor caminho completo.

Busca em Espaço de Estados

Profa. Denise Franzotti Togneri

34

Avaliando as diferentes estratégias de busca heurística apresentadas, percebe-se que existem várias formas de pesquisar por caminhos ótimos, cada uma delas apresentando várias vantagens (WINSTON, 1992):

• a busca Branch-and-Bound é boa quando a árvore for grande e os caminhos ruins se tornarem claramente ruins rapidamente;

• a busca Branch-and-Bound com estimativa é boa quando existir uma boa sub-estimativa das distâncias restantes até o objetivo;

• a busca A* é boa quando a busca Branch-and-Bound com estimativa for boa e, devido à programação dinâmica, quando muitos caminhos convergirem para o mesmo local (mesmo nó).

Referências:

AHONEN, Hannu Tapio. Notas de Aula da disciplina Projeto e Análise de Algoritmos. Vitória, Espírito Santo, 1998.

BITTENCOURT, Guilherme. Inteligência artificial: ferramentas e teorias. 2 ed. Florianópolis: Editora da UFSC, 2001.

NILSSON, Nils J. Artificial intelligence: a new synthesis. San Francisco, California: Morgan Kaufmann, 1998.

RUSSELL, Stuart; NORVIG, Peter. Inteligência Artificial: tradução da segunda edição. Rio de Janeiro: Elsevier, 2004.

WINSTON, Patrick Henry. Artificial intelligence. 3rd ed. Reading, Massachusetts: Addison-Wesley, 1992.