Planejamento Automático é uma área de pesquisa da IA que lida com a geração automática da sequência de ações necessárias para resolver um problema. Sendo assim, dado uma situação inicial, um conjunto de ações e uma situação final desejada, a tarefa de planejamento consiste em determinar uma sequência de ações que soluciona o problema, ou seja, uma sequência que atinja a situação desejada a partir da situação inicial.
O grande desafio desta área é o desenvolvimento de um solucionador genérico, ou seja, um sistema independente de domínio que seja capaz de solucionar uma grande variedade de tipos de problemas. De fato, a construção deste sistema é uma tarefa ambiciosa e de difícil sucesso, já que existem os mais diversos tipos de
problemas no mundo real. Entretanto, é com esse objetivo que a área evoluiu de forma significativa até então.
De uma maneira geral, pode-se dizer que os estudos nessa área começaram em 1959, quando John McCarthy, um dos fundadores da IA, publicou o primeiro artigo que propõe o uso da lógica para a representação de conhecimento em um computador [McCarthy, 1968]. Neste artigo, McCarthy formulou o que é considerado o primeiro problema de planejamento da história [Lifschitz et al., 2000], enunciando-o da seguinte maneira:
Suponha que eu esteja no escritório da minha casa e deseje ir ao aeroporto. O meu carro está na garagem da minha casa. A solução para esse problema é andar até o carro e dirigir até o aeroporto.
No enunciado acima, identifica-se de forma clara os três principais elementos que compõe um problema de planejamento. O primeiro elemento é o estado inicial, definido somente com a proposição John dentro de casa. Já o estado final (ou estado objetivo) é o segundo elemento e é descrito com a proposição John no aeroporto. O terceiro elemento é o conjunto das ações do problema, são elas: Andar até o carro e Dirigir até o aeroporto. Estas ações, se devidamente sequenciadas, conseguem conduzir John do estado inicial ao estado final, ou seja, solucionam o problema proposto.
As ações são descritas pelas suas pré-condições e efeitos. Nas pré-condições é indicado o que deve ser verdadeiro antes que a ação possa ser aplicada e nos efeitos é descrito como o estado atual do mundo se altera se a ação for aplicada. Uma possível representação, utilizando lógica proposicional, para o problema acima, pode ser descrita da seguinte maneira:
Estado inicial: John dentro de casa. Estado final : John no aeroporto. Ação: Andar até o carro:
– Pré-condição: John dentro de casa.
– Efeito: ¬John dentro de casa∧ John dentro do carro.
Ação: Dirigir até o aeroporto:
– Pré-condição: John dentro do carro.
2.1. Introdução e Histórico 9
A sequência de ações que soluciona um problema de planejamento é chamada de plano e o algoritmo que a produz é denominado planejador. O planejador recebe a descrição formal de um problema de planejamento especificado em uma determinada linguagem (PDDL, por exemplo) e usa essa representação explícita do problema para derivar as heurísticas e realizar as inferências e buscas necessárias para solucioná-lo. A Figura 2.1 fornece uma visão geral dos três componentes utilizados na solução de um problema de planejamento.
Figura 2.1. Visão geral da integração entre os componentes utilizados na solução
de um problema de planejamento.
Existem várias técnicas para resolver um problema de planejamento. As mais básicas são as buscas para frente e para trás no espaço de estados. Um planejador poderia resolver o problema de chegar ao aeroporto utilizando uma busca para frente no espaço de estados. Começando a busca pelo estado inicial, o planejador seleciona de forma não determinística uma ação aplicável ao estado atual do mundo. Neste caso, a única ação aplicável é a Andar até o carro, já que apenas essa ação possui em sua pré-condição a proposição John dentro de casa. Ao aplicar essa ação, o planejador altera o estado do mundo e John deixa de estar dentro de casa e agora está dentro do carro. Progredindo na busca, o planejador novamente procura (de maneira não determinísitica) uma ação aplicável ao novo estado do mundo John dentro do carro. A ação Dirigir até o aeroporto é aplicável, pois a sua pré-condição é satisifeita pelo estado do mundo atual. Ao aplicar essa ação no mundo, o planejador verifica que o novo estado do mundo John no aeroporto satisfaz o estado objetivo e o problema é resolvido pela sequência: Andar até o carro e Dirigir até o aeroporto.
De maneira inversa, o problema poderia ser resolvido por uma busca para trás no espaço de estados (backtracking). Porém, ao invés de iniciar pelo estado inicial,
o algoritmo inicia a busca pelo estado final. Sendo assim, o algoritmo busca nos efeitos das ações por condições que satisfaçam ao estado do mundo atual. Caso encontre uma ação, as pré-condições são aplicadas como efeitos e são adicionadas como novos objetivos do problema naquele instante do planejamento. A busca termina quando o planejador encontra um estado do mundo que satisfaça o estado inicial do problema.
Segundo Russell & Norvig [2003], um dos principais motivos do interesse pela área de planejamento é o fato dela combinar conceitos de duas grandes áreas da IA: busca e lógica. Dessa maneira, um planejador pode ser visto tanto como um algoritmo que busca por uma solução quanto um algoritmo que, de maneira construtiva, prova a existência (ou não) de uma solução.
Nos conceitos descritos acima, a separação existente entre a descrição do problema de planejamento e o algoritmo utilizado para resolvê-lo, definem os principais desafios da área de planejamento automático, são eles: a representação e a resolução. Nesse sentido, o uso de linguagens formais é essencial, pois além de padronizar a forma de representar os problemas, permite que as estratégias utilizadas pelos planejadores para resolver o problema sejam independentes de domínio. Por isso, segundo Russell & Norvig [2003], uma linguagem para a descrição de problemas de planejamento deve ser ao mesmo tempo expressiva e restritiva. Expressiva, pois deve ser possível representar uma larga variedade de diferentes classes de problemas. Restritiva, pois deve permitir que algoritmos operem sobre ela.
O conceito de separação entre a representação de um problema e o método para resolvê-lo surgiu no fim da década de cinquenta com um programa de computador denominado General Problem Solver1 [Newell et al., 1959]. A ideia dos autores era
que esse programa fosse um solucionador de problemas gerais, utilizado para provar teoremas, jogar xadrez, entre outros. A sua estrutura geral de controle foi a base para o Stanford Research Institute Problem Solver (STRIPS) que se refere tanto à linguagem utilizada para representar um problema de planejamento quanto ao planejador [Fikes & Nilsson, 1971]. A forma de representação de um domínio em STRIPS teve grande influência na área de planejamento e, devido a isso, ele é a base para linguagens modernas como a action description language (ADL) e a PDDL [Russell & Norvig, 2003].