Você está na página 1de 12

Inteligência Artificial

Busca no Espaço de Estados


Profo Wagner Toscano
PMR/POLI/USP, São Paulo, Brasil
wt@wagnertoscano.eti.br
28 de setembro de 2009

.
Com base na classificação dos sistemas que atuam racionalmente ou fazem
tarefas corretamente, encontram-se os “agentes”. Um agente é uma entidade que
percebe, raciocina e atua. Sendo assim, o projetista não determina um mapea-
mento entre percepções e ações de um agente, mas determina quais objetivos o
agente deve alcançar. É necessário que o próprio agente construa um plano de
ações que atinjam os objetivos (como se o próprio agente construisse o próprio
programa). Como exemplo de aplicação tem-se: o agente aspirador de pó, um
agente motorista de táxi, uma sonda espacial.

1 A atuação de um agente
Um agente atua no ambiente, por meio de raciocínio. Esse raciocínio nada mais é
do que buscar solução em um conjunto de estados possíveis (finitos ou infinitos).
A relação desses estados, pode ser representada por um grafo. Para identificar a
solução, a sequência de estados que atinjam o objetivo, são utilizados algoritmos,
que encontrarão a partir do estado inicial (ou atual) o estado objetivo (ou final).
Como exemplo, tem-se o “Aspirador de pó.”
Um robô aspirador de pó deve limpar uma casa com dois cômodos.
As operações que o robô sabe executar são: aspirar, ir à esquerda,
ir à direita. O problema consiste em montar um plano de tal forma
que estando o robô, inicialmente, no cômodo à direita, limpe os dois
comodos que possuem sujeira. Quais os estados possíveis no mundo
do aspirador e as transições necessárias?

Na figura 1 podem ser visualizados os estados possíveis do aspirador de pó,


em relação ao ambiente. E na figura 2 pode ser visualizado a relação entre os
estados que auxiliarão na busca da solução. O conjunto de estados e a relação
entre os estados que permitirão aplicar ações, é denominado de espaço de
estados

1
IA - Busca no Espaço de Estados

Figura 1: Espaço de estados do aspirador de pó, em relação ao ambiente.

Figura 2: Relação entre os estados.

28 de setembro de 2009 2 Profo Wagner Toscano


wt@wagnertoscano.eti.br
IA - Busca no Espaço de Estados

1.1 Estados
Estados são representados por estruturas, em que cada componente denota um atributo
do estado representado. Por exemplo, no Mundo do Aspirador, cada estado pode ser
representado por uma estrutura da forma [X; Y;Z], em que:
• X: representa um dos 2 cômodos, se o aspirador está no cômodo 1 ou no cômodo
2.
• Y: representa se o primeiro cômodo está sujo= 1 ou não=0
• Z: representa se o segundo cômodo está sujo=1 ou não=0
Supondo o estado inicial, em que o aspirador se encontra no cômodo 1 e somente o
primeiro cômodo esteja sujo.

[1; 1; 0]

As informações do mundo real são complexas, sendo, algumas vezes praticamente


impossível modelá-las. No exemplo do mundo do aspirador existem várias outras
informações, como: a cor do tapete, se é dia, de que material o aspirador é feito,
quanto ele tem de energia, qual o nome do proprietário. A palavra estado é utilizada
para abstrair esses detalhes, considerando somente os relevantes para a solução do
problema.
A abstração também é utilizada na modelação das operações reais, como: ir à
direita, implica várias outras operações, como existe energia suficiente? (a bateria
está carregada), existe uma parede? (verificação de obstáculos).

Exercício dos Jarros :


Existe dois jarros, um com capacidade para 4 litros de água e outro com
capacidade para 3 litros. Utilizando somente operações de encher, esvaziar
e derramar a água de um jarro no outro, o agente deve encontrar uma
seqüência de operações que deixará o jarro com capacidade para 3 litros
com 2 litros de água.

Pede-se que modele os estados.

1.2 Representação das ações


As ações são representadas por operadores na forma oper(α, s, s’) ← β, em que:
• α é uma ação que transforma o estado s no estado s0 , dado que a condição
β esteja satisfeita. Por exemplo, a ação aspirar pode ser representada pelos
seguintes operadores:
oper(aspirar; [1;Y;Z]; [1;0;Z]) ← Y = 1
oper(aspirar; [2;Y;Z]; [2;Y;0]) ← Z = 1
Ou representado de forma explícita, por serem operações de comparações:
oper(aspirar; [1;1;Z]; [1;0;Z])
oper(aspirar; [2;Y;1]; [2;Y;0])
Sendo assim, o conjunto de ações para o Mundo do Aspirador será
A = oper(entrarSala1; [2;Y;Z]; [1;Y;Z]),
oper(entrarSala2; [1;Y;Z]; [2;Y;Z]),
oper(aspirar; [1;1;Z]; [1;0;Z]),
oper(aspirar; [2;Y;1]; [2;Y;0])

28 de setembro de 2009 3 Profo Wagner Toscano


wt@wagnertoscano.eti.br
IA - Busca no Espaço de Estados

1.3 Estados sucessores


Dado um estado s ∈ S, os estados sucessores serão todos aqueles que podem ser atin-
gidos, a partir de s, pela aplicação de um dos operadores do domínio. Por exemplo,
expandindo o estado [2;0;1], obtem-se como estados sucessores [1;0;1] e [2;0;0]. Esses
estados são gerados pela aplicação dos operadores entrarSala1 e aspirar, respectiva-
mente. Note, por exemplo, que o operador entrarSala2 não pode ser utilizado na
expansão do estado [2;0;1]; já que, nesse estado, a condição implícita do operador (Y
= 1) não está satisfeita.

2 Busca
No desenvolvimento de um software para resolver um problema, o projetista pode
optar por vários paradigmas de modelagem do problema:
• O sistema é modelado por procedimentos que alteram os dados de entrada.
• O sistema é modelado por funções.
• O sistema é modelado por predicados.
• O sistema é modelado por objetos.
Uma outra forma de modelagem é a busca, sendo necessário:
• Definir o espaço de estados (S e A).
• Estado inicial (s0 ∈ S)
• o estado meta (G ⊂ S)
• Definir as transições.
• Escolher um algoritmo de busca.
Os processos de busca utilizam diversos algoritmos, denominados de algoritmos
de busca e são classificados em 3 tipos: não informada, informada e heurística.
O rastreamento da execução de um algoritmo de busca produz uma estrutura
denominada de árvore de busca, uma forma simplificada de grafo.
O processo consiste em:
1. Coloca-se o estado inicial como nodo raiz.
2. Cada operação sobre o estado raiz gera um novo nodo (denominado de sucessor).
3. Repete-se este processo para os novos nodos até gerar o nodo que representa o
estado meta.
4. Aplicar estratégia de busca: que nodo escolher para expandir.

Nodos da árvore são compostos de:


• o estado que representa;
• o nodo pai;
• o operador que o gerou;
• sua profundidade na árvore de busca;
• o custo de ter sido gerado (identificado por g de ganho);
• opcionalmente, os nodos sucessores
Para identificar qual algoritmo é o melhor para a situação em que se aplica, os
critérios de comparação são:
Completo : o algoritmo encontra a solução se existir;
Ótimo : o algoritmo encontra a solução de menor custo;
Tempo : quanto tempo o algoritmo leva para encontrar a solução no pior caso e
Espaço : quanto de memória o algoritmo ocupa.

28 de setembro de 2009 4 Profo Wagner Toscano


wt@wagnertoscano.eti.br
IA - Busca no Espaço de Estados

2.1 Algoritmos de busca não informada


São algoritmos que não especificam explicitamente um conjunto de estados de um
problema. Os estados são gerados por demanda. Dado um conjunto A de ações,
um estado inicial e um conjunto de estados meta, o algoritmo gera os novos estados
necessários para solucionar o problema.
No algoritmo 2.1, pode ser visualizado um algoritmo de busca não determinístico,
em que:
• A função remove(Σ), remove e devolve um dos estados no conjunto Σ, escolhido
de forma aleatória;
• A função caminho(s) devolve a seqüência de ações que rotulam o caminho que
vai de s0 até s, no espaço de estados do problema;
• A função sucessores(s;A), devolve o conjunto dos estados sucessores de s, obtidos
a partir da aplicação dos operadores em A.

Algoritmo 2.1: BuscaN D(A; s0 ; G)


recebe: s0 , G
declara: Σ, s
1 início
2 Σ ← s0
3 enquanto Σ 6= ∅ faça
4 s ← removePrimeiro(Σ)
5 se s ∈ G então
6 devolva caminho(s)
7 fim
8 Σ ← Σ ∪ sucessores(s, A)
9 fim
10 devolva fracasso
11 fim

Um problema com o algoritmo de busca não determinístico é que o o espaço de


estados do problema possa incorrer em um ciclo, podendo ser executado infinitamente.
Para evitar que isso aconteça, os estados já expandidos devem ser guardados. Dessa
forma uma consulta a esses estados guardados impediriam uma nova expansão durante
a busca. As regras básicas para “poda” de estados são:
• Um nodo não gera um sucessor igual ao pai.
• Um nodo não gera um sucessor igual a um de seus ascendentes.
• Um nodo não gera um sucessor que já exista na árvore de busca.
No algoritmo 2.2, pode ser visualizado o algoritmo de busca não determinístico com
detecção de ciclos. O conjunto Γ é utilizado para guardar os estados expandidos
durante a busca.

Exerc: Desenvolva a árvore para o exemplo do aspirador de pó e do jarro

Uma outra estratégia de busca não informada é denominada de estratégias de


busca cega. Esse tipo de busca consistem em políticas que sistematizam o com-
portamento de um algoritmo de busca, sem levar em conta a qualidade da solução
encontrada. A estratégia de busca classifica-se em 2 tipos: busca em largura e busca
em profundidade.

28 de setembro de 2009 5 Profo Wagner Toscano


wt@wagnertoscano.eti.br
IA - Busca no Espaço de Estados

Algoritmo 2.2: BuscaNDSC(A; s0 ; G)


recebe: s0 , G
declara: Σ, s, Γ
1 início
2 Γ←∅
3 Σ ← s0
4 enquanto Σ 6= ∅ faça
5 s ← removePrimeiro(Σ)
6 se s ∈ G então
7 devolva caminho(s)
8 fim
9 Γ←Γ∪s
10 Σ ← Σ ∪ (sucessores(s, A) − Γ)
11 fim
12 devolva fracasso
13 fim

2.1.1 Busca em largura


A busca em largura, ou (breadth-first search), é caracterizada pela identificação do
nodo de menor profundidade mais a esquerda.
Na busca em largura, o estado inicial (nível 0) é expandido primeiro, sendo os
sucessores posicionados no nível 1 da árvore de busca. Em seguida, cada um dos
estados do nível 1 são expandidos, sendo os sucessores posicionados no nível 2, e assim
por diante, de tal forma que todos os estados num nível n sejam expandidos antes
daqueles no nível n + 1. O algoritmo de busca em largura é obtido simplesmente
sistematizando a ordem de inserção e remoção de estados no conjunto Σ, que agora
passa a se comportar como uma fila.
Na algoritmo 2.3, pode ser visualizado a Busca em Largura. A função remove-
Primeiro e o procedimento insereNoFinal servem para tratar a variável Σ como
uma fila. Dessa forma, força-se a expandir o estado que se encontra no início da fila

Algoritmo 2.3: BuscaLargura(A; s0 ; G)


recebe: s0 , G
declara: Σ, s, Γ
1 início
2 Γ←∅
3 Σ ← s0
4 enquanto Σ 6= ∅ faça
5 s ← removePrimeiro(Σ) se s ∈ G então
6 devolva caminho(s)
7 fim
8 Γ←Γ∪s
9 insereNoFinal(sucessores(s, A) - Γ, Σ)
10 fim
11 devolva fracasso
12 fim

28 de setembro de 2009 6 Profo Wagner Toscano


wt@wagnertoscano.eti.br
IA - Busca no Espaço de Estados

Detalhes de implementação :
Verificar se um estado já está na árvore, pode levar muito tempo. Como exemplo,
tem-se uma árvore com milhares de estados do jogo de xadrez, cada novo estado deve
ser comparado com outros milhares de estados. Ter uma tabela hash (que tem tempo
ótimo de consulta) para saber se determinado nodo existe na árvore.

Características :
O algoritmo de busca em largura é:
• Completo
• Ótimo
• Tempo: explorar O(rp ) nodos, em que:
– r = fator de ramificação
– p = profundidade do estado meta
– O(rp ) = 1 + r + r2 + r3 + .... + rp
• Espaço: guardar O(rp ) nodos.

Exemplo de complexidade
Prof. Nodos Tempo Memória
0 1 1 ms 100 bytes
2 111 0,1 seg 11 Kbytes
4 11.111 11 seg 1 Mbyte
6 106 18 min 111 Mbytes
8 108 31 horas 11 Gbytes
12 101 2 35 anos 111 Tbytes
14 101 4 3500 anos 11.111 Tbytes

2.1.2 Busca em profundidade


A busca em profundidade, ou (depth-first search), é caracterizada pela identificação
do nodo de maior profundidade mais a esquerda, e os estados mais a esquerda são
expandidos inicialmente. até o nível mais profundo da árvore de busca. Isso ocorre
até que o objetivo (meta) seja alcançado ou até que um beco seja atingido. Nesse
último caso, retrocede ao penúltimo estado e reinicia a busca no próximo estado ainda
não expandido
Assim como no caso da busca em largura, o algoritmo de busca em profundidadec
é obtido pela sistematização da ordem de inserção e remoção de estados no conjunto
Σ. No caso da busca em profundidade, entretanto, em vez de uma fila utiliza-se uma
pilha.
Na algoritmo 2.4, pode ser visualizado a Busca em Profundidade. A função re-
movePrimeiro e o procedimento insereNoInicio servem para tratar a variável Σ como
uma pilha.

Características :
O algoritmo de busca em profundidade é:
• Não completo: caso a meta esteja em profundidade maior que m. Se m = 1,
é completo se o espaço de estados é finito e existe poda para não haver loops
entre as operações.
• não é ótimo
• Tempo: explorar O(rp ) nodos, é ruim se p é muito maior que r
• Espaço: guardar O(rp ) nodos. exemplo em profundidade 12, ocupa 12 Kbytes

28 de setembro de 2009 7 Profo Wagner Toscano


wt@wagnertoscano.eti.br
IA - Busca no Espaço de Estados

Algoritmo 2.4: BuscaProfundidade(A; s0 ; G)


recebe: s0 , G
declara: Σ, s, Γ
1 início
2 Γ←∅
3 Σ ← s0
4 enquanto Σ 6= ∅ faça
5 s ← removePrimeiro(Σ)
6 se s ∈ G então
7 devolva caminho(s)
8 fim
9 Γ←Γ∪s
10 insereNoInicio(sucessores(s, A) - Γ, Σ)
11 fim
12 devolva fracasso
13 fim

2.2 Busca Inteligente


Os algoritmos anteriores, estratégias de busca cega, encontram soluções testando e
expandindo estados, sistematicamente. Infelizmente, além de serem ineficientes, a
estratégia de busca por profundidade não garante encontrar soluções de custo mínimo.
Para solucionar a questão de custo mínimo, existem mais 3 estratégias de busca. A
primeira, com base no conceito de custo da ação, é ineficiente, mas garante encontrar
uma solução de custo mínimo. A segunda, com base no conceito de função heurística é
muito eficiente, mas não garante encontrar uma solução de custo mínimo. E a terceira
estratégia, combina as duas estratégias anteriores, é muito eficiente, além de garantir
encontrar uma solução de custo mínimo.

2.2.1 Custo de ação


Em muitos problemas, as ações podem ter custos associados, dependendo da dificul-
dade que o agente tem em executá-las. Para levar essa informação em conta du-
rante a busca, é necessário adicionar mais um campo na especificação dos operadores:
oper(α; s; s0 ; g(α)) ← β, em que g(α) é o custo da ação α, que transforma o estado s
em um estado s0 , dado que a condição esteja satisfeita.
Como exemplo, considere o Problema das Rotas, na figura 3. Esse problema
consiste em, dado um mapa de vias, uma cidade de origem e uma cidade de destino,
encontrar uma rota de distância mínima entre essas duas cidades. Nesse domínio, o
agente é capaz de viajar de uma cidade à outra e, portanto, suas ações podem ser
especificadas conforme segue:

via(origem,destino,distância).
oper(vai(A;B); A;B;C) ← via(A;B;C).

Custo de caminho (g(s)) : Em uma árvore de busca, todo estado s está asso-
ciado a um caminho que leva do estado inicial s0 até s. Logo, pode ser definido como
custo de um estado, em uma árvores de busca, como sendo o custo do caminho que
leva até o estado.

28 de setembro de 2009 8 Profo Wagner Toscano


wt@wagnertoscano.eti.br
IA - Busca no Espaço de Estados

2.2.2 Busca pelo menor custo


O algoritmo de busca pelo menor custo combina os comportamentos da busca em
largura e da busca em profundidade. Nesse tipo de busca, cada vez que um estado
é expandido, um custo é associado a cada um dos sucessores. O algoritmo progride
expandindo sempre o estado de menor custo, até que um estado meta seja encontrado.
O algoritmo de busca pelo menor custo é obtido por meio da utilização de uma fila de
prioridades ascendente, para guardar os estados a serem expandidos.
No algoritmo 2.5, pode ser visualizado a Busca por Menor Custo. A função remo-
vePrimeiro e o procedimento insereEmOrdem servem para tratar o conjunto Σ como
uma fila de prioridades. Além disso, a função sucessoresG devolve uma lista de estados
sucessores e os respectivos custos (necessários para estabelecer a ordem dos estados na
fila de prioridades ascendente), que são dados pela função g(s).

Algoritmo 2.5: BuscaMenorCusto(A; s0 ; G)


recebe: s0 , G
declara: Σ, s, Γ
1 início
2 Γ←∅
3 Σ ← s0
4 enquanto Σ 6= ∅ faça
5 s ← removePrimeiro(Σ)
6 se s ∈ G então
7 devolva caminho(s)
8 fim
9 Γ←Γ∪s
10 insereEmOrdem(sucessoresG(s, A) - Γ, Σ)
11 fim
12 devolva fracasso
13 fim

2.2.3 Heurística
Heurística é uma função que estima o custo mínimo de um caminho (desconhecido)
que leva de um determinado estado a um outro estado. Seja h* uma função que calcula
o custo mínimo exato de um caminho que leva de um determinado estado a um estado
meta. Formalmente, uma função heurística pode ser qualquer função h que apresente
as seguintes propriedades:
• h(s) = 0, se e somente se, s ∈ G e
• para todo s ∈ S, h(s) ≤ h ∗ (s).
Essas propriedades garantem que a estimativa dada pela função heurística seja
admissível, ou seja, que nunca superestime o custo real de uma solução. Note que as
funções heurísticas dependem do domínio de aplicação, bem como da criatividade e
experiência de quem a projeta.

2.3 Busca pela melhor estimativa


O algoritmo de busca pela melhor estimativa é semelhante ao algoritmo de busca pelo
menor custo. A diferen»ca é que, em vez de se basear no custo g(s), do caminho já
percorrido até s, para selecionar os estados a serem expandidos durante a busca, a

28 de setembro de 2009 9 Profo Wagner Toscano


wt@wagnertoscano.eti.br
IA - Busca no Espaço de Estados

Figura 3: Esboço do caxeiro viajante.

busca pela melhor estimativa se baseia no custo estimado h(s) do caminho que ainda
precisa ser percorrido, a partir de s, até um estado meta.
No algoritmo 2.6, pode ser visualizado a Busca por Melhor Estimativa A função
sucessoresH devolve uma lista de estados sucessores e os respectivos custos estimados
(necessários para estabelecer a ordem dos estados na fila de prioridades ascendente),
que são dados pela função h(s).

Algoritmo 2.6: BuscaMelhorEstimativa(A; s0 ; G)


recebe: s0 , G
declara: Σ, s, Γ
1 início
2 Γ←∅
3 Σ ← s0
4 enquanto Σ 6= ∅ faça
5 s ← removePrimeiro(Σ)
6 se s ∈ G então
7 devolva caminho(s)
8 fim
9 Γ←Γ∪s
10 insereEmOrdem(sucessoresH(s, A) - Γ, Σ)
11 fim
12 devolva fracasso
13 fim

2.4 Busca por A*


A busca pelo menor custo minimiza o custo do caminho percorrido até o estado cor-
rente, enquanto a busca pela melhor estimativa tenta minimizar o custo estimado do
caminho a ser percorrido do estado corrente até um estado meta. Para garantir a
solução de custo mínimo, a busca pelo menor custo acaba tendo que examinar uma
grande quantidade de estados no espaço de estados do problema, podendo ser muito
ineficiente. Por outro lado, a busca pela melhor estimativa reduz o espaço de busca
consideravelmente; porém, não consegue garantir uma solução de custo mínimo.

28 de setembro de 2009 10 Profo Wagner Toscano


wt@wagnertoscano.eti.br
Combinando as duas estratégias em um mesmo algoritmo obtém-se o algoritmo
de busca A*. Esse algoritmo de busca, minimiza o custo total do caminho percorrido
desde o estado inicial até um estado meta, utilizando uma função da forma f(s) = g(s)
+ h(s), onde g(s) é uma função de custo e h(s) é uma função heurística.
A idéia é evitar expandir caminhos que já estão muito caros mas também considerar
os que têm menor expectativa de custo.
No algoritmo 2.7, pode ser visualizado a Busca por A*. A função sucessoresF
devolve uma lista de estados sucessores e os respectivos custos g(s)+h(s) (necessários
para estabelecer a ordem dos estados na fila de prioridades ascendente), que são dados
pela função f(s).

Algoritmo 2.7: BuscaA*(A; s0 ; G)


recebe: s0 , G
declara: Σ, s, Γ
1 início
2 Γ←∅
3 Σ ← s0
4 enquanto Σ 6= ∅ faça
5 s ← removePrimeiro(Σ)
6 se s ∈ G então
7 devolva caminho(s)
8 fim
9 Γ←Γ∪s
10 insereEmOrdem(sucessoresF(s, A) - Γ, Σ)
11 fim
12 devolva fracasso
13 fim

Características :
O algoritmo de busca A* é:
• Completo
• Ótimo
• Tempo: explorar O(rp ) nodos, no pior caso, (r = fator de ramificação).
• Espaço: guardar O(rp) nodos, no pior caso, (p = profundidade do estado meta).
Obs: Como guarda todas as soluções, não deve ser utilizadopara problemas em pro-
blemas de larga escala.

3 Busca por IDA*


Iterative Deepning A* (Aprofundamento iterativo) A busca por aprofundamento sele-
tivo descarta as opções quando atinge um limite de memória disponível.

Referências
[1] AMBLE, T. Logic Programming and Knowledge Engineering. Addison-
Wesley, 1987.
IA - Busca no Espaço de Estados

[2] BRATKO, I. Prolog - Programming for Artificial Intelligence, Addison-


Wesley, 1990.
[3] RICH, E. and KNIGHT, K. Inteligência Artificial, 2a ed., Makron Books,
1995.
[4] RUSSELL, S. and NORVIG, P. Artificial Intelligence - a modern approach.
Prentice-Hall, 1995.
[5] STERLING, L. and SHAPIRO, E. The Art of Prolog, MIT Press, 1986.

28 de setembro de 2009 12 Profo Wagner Toscano


wt@wagnertoscano.eti.br

Você também pode gostar