• Nenhum resultado encontrado

ESTRATÉGIA DE BUSCA INFORMADA (HEURÍSTICA)

Resolução de problemas por meio de busca

3.5 ESTRATÉGIA DE BUSCA INFORMADA (HEURÍSTICA)

Esta seção mostra como uma estratégia de busca informada — a que utiliza conhecimento de um problema específico além da definição do problema em si — pode encontrar soluções de forma mais eficiente do que uma estratégia de busca sem informação.

A abordagem geral que consideramos é chamada busca de melhor escolha. A busca de melhor escolha é uma instância do algoritmo geral da BUSCA-EM-ÁRVORE em que um nó é selecionado para a expansão com base em uma função de avaliação, f(n). A função de avaliação é analisada como uma estimativa de custo, de modo que o nó com a menor avaliação será expandido primeiro. A implementação da busca em grafos de melhor escolha é idêntica à busca de custo uniforme (Figura 3.14), exceto pelo uso de f em vez de g para ordenar a fila de prioridade.

A escolha de f determina a estratégia de busca (por exemplo, como mostra o Exercício 3.21, a busca de melhor escolha em árvore inclui a busca em profundidade como caso especial). A maior parte dos algoritmos de melhor escolha inclui como componente de f uma função heurística, denotada por h(n):

h(n) = custo estimado do caminho de menor custo do estado do nó n para um estado objetivo.

(Note que h(n) recebe um nó como entrada, mas, ao contrário de g(n), depende apenas do estado naquele nó.) Por exemplo, na Romênia, pode-se estimar o custo do caminho de menor custo de Arad para Bucareste através da distância em linha reta de Arad para Bucareste.

Funções heurísticas são a forma mais comum como o conhecimento adicional do problema é transmitido ao algoritmo de busca. Estudaremos heurísticas mais profundamente na Seção 3.6. Por ora, consideramos as heurísticas como funções arbitrárias, não negativas, de problemas específicos, com uma restrição: se n for um nó objetivo, então h(n) = 0. O restante desta seção abrange duas maneiras de usar a informação heurística para orientar a busca.

3.5.1 Busca gulosa de melhor escolha

A busca gulosa de melhor escolha8 tenta expandir o nó que está mais próximo do objetivo, com o

fundamento de que isso pode conduzir a uma solução rapidamente. Assim, ela avalia os nós usando apenas a função heurística, ou seja, f(n) = h(n).

Vamos ver como isso funciona para problemas de roteamento na Romênia; usaremos a heurística d e distância em linha reta (DLR), que chamaremos de hDLR. Se o objetivo for Bucareste, precisaremos saber as distâncias em linha reta para Bucareste, apresentadas na Figura 3.22. Por exemplo, hDLR (Em(Arad)) = 366. Observe que os valores de hDLR não podem ser calculados da

descrição do problema em si. Além disso, é preciso certa experiência para saber que hDLR está correlacionado com as distâncias reais da estrada e, portanto, é uma heurística útil.

Arad Bucareste Craiova Drobeta Eforie Fagaras Giurgiu Hirsova Iasi Lugoj 366 0 160 242 161 176 77 151 226 244 Mehadia Neamt Oradea Pitesti Rimnicu Vilcea Sibiu Timisoara Urziceni Vaslui Zerind 241 234 380 100 193 253 329 80 199 374

Figura 3.22 Valores de hDLR — distâncias em linha reta para Bucareste.

A Figura 3.23 mostra o andamento de uma busca gulosa de melhor escolha utilizando hDLR para encontrar um caminho de Arad para Bucareste. O primeiro nó a ser expandido a partir de Arad será Sibiu porque é mais perto de Bucareste do que Zerind ou Timisoara. O próximo nó a ser expandido será Fagaras porque é o mais próximo. Fagaras, por sua vez, vai gerar Bucareste, que é o objetivo. Para esse problema particular, a busca gulosa de melhor escolha utilizando hDLR encontra uma solução, sem nunca expandir um nó que não estiver no caminho da solução; portanto, seu custo de busca é mínimo. Não é ótimo, no entanto: o caminho via Sibiu e Fagaras para Bucareste é 32 quilômetros mais longo que o caminho através de Rimnicu Vilcea e Pitesti. Isso mostra por que o algoritmo é chamado de “ambicioso”; a cada passo ele tenta chegar o mais próximo do objetivo que puder.

Figura 3.23 Etapas de uma busca gulosa de melhor escolha em árvore para Bucareste com a

heurística de distância em linha reta hDLR. Os nós são rotulados com os seus valores h.

A busca gulosa de melhor escolha em árvore também é incompleta, mesmo em um espaço de estados finito, exatamente como a busca em profundidade. Considere o problema de ir de Iasi para Fagaras. A heurística sugere que Neamt seja expandida primeiro porque é mais próxima de Fagaras, mas isso é um beco sem saída. A solução é ir primeiro a Vaslui — um passo que, de acordo com a heurística, é na verdade mais longe do objetivo — e, em seguida, continuar para Urziceni, Bucareste e Fagaras. No entanto, o algoritmo nunca irá encontrar essa solução porque expandir Neamt coloca Iasi de volta na borda, Iasi está mais perto de Fagaras que Vaslui e, assim, Iasi será novamente expandida, levando a um laço infinito (a versão de busca em grafos é completa em espaços finitos, mas não infinitos). O pior caso de complexidade de tempo e de espaço para a versão em árvore é

O(bm), onde m é a profundidade máxima do espaço de busca. Com uma boa função heurística, no

entanto, a complexidade pode ser reduzida substancialmente. O montante da redução depende do problema particular e da qualidade da heurística.

A forma de solução mais amplamente conhecida da busca de melhor escolha é chamada de busca

A* (pronuncia-se “busca A estrela”). Ela avalia os nós através da combinação de g(n), o custo para

alcançar o nó, e h(n), o custo para ir do nó ao objetivo:

f(n) = g(n) + h(n).

Uma vez que g(n) dá o custo do caminho desde o nó inicial até o nó n e h(n) é o custo estimado do caminho de menor custo de n até o objetivo, teremos

f (n) = custo estimado da solução de menor custo através de n.

Assim, se estamos tentando encontrar a solução de menor custo, algo razoável para tentar em primeiro lugar, seria o nó com o menor valor de g(n) + h(n). Acontece que essa estratégia é mais do que apenas razoável: desde que a função heurística h(n) satisfaça certas condições, a busca A* será completa e ótima. O algoritmo é idêntico à BUSCA-DE-CUSTO-UNIFORME, exceto que A* usa g +

h em vez de g.