EVOLUÇÃO E BUSCA
4.5 AGENTES DE BUSCA ON-LINE EM AMBIENTES DESCONHECIDOS Até agora nos concentramos em agentes que utilizam algoritmos de busca off-line Eles calculam
4.5.4 Aprendizado em busca on-line
A ignorância inicial dos agentes de busca on-line oferece várias oportunidades para aprendizado. Em primeiro lugar, os agentes aprendem um “mapa” do ambiente — mais precisamente, o resultado de cada ação em cada estado — apenas registrando cada uma de suas experiências (note que a suposição de ambientes determinísticos significa que uma experiência é suficiente para cada ação). Em segundo lugar, os agentes de busca local adquirem estimativas mais precisas do custo de cada estado usando regras de atualização local, como no LRTA*. No Capítulo 21, mostramos que essas atualizações convergem eventualmente para valores exatos em todo estado, desde que o agente explore o espaço de estados da maneira correta. Uma vez conhecidos os valores exatos podem ser tomadas decisões ótimas pela simples movimentação para o sucessor de valor mais baixo, isto é, a subida de encosta pura é então uma estratégia ótima.
Se você seguiu nossa sugestão para acompanhar o comportamento de AGENTE-DFS-ON-LINE no ambiente da Figura 4.19, terá notado que o agente não é muito brilhante. Por exemplo, depois de ver
que a ação Para cima vai de (1,1) para (1,2), o agente ainda não tem ideia de que a ação Para baixo volta a (1,1) ou de que a ação Para cima também vai de (2,1) para (2,2), de (2,2) para (2,3), e assim por diante. Em geral, gostaríamos que o agente aprendesse que Para cima aumenta a coordenada y, a menos que exista uma parede no caminho, que Para baixo a reduz, e assim por diante. Para que isso aconteça, primeiro precisamos de uma representação formal e explicitamente manipulável para esses tipos de regras gerais; até agora, ocultamos a informação contida na caixa-preta chamada função RESULTADO. A Parte III é dedicada a essa questão. Em segundo lugar, precisamos de algoritmos que possam construir regras gerais adequadas a partir das observações específicas feitas pelo agente. Esses assuntos serão estudados no Capítulo 18.
4.6 RESUMO
Este capítulo examinou algoritmos de busca para problemas além do caso “clássico” de encontrar o caminho mais curto para um objetivo em um ambiente observável, determinístico, discreto.
• Métodos de busca local como subida de encosta operam sobre formulações de estados completos, mantendo na memória apenas um pequeno número de nós. Foram desenvolvidos vários algoritmos estocásticos, incluindo a têmpera simulada, que devolve soluções ótimas quando recebe um cronograma de resfriamento apropriado.
• Muitos métodos de busca local também se aplicam a problemas de espaços contínuos. A
programação linear e a otimização convexa obedecem a certas restrições sobre a forma do
espaço de estados e da natureza da função objetivo, e admitem algoritmos de tempo polinomial que são sempre extremamente eficientes na prática.
• Um algoritmo genético é uma busca de subida de encosta estocástica em que é mantida uma grande população de estados. Novos estados são gerados por mutação e por cruzamento, que combinam pares de estados da população.
• Em ambientes não determinísticos, os agentes podem aplicar pesquisa E-OU para gerar planos de contingência que alcançam o objetivo, independentemente do resultado que ocorre durante a execução.
• Quando o ambiente for parcialmente observável, o estado de crença representa o conjunto de estados possíveis em que o agente pode estar.
• Os algoritmos de busca-padrão podem ser aplicados diretamente ao espaço de estado de crença para resolver problemas sem sensoriamento, e os de busca de estado de crença E-OU podem resolver problemas gerais parcialmente observáveis. Os algoritmos incrementais que constroem soluções estado por estado em um estado de crença são muitas vezes mais eficientes.
• Os problemas de exploração surgem quando o agente não tem nenhuma ideia sobre os estados e ações de seu ambiente. No caso de ambientes exploráveis com segurança, agentes de busca on-
line podem construir um mapa e encontrar um objetivo, se existir algum. A atualização de
estimativas heurísticas a partir da experiência fornece um método efetivo para escapar de mínimos locais.
NOTAS BIBLIOGRÁFICAS E HISTÓRICAS
As técnicas de busca local têm uma longa história em matemática e ciência da computação. Na realidade, o método de Newton-Raphson (Newton, 1671; Raphson, 1690) pode ser visto como um método de busca local muito eficiente para espaços contínuos em que as informações de gradiente estão disponíveis. Brent (1973) é uma referência clássica para algoritmos de otimização que não exigem tais informações. A busca em feixe, que apresentamos como algoritmo de busca local, teve origem como uma variante de largura limitada da programação dinâmica para reconhecimento de voz no sistema HARPY (Lowerre, 1976). Um algoritmo relacionado é analisado em profundidade por Pearl (1984, Capítulo 5).
O tópico de busca local foi revigorado no início dos anos 1990 por resultados surpreendentemente bons para problemas de satisfação de restrições como o das n rainhas (Minton et al., 1992) e raciocínio lógico (Selman et al., 1992), e pela incorporação da aleatoriedade, de múltiplas buscas simultâneas e de outros aperfeiçoamentos. Esse renascimento do que Christos Papadimitriou chamou de algoritmos da “Nova Era” também despertou interesse crescente entre os cientistas da computação teórica (Koutsoupias e Papadimitriou, 1992; Aldous e Vazirani, 1994). No campo da pesquisa operacional, uma variante da subida de encosta chamada busca tabu ganhou popularidade (Glover e Laguna, 1997). Esse algoritmo mantém uma lista tabu de k estados visitados anteriormente que não podem ser revisitados; essa lista tanto pode melhorar a eficiência na busca em grafos, como pode permitir que o algoritmo escape de alguns mínimos locais. Outra melhoria útil em relação à subida de encosta é o algoritmo STAGE (Boyan e Moore, 1998). A ideia é usar os máximos locais encontrados pela subida de encosta com reinício aleatório para ter uma ideia da forma geral da topologia. O algoritmo ajusta uma superfície suave ao conjunto de máximos locais e depois calcula analiticamente o máximo global dessa superfície. Este se torna o novo ponto de reinício. Demonstrou-se que o algoritmo funciona na prática em problemas difíceis. Gomes et al. (1998) mostraram que as distribuições de tempo de execução de algoritmos de retrocesso sistemático com frequência têm distribuição de cauda pesada; isso significa que a probabilidade de um tempo de execução muito longo é maior do que seria previsto se os tempos de execução estivessem exponencialmente distribuídos. Quando a distribuição do tempo de execução é de cauda pesada, o reinício aleatório encontra em média uma solução mais rápida do que uma única execução para a conclusão.
A têmpera simulada foi descrita primeiro por Kirkpatrick et al. (1983), que a tomaram emprestada diretamente do algoritmo de Metropolis (usado para simular sistemas complexos em física — Metropolis et al., 1953 — e foi criada supostamente durante um jantar festivo em Los Alamos). A têmpera simulada agora é um campo em si mesmo, com centenas de artigos publicados a cada ano.
Encontrar soluções ótimas em espaços contínuos é o principal assunto de diversos campos, incluindo a teoria de otimização, a teoria de controle ótimo e o cálculo de variações. As técnicas básicas são bem explicadas por Bishop (1995); Press et al. (2007) cobrem uma vasta gama de algoritmos e fornecem o software correspondente.
Como Andrew Moore indicou, os pesquisadores tiveram inspiração pelos algoritmos de busca e otimização de uma ampla variedade de áreas de estudo: metalurgia (têmpora simulada), biologia (algoritmos genéticos), economia (algoritmos baseados no mercado de ações), entomologia
(otimização de colônia de formigas), neurologia (redes neurais), comportamento animal (aprendizagem por reforço), montanhismo (subida de encosta) e outros.
A programação linear (PL) foi inicialmente estudada sistematicamente pelo matemático russo Leonid Kantorovich (1939). Foi uma das primeiras aplicações de computadores; o algoritmo
simplex (Dantzig, 1949) ainda é usado, apesar da complexidade exponencial do pior caso.
Karmarkar (1984) desenvolveu a família muito mais eficiente de métodos de ponto interior, que demonstrou ter complexidade polinomial para a classe mais geral de problemas de otimização convexa por Nesterov e Nemirovski (1994). São fornecidas excelentes introduções à otimização convexa por Ben-Tal e Nemirovski (2001) e Boyd e Vandenberghe (2004).
O trabalho de Sewall Wright (1931) sobre o conceito de uma topologia de adaptação foi um importante precursor para o desenvolvimento de algoritmos genéticos. Na década de 1950, diversos estatísticos, incluindo Box (1957) e Friedman (1959), utilizaram técnicas evolucionárias em problemas de otimização, mas somente quando Rechenberg (1965) introduziu as estratégias de
evolução para resolver problemas de otimização de aerofólios a abordagem ganhou popularidade.
Nas décadas de 1960 e 1970, John Holland (1975) defendeu os algoritmos genéticos, não só como uma ferramenta útil, mas também como um método para expandir nossa compreensão da adaptação, biológica ou não (Holland, 1995). O movimento de vida artificial (Langton, 1995) leva essa ideia um passo adiante, visualizando os produtos de algoritmos genéticos como organismos, em vez de soluções para problemas. O trabalho nesse campo desenvolvido por Hinton e Nowlan (1987) e por Ackley e Littman (1991) foi realizado principalmente para esclarecer as implicações do efeito de Baldwin. Para um conhecimento geral sobre os fundamentos da evolução, recomendamos Smith e Szathmáry (1999), Ridley (2004) e Carroll (2007).
A maioria das comparações de algoritmos genéticos com outras abordagens (em especial a subida de encosta estocástica) revelou que os algoritmos genéticos convergem mais lentamente (O’Reilly e Oppacher, 1994; Mitchell et al., 1996; Juels e Wattenberg, 1996; Baluja, 1997). Tais descobertas não são universalmente populares dentro da comunidade de AG, mas tentativas recentes dentro dessa comunidade para entender a busca baseada na população como uma forma aproximada de aprendizado bayesiano (veja o Capítulo 20) talvez ajudem a reduzir o abismo entre o campo e suas críticas (Pelikan et al., 1999). A teoria de sistemas quadráticos dinâmicos também pode explicar o desempenho dos AGs (Rabani et al., 1998). Veja em Lohn et al. (2001) um exemplo de AG aplicado ao projeto de antenas e, em Renner e Ekart (2003), para uma aplicação de projeto assistido por computador.
O campo de programação genética está intimamente relacionado aos algoritmos genéticos. A principal diferença é que as representações que sofrem mutações e combinações são programas, em vez de cadeias de bits. Os programas são representados sob a forma de árvores de expressões; as expressões podem estar em uma linguagem padrão como Lisp ou podem ser projetadas especificamente para representar circuitos, controladores de robôs, e assim por diante. O cruzamento envolve a união de subárvores, e não de subcadeias. Essa forma de mutação garante que os descendentes serão expressões bem formadas, o que não ocorreria se os programas fossem manipulados como cadeias.
O recente interesse em programação genética foi incentivado pelo trabalho de John Koza (Koza, 1992, 1994), mas remonta pelo menos aos primeiros experimentos com código de máquina
realizados por Friedberg (1958) e com autômatos de estados finitos, desenvolvidos por Fogel et al. (1966). Como no caso de algoritmos genéticos, existe um debate sobre a eficácia da técnica. Koza et
al. (1999) descrevem experimentos no projeto automatizado dos dispositivos de circuitos utilizando
programação genética.
Os periódicos Evolutionary Computation e IEEE Transactions on Evolutionary Computation estudam algoritmos genéticos e programação genética; também são encontrados artigos em Complex
Systems, Adaptive Behavior e Artificial Life. A conferência principal é a Genetic and Evolutionary Computation Conference (GECCO). Mitchell (1996), Fogel (2000) e Langdon e Poli (2002), e o
livro on-line gratuito de Poli et al. (2008), oferecem bons textos de visão geral sobre algoritmos genéticos.
A imprevisibilidade e a observabilidade parcial de ambientes reais foram reconhecidas no início de projetos de robótica que utilizavam técnicas de planejamento, incluindo Shakey (Fikes et al., 1972) e Freddy (Michie, 1974). Os problemas receberam mais atenção após a publicação do artigo influente de McDermott (1978a), Planning e Acting.
O primeiro trabalho a fazer uso explícito de árvores E-OU parece ter sido o programa SAINT de Slagle para a integração simbólica, mencionado no Capítulo 1. Amarel (1967) aplicou a ideia de prova de teorema proposicional, um tópico que será discutido no Capítulo 7, e introduziu um algoritmo de busca semelhante à BUSCA-EM-GRAFOS-E-OU. O algoritmo foi desenvolvido mais adiante e formalizado por Nilsson (1971), que também descreveu AO*, que, como seu nome sugere, encontra soluções ótimas dada uma heurística admissível. AO* foi analisado e melhorado por Martelli e Montanari (1973). AO* é um algoritmo top-down; uma generalização bottom-up de A* é A*LD, isto é, A* Lightest Derivation (Felzenszwalb e McAllester, 2007). O interesse pela busca E- OU passou por um renascimento nos últimos anos, com novos algoritmos para encontrar soluções cíclicas (Jimenez e Torras, 2000; Hansen e Zilberstein, 2001) e novas técnicas inspiradas por programação dinâmica (Bonet e Geffner, 2005).
A ideia de transformar problemas parcialmente observáveis em problemas de estado de crença originou com Astrom (1965) para o caso muito mais complexo de incerteza probabilística (veja o Capítulo 17). Erdmann e Mason (1988) estudaram o problema da manipulação robótica sem sensores, usando uma forma contínua de busca de estado de crença. Eles mostraram que era possível orientar uma peça em uma mesa a partir de uma posição inicial arbitrária por uma sequência bem concebida de ações pendulares. Métodos mais práticos, com base em uma série de barreiras diagonais precisamente orientadas através de uma correia transportadora, utilizam o mesmo critério algorítmico (Wiegley et al., 1996).
A abordagem do estado de crença foi reinventada no contexto de problemas de busca sem sensoriamento e parcialmente observáveis por Genesereth e Nourbakhsh (1993). Foi realizado um trabalho adicional sobre os problemas sem sensoriamento na comunidade de planejamento baseado em lógica (Goldman e Boddy, 1996; Smith e Weld, 1998). Esse trabalho enfatizou representações concisas para os estados de crença, como explicado no Capítulo 11. Bonet e Geffner (2000) introduziram as primeiras heurísticas eficazes para a busca do estado de crença, que foram refinados por Bryce et al. (2006). A abordagem incremental da busca do estado de crença, em que as soluções são construídas de forma incremental para subconjuntos de estados dentro de cada estado de crença, foi estudada na literatura de planejamento por Kurien et al. (2002); vários novos algoritmos
incrementais foram apresentados para problemas não determinísticos, parcialmente observáveis por Russell e Wolfe (2005). Referências adicionais para planejamento, em ambientes estocásticos parcialmente observáveis, aparecem no Capítulo 17.
Os algoritmos para explorar espaços de estados desconhecidos têm despertado interesse por muitos séculos. A busca em profundidade em um labirinto pode ser implementada mantendo-se a mão esquerda na parede; os ciclos podem ser evitados marcando-se cada junção. A busca em profundidade falha com ações irreversíveis; o problema mais geral de exploração de grafos
eulerianos (isto é, grafos em que cada nó tem números iguais de arestas de entrada e saída) foi
resolvido por um algoritmo criado por Hierholzer (1873). O primeiro estudo algorítmico completo do problema de exploração de grafos arbitrários foi proposto por Deng e Papadimitriou (1990), que desenvolveram um algoritmo completamente geral, mas mostraram que não é possível nenhuma razão competitiva limitada para explorar um grafo geral. Papadimitriou e Yannakakis (1991) examinaram a questão de encontrar caminhos até um objetivo em ambientes de planejamento de caminhos geométricos (em que todas as ações são reversíveis). Eles mostraram que uma pequena razão competitiva pode ser alcançada com obstáculos quadrados, mas que não é possível alcançar nenhuma razão limitada com obstáculos retangulares em geral (veja a Figura 4.20).
O algoritmo LRTA* foi desenvolvido por Korf (1990) como parte de uma investigação da busca
em tempo real para ambientes em que o agente deve atuar depois de buscar apenas durante um
período de tempo fixo (uma situação muito mais comum em jogos com dois participantes). O LRTA* é de fato um caso especial de algoritmos de aprendizado de reforço para ambientes estocásticos (Barto et al., 1995). Sua política de otimismo sob incerteza — sempre se dirigir para o estado não visitado mais próximo — pode resultar em um padrão de exploração menos eficiente no caso não informado do que a simples busca em profundidade (Koenig, 2000).
Dasgupta et al. (1994) mostram que a busca de aprofundamento iterativo on-line é otimamente eficiente para encontrar um objetivo em uma árvore uniforme sem informações heurísticas. Diversas variantes informadas sobre o tema do LRTA* foram desenvolvidas com diferentes métodos de busca e atualização dentro da parte conhecida do grafo (Pemberton e Korf, 1992). Até agora, não existe uma boa compreensão de como encontrar objetivos com eficiência ótima quando se utilizam informações heurísticas.
EXERCÍCIOS
4.1 Forneça o nome do algoritmo que resulta de cada um dos seguintes casos especiais: