3.2 Representa¸c˜ao da ´arvore de mem´oria
3.2.1 Arvores OU
As estruturas de dados de ´arvores representam uma rela¸c˜ao hier´arquica em que um nodo pode ter v´arios sucessores e somente um antecessor. De acordo com [15], uma ´arvore ´e um conjunto finito de um ou mais n´os, tais que:
• Existe um n´o denominado raiz;
• Os demais n´os formam: (a) m>= 0 conjuntos disjuntos; (b) s1, s2, ... sm, tais que cada um desses conjuntos tamb´em ´e uma ´arvore (sub-´arvore).
As ´arvores podem ser representadas de diversos modos:
• Representa¸c˜ao hier´arquica;
• Representa¸c˜ao por conjunto;
• Representa¸c˜ao por express˜ao parentetizada;
• Representa¸c˜ao por express˜ao n˜ao parentetizada.
A representa¸c˜ao hier´arquica apresenta melhor visualiza¸c˜ao, assim est´a integralmente relacionada com o trabalho. A representa¸c˜ao parentetizada e n˜ao parentetizada s˜ao ´uteis para guardar em arquivos os dados de uma ´arvore.
A representa¸c˜ao em ´arvore pretende facilitar o entendimento, pois ´e um tipo de estru-tura de dados j´a conhecida por alunos de ciˆencia da computa¸c˜ao. Al´em disso, a repre-senta¸c˜ao hier´arquica na visualiza¸c˜ao da aloca¸c˜ao de mem´oria permite ver quais estados do mundo ser˜ao ating´ıveis diretamente a partir de um outro estado pela sua representa¸c˜ao em nodos e arestas, o que pode ser uma forma intuitiva de representa¸c˜ao visual ao aprendiz.
Geralmente os algoritmos de busca de IA se utilizam de ´arvores OU, pois um algoritmo que quer resolver um determinado problema, ao atingir um n´o arbitr´ario, opta por um dos ramos de sa´ıda, baseado em algum crit´erio e, ap´os um certo n´umero de n´os pesquisados, encontrando a solu¸c˜ao, tamb´em definida por algum crit´erio, pode encerrar a busca e parar.
A corre¸c˜ao dessa abordagem se justifica pois cada ramo de sa´ıda de cada n´o ´e disjuntivo (OU) e ent˜ao, se a solu¸c˜ao ´e verdadeira quando percorremos um dos ramos, n˜ao precisamos verificar outros ramos da ´arvore de busca. A Figura 3.1 representa de forma gr´afica uma
´arvore OU.
Algoritmos de busca heur´ısticas s˜ao t´ecnicas de inteligˆencia artificial aplicadas a pro-blemas de alta complexidade te´orica [35] que n˜ao s˜ao resolvidos com t´ecnicas de busca convencionais, principalmente as de natureza puramente num´erica.
A “complexidade”de um problema est´a diretamente relacionada ao seu “Espa¸co de Busca”correspondente. As estrat´egias de busca est˜ao baseadas em diversos crit´erios [35]
como:
• Espa¸co - ´e a quantidade de mem´oria necess´ario para realizar a busca, ou seja, re-presentar o espa¸co de estados;
• Completude - a estrat´egia de busca sempre encontra uma solu¸c˜ao se ela existir ou quando existir mais de uma solu¸c˜ao;
Figura 3.1: Representa¸c˜ao de uma ´arvore OU
• Otimalidade - a estrat´egia encontra a melhor solu¸c˜ao (em geral a de menor custo) quando existem diferentes solu¸c˜oes;
• Tempo - quanto tempo ´e gasto para encontrar a solu¸c˜ao (como tempo dos algoritmos de busca heur´ıstica n˜ao ´e foco do trabalho presente, foram omitidos todos os detalhes desta natureza);
Para um algoritmo de busca heur´ıstica, ´e necess´aria uma representa¸c˜ao do conhe-cimento do dom´ınio em estados, os quais se enquadram em modelo computacional por meio de vari´aveis de mem´oria. A solu¸c˜ao do problema, cujo espa¸co de busca ´e formado por transforma¸c˜oes sucessivas de estados em ordem de gera¸c˜ao de acordo com a fun¸c˜ao heur´ıstica, ´e um processo complexo. ´E exatamente o uso de heur´ıstica que provoca a redu¸c˜ao da explos˜ao combinat´oria de possibilidades de busca.
Sendo assim, dado um estado inicial e o estado final, a ferramenta indica como o algoritmo encontra uma trajet´oria (ou plano) que leve de um estado ao outro. Em outras palavras, a solu¸c˜ao ´e o caminho ou o conjunto de estados necess´arios (ou a¸c˜oes) para passar do estado inicial at´e o estado final.
No ensino de busca heur´ıstica, ´e sempre dif´ıcil ao aprendiz entender o funcionamento do algoritmo. Essa dificuldade d´a-se principalmente no que se refere `as mudan¸cas de estado, isto ´e, na realiza¸c˜ao das opera¸c˜oes. Geralmente, quando ´e executado um algoritmo de busca heur´ıstica este exibe ao aprendiz somente o “estado solu¸c˜ao ou o caminho solu¸c˜ao”.
Devido a isso, o aprendiz n˜ao consegue desenvolver o conceito mental de como o algoritmo chegou `aquela solu¸c˜ao.
As buscas em ´arvores OU s˜ao tipicamente aplicadas a classes de problemas como os de encontrar o bom caminho (caminho cujo custo ´e menor do que o de escolha aleat´oria).
Todavia, o problema de encontrar o caminho m´ınimo pode ser interessante porque com-pletude e otimalidade muitas vezes s˜ao aspectos exigidos no enunciados de problemas desse tipo de busca.
3.2.1.1 Algoritmo A*
O algoritmo de busca A* tenta minimizar o custo total da solu¸c˜ao (plano, trajet´oria ou caminho), combinando a busca econˆomica com uma busca completa. ´E um algo-ritmo ´otimo e completo porque encontra o caminho de custo m´ınimo desde que a fun¸c˜ao heur´ıstica nunca superestime o custo real.
Este algoritmo evita expandir caminhos que est˜ao com o custo alto, considerando os es-tados que tˆem menor expectativa de custo. Portanto, a fun¸c˜ao de avalia¸c˜ao que determina a ordem de inser¸c˜ao de uma trajet´oria em sua lista de prioridades, e consequentemente o pr´oximo nodo a ser expandido, ´e a seguinte: f(Ec) = g(Ec) + h(Ec), onde h ´e a fun¸c˜ao heur´ıstica definida para calcular a estimativa de custo de percurso do estado corrente (Ec) at´e o estado final (Ef), e g ´e o custo real acumulado para o percurso do estado inicial (Ei) at´e o Ec. De acordo com a demonstra¸c˜ao formal, reproduzida no conhecido livro de Russell e Norvig [35], quando a fun¸c˜aoh utilizada ´e admiss´ıvel (nunca superestima o custo real), al´em de completo, o algoritmo de busca A* ´e minimalista (encontra a trajet´oria de menor custo).
Para o algoritmo encontrar a solu¸c˜ao m´ınima n˜ao ´e necess´ario carregar na mem´oria todos os nodos em amplitude, pois o objetivo da heur´ıstica ´e permitir que o algoritmo
expanda o caminho de menor custo que, em qualquer momento, passa por um certo estado corrente (Ec). Isso ´e feito de maneira a cobrir uma ou mais trajet´orias do estado inicial at´e o nodo final, definindo uma seq¨uencia de estados ou a¸c˜oes sem percorrer todo o espa¸co de busca.
Neste trabalho, a ferramenta projetada e implementada fornece elementos de visual-iza¸c˜ao da mem´oria tanto do algoritmo A* quanto de qualquer outro escolhido para que as caracter´ısticas inerentes fiquem mais claras do que apenas os conceitos apresentados nos livros. O algoritmo A* n˜ao ´e um dos melhores algoritmos de busca mas no aspecto pedag´ogico ele ´e excelente para a transmiss˜ao de aspectos importantes e gen´ericos sobre busca heur´ıstica.
3.2.1.2 Outros algoritmos de ´ arvore OU
Esta se¸c˜ao apresenta alguns dos v´arios algoritmos de busca heur´ıstica que existem al´em do A*. O algoritmo de busca heur´ıstica IDA* Iterative Deepening A* ´e um dos mais fortemente baseados nas id´eias do A*. Para o aprendiz ter um conhecimento melhor sobre seus conceitos b´asicos, al´em de conhecer o A*, ´e preciso abordar os seguintes elementos:
• Busca de custo fixo;
• Aumento iterativo do custo da busca;
• Contornos de custo do espa¸co de busca.
Este algoritmo foi criado para suprir a deficiˆencia do A*, onde o consumo de mem´oria cresce exponencialmente. Al´em da busca de custo fixo limitar o consumo de mem´oria, ela
´e capaz de evitar as deficiˆencias da busca em profundidade, que em geral acha solu¸c˜oes muito longas.
O algoritmo IDA* precisa impor um corte na trajet´oria ao atingir o custo m´aximo sem incluir o E(f) para dar continuidade `a busca por meio de outra trajet´oria que ainda pode inclu´ı-lo (Ef) dentro do custo m´aximo definido.
Dependendo do custo m´aximo, a busca de custo fixo ´e completa mas n˜ao ´e minimalista.
Portanto o aumento iterativo do custo, combinado com a busca de custo fixo inclui as
caracter´ısticas que deixam o algoritmo minimalista e completo. Entretanto, o IDA* n˜ao lida com custo negativo. Pode-se apenas dizer que o IDA* ´e minimalista e completo porque o algoritmo inicia com altura zero (uma quest˜ao formal que traz resultados interessantes quando o limite passar a ser o custo da trajet´oria e n˜ao o seu tamanho). Cada ciclo que termina sem incluir o Ef ´e seguido de outro cujo limite de custo ´e exatamente o da trajet´oria de menor custo que ultrapassou o limite anterior.
Para se compreender melhor o conceito de contorno de custo do espa¸co de busca, inicia-se a explica¸c˜ao por meio da associa¸c˜ao do mesmo a um conjunto de trajet´orias cujo custo ´e menor ou igual a um valor-limite. Isso resulta na possibilidade de se manter a expans˜ao de trajet´orias cujos valores de f est˜ao comprendidos dentro do valor-limite. O valor-limite do primeiro contorno de custo ´e f(Ei).
V´arios contornos de custo podem ser ajustados durante o processo para que um novo ciclo de busca possa se reiniciar, sempre a partir do Ei, e tente incluir o Ef. Pode-se perceber que o algoritmo tem suas vantagens em rela¸c˜ao ao A* devido ao baix´ıssimo consumo de mem´oria (guarda apenas uma trajet´oria), mantendo as mesmas vantagens do A* pois sempre encontra o caminho m´ınimo (se existir um).
Outro algoritmo interessante ´e o SMA* Simplified Memory-Bouded A*, o qual tenta corrigir algumas limita¸c˜oes do algortimo IDA*. Para compreender melhor os seus con-ceitos b´asicos, al´em de conhecer o A* ´e necess´ario conhecer a busca de tamanho fixo de mem´oria, pois a lista de prioridades com as trajet´orias sofre controle por meio de um valor de tamanho m´aximo que representa a soma dos tamanhos das trajet´orias registradas no momento.
Esse algoritmo elimina a(s) pior(es) trajet´oria(s) para que uma nova trajet´oria seja inserida. Por´em, o SMA* tamb´em diminui a repeti¸c˜ao de expans˜ao de estados por meio do registro do custo de uma trajet´oria eliminada. Em s´ıntese, ele realiza a busca de forma limitada pela mem´oria dispon´ıvel, armazenando os nodos explorados at´e o limite dessa mem´oria e eliminando trajet´orias caras da mem´oria quando necessita de espa¸co para explorar novos nodos.
Como simplifica¸c˜ao ainda maior da busca A*, aproximando-se da busca em profundi-dade, pode-se citar um outro algoritmo de busca heur´ıstica bastante conhecido no meio acadˆemico. Seu nome ´e “Melhor Escolha”(Best First) e ficou assim conhecido por ser uma varia¸c˜ao da busca A* reorientada apenas pelo menor valor da fun¸c˜ao heur´ıstica h, a ser aplicada aos descendentes do Ec. Em outras palavras, o algoritmo ´e guiado apenas pela estimativa de menor distˆancia do Ec ao Ef. Suas caracter´ısticas s˜ao:
• Pouco uso de mem´oria;
• N˜ao garante completude nem otimalidade da solu¸c˜ao.
Cabe ressaltar que o A* e suas varia¸c˜oes constituem atualmente os algoritmos mais uti-lizados pelos “quebra-cabe¸cas”(n˜ao pelos “jogos adversaristas”) para resolver problemas de determina¸c˜ao de caminho em ambientes bidimensionais e tridimensionais. E no meio acadˆemico por ser um algoritmo que envolve os aspectos importantes como otimalidade e completude.