Pesquisa Heurística

Propaganda
Pesquisa informada
Best-first search
o Dispomos de informação especifica
sobre o problema.
o Esta informação pode ser
disponibilizada por uma função de
avaliação que indica o quão
desejável é expandir um determinado
nó.
o Se os nós estiverem ordenados por forma a
que aquele que tiver a melhor avaliação é
expandido primeiro, estamos perante a
estratégia best-first search.
o Algoritmo :
© Noel de Jesus Mendonça Lopes
Function BestFirstSearch(problema, FuncaoAvaliacao )
returns solução ou falha
FuncaoAdicaoFila ← Função que ordena os nós da fila de
acordo com FuncaoAvaliacao
return PesquisaGeral (problema, FuncaoAdicaoFila )
1
2
Best-first search – Pesquisa
gananciosa (greedy)
Best-first search
o A qualidade desta estratégia de
pesquisa depende da qualidade da
função de avaliação.
o Os algoritmos pertencentes a esta
família tentam encontrar soluções de
baixo custo. Tipicamente utilizam
estimativas do custo do estado actual
até à solução mais próxima e tentam
minimizar o seu valor.
© Noel de Jesus Mendonça Lopes
© Noel de Jesus Mendonça Lopes
o Os nós cujo estado se julga estar
mais próximo do objectivo são
expandidos primeiro.
o Uma função que calcula uma
estimativa do custo é chamada por
função heurística e é usualmente
designada por h.
h(n) = Custo estimado do caminho mais
barato desde o estado correspondente
ao nó n até a um estado objectivo
3
© Noel de Jesus Mendonça Lopes
4
1
Distância em linha
recta até Bucharest
Pesquisa gananciosa
Arad
Bucharest
Craiova
Dobreta
Eforie
Fagaras
Giurgiu
Hirsova
Lasi
Lugoj
Mehaida
Neamt
Oradea
itesti
Rimnicu Vilcea
Sibiu
Timisoara
Urziceni
Vaslui
Zerind
o h(n) deve ser zero quando o nó n tenha
associado um estado correspondente ao
objectivo.
o Algoritmo :
Function GreedySearch(problema, FuncaoAvaliacao) returns
solução ou falha
return BestFirstSearch(problema, h)
o Tenta atingir o objectivo o mais depressa
possível.
o Encontra soluções rapidamente.
© Noel de Jesus Mendonça Lopes
Oradea
Neamt 87
71
151
Zerind
Iasi 92
75
140
Sibiu 99
Vaslui
Arad
Fagaras
118
Timisoara
142
80 Rimnicu Vilcea 211
Lugoj
111
98 Hirsova
97
101
70
85
146
Mehadia
Pitesti
Urziceni
86
75
Bucharest
138
Dobreta
90
120
Eforie
Criova
Giurgiu
h(n) = distância em linha recta entre n e a localização do objectivo
5
Pesquisa gananciosa
A*
o Susceptível a falsas partidas
f(n) = g(n) + h(n)
n Ex : Ir de Lasi para Fagaras
n Necessário evitar estados repetidos
n São expandidos nós desnecessários
o Não é óptimo nem completo, à semelhança
do deep-first search.
o Complexidade : O(b m). No entanto a
complexidade pode ser reduzida
substancialmente dependendo da qualidade
de h.
© Noel de Jesus Mendonça Lopes
366
0
160
242
161
178
77
151
226
244
241
234
380
98
193
253
329
80
199
374
7
f(n) = custo estimado da solução mais
“barata” que passa por n
Function A*(problema) returns solução ou falha
return BestFirstSearch (problema, g + h)
© Noel de Jesus Mendonça Lopes
8
2
A*
Heurísticas admissíveis
o Óptimo e completo se :
o São por natureza optimistas.
o Em quase todas as heurísticas
admissíveis o custo de f nunca
decresce ao longo de qualquer
caminho a partir da raiz da árvore de
pesquisa. Estas heurísticas têm um
comportamento monótono.
n h(n) nunca sobrestimar o custo de
alcançar o objectivo. Uma função h que
obedeça a este critério é designada por
heurística admissível.
© Noel de Jesus Mendonça Lopes
9
© Noel de Jesus Mendonça Lopes
Heurísticas admissíveis
Oradea
Neamt
Zerind
o Quando a heurística não é monótona
podemos fazer uma pequena
correcção em f que a torne
monótona. Supondo que o nó n é o
pai de n’, podemos transformar f
numa função monótona da seguinte
forma :
f(n’) = max( f(n), g(n’) + h(n’) )
o Esta equação designa-se por
equação do caminho máximo.
© Noel de Jesus Mendonça Lopes
10
Iasi
Sibiu
Arad
Vaslui
Fagaras
380
Timisoara
400
Rimnicu Vilcea
Lugoj
Hirsova
420
Mehadia
Pitesti
Urziceni
Bucharest
Dobreta
Eforie
Criova
Giurgiu
11
3
Contornos
A*
o Se h for 0 (uniform-cost search), os
limites dos contornos serão
circulares, à volta do estado inicial.
o Quanto melhor for a heurística mais
os limites dos contornos se esticarão
em direcção do objectivo.
o É eficientemente óptimo para
qualquer função heurística.
© Noel de Jesus Mendonça Lopes
n Não existe nenhum outro algoritmo
óptimo que expanda menos nós que o
A*
o É completo desde que o custo de
todas as operações seja positivo
(maior que zero).
13
Funções heurísticas
5
4
1
6
1
8
8
7
3
2
7
2
6
14
Funções heurísticas
3
5
4
4
6
1
5
7
3
© Noel de Jesus Mendonça Lopes
© Noel de Jesus Mendonça Lopes
o Factor de ramificação ≈ 3
o Solução ≈ 20 passos
o Pesquisa exaustiva : 32 0 = 35 x 108
estados
o Evitando os estados repetidos : 9! =
362880
8
2
15
© Noel de Jesus Mendonça Lopes
16
4
Funções heurísticas
Funções heurísticas
o Determinar uma função heurística
que nunca sobrestime o número de
passos necessários para atingir o
objectivo?
o h1 = nº de peças fora da posição
correcta.
o h2 = soma das distâncias de cada
uma das peças até à sua posição
correcta (segundo a distância de
manhattan).
© Noel de Jesus Mendonça Lopes
17
Factor de ramificação efectivo
(b*)
© Noel de Jesus Mendonça Lopes
Factor de ramificação efectivo
Custo da pesquisa
N = 1 + b* +
(b*)2
+ ... +
18
(b*)d
Uma boa heurística terá um b*
perto de 1
Factor de ramificação
efectivo
d
IDS
A*(h1 )
A*(h2 )
IDS
A*(h1 )
A*(h2 )
2
10
6
6
2.45
1.79
1.79
4
112
13
12
2.87
1.48
1.45
6
680
20
18
2.73
1.34
1.30
8
6384
39
25
2.80
1.33
1.24
IDS – Iterative deepening search.
Dados obtidos em 100 instâncias de um puzzle com 8 peças.
© Noel de Jesus Mendonça Lopes
19
© Noel de Jesus Mendonça Lopes
20
5
Factor de ramificação efectivo
Custo da pesquisa
d
IDS
A*(h1 )
Heurísticas
o h2 domina h1 , se quando utilizamos h2
expandimos em média menos nós
que quando utilizamos h1 .
o Entre duas heurísticas é sempre
preferível aquela com maiores
valores, desde que não sobrestime o
custo de atingir o objectivo.
Factor de ramificação
efectivo
A*(h2 )
IDS
A*(h1 )
A*(h2 )
10
47127
93
39
2.79
1.38
1.22
12
364404
227
73
2.78
1.42
1.24
14
3473941
2.83
539
113
1.44
1.23
16
1301
211
1.45
1.25
18
3056
363
1.46
1.26
20
7276
676
1.47
1.27
22
18094
1219
1.48
1.28
24
39135
1641
1.48
1.26
© Noel de Jesus Mendonça Lopes
21
© Noel de Jesus Mendonça Lopes
22
5
4
6
1
8
7
3
2
Problemas relaxados
Problemas relaxados
o Um problema com menos restrições
nos operadores diz-se relaxado.
o Muitas vezes o custo de uma solução
exacta para um problema relaxado é
uma boa heurística para o problema
original.
o Uma peça pode mover-se de A
para B se A é adjacente a B e B
está vazio.
o Uma peça pode mover-se de A para B
se A é adjacente a B.
o Uma peça pode mover-se de A para B
se B está vazio.
o Uma peça pode mover-se de A para
B.
© Noel de Jesus Mendonça Lopes
23
© Noel de Jesus Mendonça Lopes
24
6
Problemas relaxados
Escolha das heurísticas
o Em (1993) um programa chamado
ABSOLVER cujo objectivo é gerar
heurísticas de forma automática a partir da
definição de um problema, encontrou a
primeira heurística útil para o cubo de
Rubik e gerou uma nova heurística para o
puzzle com 8 peças, que resultou ser
melhor que qualquer das heurísticas
existentes.
o O ABSOLVER utiliza o método do “problema
relaxado” em conjunto com outras técnicas.
o Se dispusermos de várias heurísticas
admissíveis h 1, h 2, ..., h m e nenhuma
dominar as restantes qual escolher ?
© Noel de Jesus Mendonça Lopes
25
h(n) = max(h 1(n), h 2(n), ..., hm(n))
o Desta forma é utilizada a heurística mais
precisa para o nó em questão.
o Como todas as heurísticas que compõem h
são admissíveis h é também admissível.
o Obviamente h domina todas as heurísticas
que a compõem.
© Noel de Jesus Mendonça Lopes
Escolha das heurísticas
Escolha das heurísticas
o Uma boa função heurística para além
de ser precisa deve ser ainda
eficiente.
o Estatística
o Recolha das características do
estado que contribuem para a
avaliação heurística.
o Usualmente a função de avaliação é
uma combinação linear dos valores
das características.
o Mas qual a contribuição de cada
característica ?
n Perdemos a garantia de admissibilidade
mas em média expandimos menos nós
n Ex : Quando h(n) = 14 em 90% dos
casos são necessários 18 passos.
© Noel de Jesus Mendonça Lopes
27
© Noel de Jesus Mendonça Lopes
26
28
7
Contribuição das características
para a função de avaliação
Heurísticas para problemas de
satisfação de restrições (CSP)
o Mesmo quando não se sabe o quão
importante é uma característica, ou
se é benéfica ou má é possível a um
algoritmo de aprendizagem adquirir
coeficientes razoáveis para cada
característica.
o Heurística da variável mais
restringida
© Noel de Jesus Mendonça Lopes
n Usada em conjunto com o forward
checking;
n Escolhemos a variável que dispõe de
menos valores;
n O factor de ramificação tende a ser
menor.
29
Heurísticas para problemas de
satisfação de restrições (CSP)
30
Iterative deepening A* (IDA*)
o Heurística da variável mais restritiva
n Escolhe a variável que aparece no maior número
de restrições que contêm variáveis sem valor;
n O factor de ramificação tende a ser menor.
o Heurística do valor menos restritivo
n Escolhe o valor que retira o menor número de
valores das variáveis que partilham restrições
com a variável actual.
© Noel de Jesus Mendonça Lopes
© Noel de Jesus Mendonça Lopes
31
o Cada iteração é feita com um algoritmo
similar ao deep-limited search, mas em vez
de se parar a pesquisa quando uma
determinada profundidade é alcançada esta
para quando o custo de f(n) for superior a
um determinado valor.
o Em cada iteração são expandidos os nós
dentro do contorno para o custo de f actual
e determina-se qual será o próximo
contorno.
© Noel de Jesus Mendonça Lopes
32
8
Iterative deepening A* (IDA*)
Iterative deepening A* (IDA*)
function Contorno(p, no, limitef) returns solução e um novo limite do custo de f
inputs : p, problema
no, um nó
limitef, o limite actual do custo de f (contorno)
local variables : proximof, o próximo limite do custo de f (contorno),
inicialmente ∞
function IDA (p) returns solução ou falha
inputs : p, problema
local variables : limitef, o limite do custo de f (contorno)
raiz, um nó
raiz ← CriaNo(EstadoInicial(p))
limitef ← Custo(raiz)
if Custo(no) > limitef then return null, Custo(no)
if Objectivo(p, Estado(no)) then return no, limitef
for each nó s in Sucessores(no) do
solução, novof ← Contorno(p, s, limitef)
if solução is null then
if novof < proximof then proximof ← novof
else
return solução, limitef
end
next
return null, proximof
do
solução, limitef ← Contorno(p, raiz, limitef)
if solução is null then
if limitef = ∞ then return falha
else
return solução
end
loop
© Noel de Jesus Mendonça Lopes
33
© Noel de Jesus Mendonça Lopes
Iterative deepening A* (IDA*)
Algoritmo ε-admissível
o Completo e óptimo, tendo em atenção as
mesmas salvaguardas que o A*.
o Necessita de muito menos memória que o
A*.
o A complexidade (tempo) depende do
número de valores diferentes que a
heurística pode devolver
o Em cada iteração aumentamos o
valor do contorno por ε.
n Ex: No puzzle com 8 peças f cresce apenas uma
ou duas vezes, já no problema do caixeiro
viajante o valor de f é em principio diferente
para cada nó, o que significa que cada contorno
pode incluir apenas mais um nó.
© Noel de Jesus Mendonça Lopes
35
34
n Reduzimos assim o custo da pesquisa, já
que em cada itera ção são englobados
mais nós (dependendo de ε).
n A solução retornada pode ser pior do que
a óptima, no máximo por ε.
© Noel de Jesus Mendonça Lopes
36
9
Simplified Memory-Bounded A*
(SMA*)
o Utiliza toda a memória que lhe for
disponibilizada.
o Evita estados repetidos sempre que a
memória o permita.
o É completo desde que a memória
disponível seja suficiente para
guardar o caminho para a solução
com o menor profundidade.
© Noel de Jesus Mendonça Lopes
37
Simplified Memory-Bounded A*
o Antes de gerar um sucessor o algoritmo
verifica se existe memória suficiente para o
guardar. Caso não exista memória
suficiente o algoritmo retira um dos nós da
fila para poder gerar o sucessor.
o Os nós retirados da fila são aqueles menos
promissores, isto é aqueles com maior
custo de f e são chamados nós
esquecidos.
© Noel de Jesus Mendonça Lopes
39
Simplified Memory-Bounded A*
o É óptimo desde que a memória disponível
seja suficiente para guardar o caminho
para a solução com o menor custo. Caso
contrário retorna a melhor solução que se
pode atingir com a memória disponível.
o Quando existe memória suficiente para
guardar a árvore de pesquisa completa o
algoritmo é eficientemente óptimo.
© Noel de Jesus Mendonça Lopes
38
Simplified Memory-Bounded
A*
o De forma a evitar re -explorar sub -árvores
retiradas da memória em cada nó antecessor é
guardada informação do melhor caminho na subárvore esquecida. Desta forma o algoritmo só
regenera uma sub -árvore , quando todos os outros
caminhos parecerem piores que o caminho
esquecido.
o Desta forma se todos os descendentes do nó n
forem esquecidos, não saberemos por onde
devemos ir a partir do nó n mas sabemos se vale
a pena ir pelo nó n.
© Noel de Jesus Mendonça Lopes
40
10
Simplified Memory-Bounded A*
function SMA(p) returns solução ou falha
/*dada a complexidade do algoritmo muitos pormenores foram omitidos */
inputs : p, problema
local variables : fila, uma fila de nós ordenada primeiro pelo custo f dos nós e depois
por ordem decrescente pela profundidade dos nós
fila ← CriaFila(CriaNo (EstadoInicial(p))
Simplified Memory-Bounded A*
function CustoF(p, n) returns custo de f para o nó n
inputs : p, problema
n, nó
static : maiorProfundidade, O maior número de nós que
conseguimos ter em memória.
do
if Vazia(fila) then return falha
n ← primeiro nó da fila
if Objectivo(p, Estado(n)) then return n
if not TemMaisSucessores(n) then
Actualiza o custo f do nó n e dos seus antecessores
else
s ← ProximoSucessor(n)
f(s) ← CustoF(p, s)
if Cheia(fila) then RetiraUltimoNo (fila)
Insere(fila, s)
end
if not Objectivo(p, Estado(n)) and Profundidade(n) =
maiorProfundidade then return ∞
if Pai(n) is null then return g(n) + h(n)
return Max(f(Pai(n)), g(n) + h(n))
loop
© Noel de Jesus Mendonça Lopes
41
© Noel de Jesus Mendonça Lopes
42
A
0+12=12
10
Hill-climbing
8
B
G
10+5=15
8+5=13
10
10
C
20+5=25
10
E
8
D
20+0=20
10
I
16+2=18
8
J
F
30+5=35
16
H
30+0=30
24+0=24
8
K
24+0=24
24+5=29
© Noel de Jesus Mendonça Lopes
44
11
Hill-Climbing
function HillClimbing(p) returns solução
inputs : p, problema
local variables : actual, um nó
proximo, um nó
actual ← CriaNo(EstadoInicial(p))
do
proximo ← O sucessor de actual com maior valor
if valor(proximo) < valor(actual) then return actual
actual ← proximo
loop
© Noel de Jesus Mendonça Lopes
45
12
Download