Planeamento
Baseado nos slides de Tom Lenarts (IRIDIA) e Lin Zuoquan(PeckingUniversity)
Capítulo 11
Planeamento
Enquadramento
Linguagens para planeamento
Planeamento com procura em espaço de estados
Planeamento de ordem parcial
Grafos em planeamento
Planeamento com lógica proposicional
Análise das abordagens para planeamento
O que é planeamento?
O que é planeamento?
acção ou efeito de planear ou de
planificar;trabalho de preparação para qualquer empreendimento, no qual se estabelecem os objectivos, as etapas, os prazos e os meios para a sua
concretização;estabelecimento de um
plano (PRIBERAM);
Problema do Planeamento
Geração de sequências de acções para realizar tarefas e atingir objectivos
Estados, acções e objectivos
Procura de soluções num espaço abstracto de planos
Aplicações práticas
Operações militares
Jogos
Exploração de espaço
...
Agentes de Planeamento
Capítulo 3: agentes baseados em procura
Capítulo 10: agentes baseados em lógica
Neste capítulo: problemas de planeamento (clássicos) complexos
Problemas clássicos: ambientes completamente observáveis, determinísticos, estáticos (mudança ocorre apenas quando o agente actua) e discretos (em tempo, acção, objectos e efeitos)
Problemas não clássicos: parcialmente observáveis e estocásticos
Agente Planeador
Recebe uma percepção e devolve uma acção
Na prática determina um plano e vai devolvendo uma acção do plano de cada vez
Tem um contador de tempo
Cada acção corresponde a um instante de tempo
Comunica com uma Base de Conhecimento
Para aceder ao estado actual
Para ter acesso à descrição das acções
Para formular o objectivo em cada instante de tempo
Para actualizar o estado em função de cada acção
Procura vs. Planeamento
Algoritmo de procura para comprar leite e pão é
claramente ineficiente…
Planeamento
Enquadramento
Linguagens para planeamento
Planeamento com procura em espaço de estados
Planeamento de ordem parcial
Grafos em planeamento
Planeamento com lógica proposicional
Análise das abordagens para planeamento
Linguagem de planeamento
A representação de um problema de planeamento - estados, acções e objectivos - deve permitir que um algoritmo de planeamento seja capaz de
explorar a estrutura lógica do problema
Linguagem de planeamento
E o que é uma boa linguagem?
Uma linguagem suficientemente expressiva para descrever uma grande variedade de problemas
Uma linguagem suficientemente restritiva para
permitir que algoritmos eficientes operem sobre ela
Linguagem STRIPS
Linguagem STRIPS (STanford Reasearch
Institute Problem Solver) – representação básica
Características gerais da linguagem STRIPS (1)
Representação de estados
Decomposição do mundo em condições lógicas e
representação de um estado como uma conjunção de literais positivos
Literais proposicionais:
Pobre ∧ Desconhecido
Literais sem variáveis e sem funções: Em(Avião1, Melbourne) ∧ Em(Avião2, Sydney)
Assumir que o mundo é fechado: as condições que não
são mencionadas são falsas
Características gerais da linguagem STRIPS (2)
Representação de objectivos
Estados parcialmente especificados e representados como uma conjunção de literais positivos sem variáveis
Rico ∧ Famoso
Um objectivo é satisfeito se o estado contém todos os literais do objectivo
Rico ∧ Famoso ∧ Miserável
Características gerais da linguagem STRIPS (3)
Representação de acções
Acção = PRÉ-CONDIÇÃO + EFEiTO
Um esquema de acção (ou operador) representa um
conjunto de acções que podem ser derivadas por
instanciação das variáveis
Características gerais da linguagem STRIPS (4)
Tipicamente, um esquema de acção contém:
Nome da acção e lista de parâmetros
Ex: Voar(a, origem, destino)
Pré-condição (conj. de literais sem funções): o que tem de ser verdadeiro para a acção ser executada
Ex: PRÉ-CONDIÇÃO: Em(a,origem) ∧ Avião(a) ∧ Aeroporto(origem) ∧ Aeroporto(destino)
Efeito (conj. de literais sem funções): o que é verdadeiro (P) e o que é falso (¬P) após a acção ser executada
Conjunto de literais pode ser separado em lista de adições e lista de remoções
Ex: ¬Em(a, origem) ∧ Em (a, destino)
STRIPS: exemplo de operador
Semântica da linguagem
Como é que as acções afectam os estados?
Uma acção é aplicável em qualquer estado que satisfaça a pré-condição
Aplicabilidade de uma acção pode envolver uma substituição θ para as variáveis na PRÉ-CONDIÇÃO
Estado:
Em(A1,JFK) ∧ Em(A2,SFO) ∧ Avião(A1) ∧ Avião(A2) ∧ Aeroporto(JFK)
∧ Aeroporto(SFO)
Satisfaz as PRE-CONDIÇÕES:
Em(a,origem) ∧ Avião(a) ∧ Aeroporto(origem) ∧ Aeroporto(destino) Fazendo (por exemplo)
θ
={a/A1,origem/JFK,destino/SFO}Logo a acção Voar(A1,JFK,SFO) é aplicável.
Semântica da linguagem
O resultado de executar uma acção a num estado s é um estado s’
em que
s’ é o mesmo que s excepto
Qualquer literal positivo P no efeito de a é adicionado a s’
Ex: Em(a, SFO)
Qualquer literal negativo ¬P no efeito de a faz remover P de s’
Ex: Em(a, JFK)
Continuando com o exemplo anterior
Em(A1,JFK) ∧ Em(A2,SFO) ∧ Avião(A1) ∧ Avião(A2) ∧ Aeroporto(JFK)
∧ Aeroporto(SFO)
Por aplicação de Voar(A1,JFK,SFO), obtém-se
Em(A1,SFO) ∧ Em(A2,SFO) ∧ Avião(A1) ∧ Avião(A2) ∧ Aeroporto(JFK)
∧ Aeroporto(SFO)
Semântica da linguagem
Em STRIPS assume-se o seguinte: (para representar ausência de mudança)
Qualquer literal que NÃO esteja no efeito permanece inalterado
Semântica da linguagem
Estamos agora em codições de definir o que é uma solução para um problema de planeamento:
é uma sequência de acções que a partir do estado inicial conduz a um estado objectivo
STRIPS: transporte aéreo de carga
O problema envolve carregar e descarregar cargas de
aviões que voam de um lado para outro
STRIPS: transporte aéreo de carga
Estado Inicial:
Início(Em(C1, SFO) ∧ Em(C2,JFK) ∧ Em(A1,SFO) ∧ Em(A2,JFK) ∧ Carga(C1) ∧ Carga(C2) ∧ Avião(A1) ∧ Avião(A2) ∧ Aeroporto(JFK) ∧ Aeroporto(SFO))
Objectivo (levar a carga C1 para JFK e a carga C2 para SFO):
Objectivo(Em(C1,JFK) ∧ Em(C2,SFO))
STRIPS: transporte aéreo de carga
Acções (c: carga, a:avião, l:local (aeroporto)):
Acção(Carregar(c,a,l)
PRÉ-CONDIÇÃO: Em(c,l) ∧ Em(a,l) ∧Carga(c) ∧Avião(a) ∧Aeroporto(l) EFEITO: ¬Em(c,l) ∧Dentro(c,a))
Acção(Descarregar(c,a,l)
PRÉ-CONDIÇÃO: Dentro(c,a) ∧Em(a,l) ∧Carga(c) ∧Avião(a) ∧ Aeroporto(l)
EFEITO: Em(c,l) ∧ ¬Dentro(c,a)) Acção(Voar(a,origem,destino)
PRÉ-CONDIÇÃO: Em(a,origem) ∧Avião(a) ∧Aeroporto(origem) ∧ Aeroporto(destino)
EFEITO: ¬ Em(a,origem) ∧ Em(a,destino))
STRIPS: transporte aéreo de carga
[Possível solução:
Carregar(C1,A1,SFO), Voar(A1,SFO,JFK), Descarregar(C1,A1,JFK), Carregar(C2,A2,JFK), Voar(A2,JFK,SFO), Descarregar(C2,A2,SFO)]
Expressividade e extensões
STRIPS é uma linguagem muito simples
Só literais positivos nos estados
Assume mundo fechado
Efeito P∧¬Q significa inserir P e remover Q
Não há variáveis nos objectivos
Objectivos são conjunções
Efeitos são conjunções
Não suporta igualdade
Não suporta tipos
Símbolos de função não são permitidos: implicam um
número infinito de estados e acções
Linguagem ADL
ADL (Action Description Language)
Não é tão restritiva como a linguagem STRIPS
Permite o uzo de disjunção, negação e
quantificadores
Expressividade e extensões
Características da ADL
Literais positivos e negativos nos estados
Assume mundo aberto
Efeito P∧¬Q significa inserir P e ¬Q e apagar ¬P e Q
Variáveis quantificadas nos objectivos
Objectivos com conjunções e disjunções
Existência de efeitos condicionais (e.g. P:E significa que P é efeito só se E for verdadeiro)
Suporta igualdade
Variáveis podem ter tipos
Acção(Voar(a:Avião, origem:Aeroporto,destino:Aeroporto), PRECONDIÇÃO: Em(a,origem) ∧(origem ≠ destino) EFEITO: ¬Em(a,origem) ∧ Em(a,destino))
Linguagem + usada (standard): Planning Domain Definition Language (PDDL)
STRIPS: mundo dos blocos
Um dos cenários mais famosos do planeamento. Um conjunto de blocos empilháveis estão em cima de uma mesa. O objectivo é construir uma pilha específica de blocos.
Por exemplo, tendo os blocos A, B e C em cima da mesa, o objectivo é construir a pilha A B C, em que C é o bloco em cima da mesa.
STRIPS: mundo dos blocos
Estado inicial:
Início(On(A, Table) ∧ On(B,Table) ∧ On(C,Table) ∧ Block(A) ∧ Block(B) ∧ Block(C) ∧ Clear(A) ∧ Clear(B) ∧ Clear(C))
Objectivo:
Objectivo(On(A,B) ∧ On(B,C))
STRIPS: mundo dos blocos
Acções:
Acção(Move(b,x,y)
PRÉ-CONDIÇÃO: On(b,x) ∧ Clear(b) ∧ Clear(y) ∧ Block(b) EFEITO: On(b,y) ∧ Clear(x) ∧ ¬ On(b,x) ∧ ¬ Clear(y))
Acção(MoveToTable(b,x)
PRÉ-CONDIÇÃO: On(b,x) ∧ Clear(b) ∧ Block(b) EFEITO: On(b,Table) ∧ Clear(x) ∧ ¬ On(b,x))
Notas:
Acções irrelevantes são possíveis: e.g., Move(B,C,C) – problema facilmente resolvido em ADL com ≠
A PRE-CONDIÇÃO PASSAVA A:
PRÉ-CONDIÇÃO: On(b,x) ∧ Clear(b) ∧ Clear(y) ∧ Block(b) ∧ b ≠ x ∧ b ≠ y ∧ x ≠ y Se não existisse o predicado Clear teríamos que usar a linguagem ADL para poder ter literais negativos na PRÉ-CONDIÇÃO (por exemplo, em vez de Clear(b), podia estar ∀x¬On(x, b))
ADL: pneu sobresselente
O Problema de planeamento em causa é mudar um pneu, supondo que temos um pneu furado e um pneu bom na bagageira.
ADL: pneu sobresselente
Estado inicial:
Início(Em(Furado, Eixo) ∧ Em(Sobresselente,Bagageira)) Objectivo:
Objectivo(Em(Sobresselente,Eixo))
ADL: pneu sobresselente
Acções:
Acção(Remove(Sobresselente,Bagageira)
PRÉ-CONDIÇÃO: Em(Sobresselente,Bagageira)
EFEITO: ¬Em(Sobresselente,Bagageira) ∧ Em(Sobresselente,Chão)) Acção(Remove(Furado,Eixo)
PRÉ-CONDIÇÃO: Em(Furado,Eixo)
EFEITO: ¬Em(Furado,Eixo) ∧ Em(Furado,Chão)) Acção(Colocar(Sobresselente,Eixo)
PRÉ-CONDIÇÃO: Em(Sobresselente,Chão) ∧¬Em(Furado,Eixo) EFEITO: Em(Sobresselente,Eixo) ∧ ¬Em(Sobresselente,Chão)) Acção(DeixarDuranteANoite
PRÉ-CONDIÇÃO:
EFEITO: ¬ Em(Sobresselente,Chão) ∧ ¬ Em(Sobresselente,Eixo) ∧
¬Em(Sobresselente,Bagageira) ∧ ¬ Em(Furado,Chão) ∧ ¬ Em(Furado,Eixo) )
Este exemplo está para além do STRIPS: literais negativos na pré-conditição (descrição ADL)