Busca no espaço de estados (parte II) - IME-USPslago/pl-11.pdf · Para que o custo de uma ação...
Transcript of Busca no espaço de estados (parte II) - IME-USPslago/pl-11.pdf · Para que o custo de uma ação...
Busca no espaço
de estados (parte II)
Prof. Dr. Silvio do Lago Pereira
Departamento de Tecnologia da Informação
Faculdade de Tecnologia de São Paulo
Estratégias de busca: recordando...
Uma estratégia de buscaUma estratégia de busca
especifica em que ordem devemos visitar os nós da árvore de busca para achar uma soluçãoespecifica em que ordem devemos visitar os nós da árvore de busca para achar uma solução
As principais estratégias de busca podem ser divididas em dois grupos:
busca não-informada: as estratégias neste grupo não dispõem de informação que
possibilite a escolha do nó mais promissor para ser visitado em cada instante.
busca aleatória
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 2
busca aleatória
busca em largura
busca em profundidade
busca informada: as estratégias neste grupo dispõem de informação que
possibilitam a escolha do nó mais promissor para ser visitado em cada instante.
busca pelo menor custo
busca pela melhor estimativa
busca ótima (A*)
Custo de ação
Em muitos problemas de busca, as ações podem ter custos que refletem a
dificuldade que o agente tem em executá-las.
Este custo pode representar uma quantia de dinheiro, tempo, distância, etc.
Para que o custo de uma ação possa ser levado em conta durante a busca,
precisamos adicioná-lo como um novo argumento na especificação das ações.
Representação de ações com custosRepresentação de ações com custos
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 4
Representação de ações com custosRepresentação de ações com custos
ação(ação(ação(ação(αααα,e,e,e,e1111,e,e,e,e2222,,,,gggg) :) :) :) :---- ββββ....
onde:
αααα é o identificador da ação
eeee1111 é o estado em que o mundo se encontra antes da execução da ação ααααeeee2222 é o estado em que o mundo fica após a execução da ação ααααgggg é o custo de executar a ação ααααββββ é uma especificação das precondições e/ou efeitos da ação αααα
ação(ação(ação(ação(αααα,e,e,e,e1111,e,e,e,e2222,,,,gggg) :) :) :) :---- ββββ....
onde:
αααα é o identificador da ação
eeee1111 é o estado em que o mundo se encontra antes da execução da ação ααααeeee2222 é o estado em que o mundo fica após a execução da ação ααααgggg é o custo de executar a ação ααααββββ é uma especificação das precondições e/ou efeitos da ação αααα
Custo de ação
Exemplo 1. Problema das rotas (versão 1)Exemplo 1. Problema das rotas (versão 1)
inicialinicialinicialinicial(a).(a).(a).(a).
metametametameta(j).(j).(j).(j).
inicialinicialinicialinicial(a).(a).(a).(a).
metametametameta(j).(j).(j).(j).
Mapa de viasMapa de vias
C F
I3.2
43.2
5.1
No problema das rotas, as ações do agente permitem seu deslocamento de um
ponto ao outro do mapa e seus custos representam as distâncias percorridas.
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 5
açãoaçãoaçãoação((((vai(P,Q)vai(P,Q)vai(P,Q)vai(P,Q),P,Q,D) :,P,Q,D) :,P,Q,D) :,P,Q,D) :---- via(P,Q,D).via(P,Q,D).via(P,Q,D).via(P,Q,D).
via(a,b,4.0). via(a,d,5.8). via(a,b,4.0). via(a,d,5.8). via(a,b,4.0). via(a,d,5.8). via(a,b,4.0). via(a,d,5.8).
via(a,e,3.2). via(a,h,7.0).via(a,e,3.2). via(a,h,7.0).via(a,e,3.2). via(a,h,7.0).via(a,e,3.2). via(a,h,7.0).via(b,c,3.2). via(c,f,4.0).via(b,c,3.2). via(c,f,4.0).via(b,c,3.2). via(c,f,4.0).via(b,c,3.2). via(c,f,4.0).via(d,c,2.8). via(d,j,5.8).via(d,c,2.8). via(d,j,5.8).via(d,c,2.8). via(d,j,5.8).via(d,c,2.8). via(d,j,5.8).via(e,g,2.2). via(f,i,3.2).via(e,g,2.2). via(f,i,3.2).via(e,g,2.2). via(f,i,3.2).via(e,g,2.2). via(f,i,3.2).via(g,j,3.0). via(h,j,2.2).via(g,j,3.0). via(h,j,2.2).via(g,j,3.0). via(h,j,2.2).via(g,j,3.0). via(h,j,2.2).via(i,d,5.1). via(i,j,4.0).via(i,d,5.1). via(i,j,4.0).via(i,d,5.1). via(i,j,4.0).via(i,d,5.1). via(i,j,4.0).via(j,a,8.2).via(j,a,8.2).via(j,a,8.2).via(j,a,8.2).
açãoaçãoaçãoação((((vai(P,Q)vai(P,Q)vai(P,Q)vai(P,Q),P,Q,D) :,P,Q,D) :,P,Q,D) :,P,Q,D) :---- via(P,Q,D).via(P,Q,D).via(P,Q,D).via(P,Q,D).
via(a,b,4.0). via(a,d,5.8). via(a,b,4.0). via(a,d,5.8). via(a,b,4.0). via(a,d,5.8). via(a,b,4.0). via(a,d,5.8).
via(a,e,3.2). via(a,h,7.0).via(a,e,3.2). via(a,h,7.0).via(a,e,3.2). via(a,h,7.0).via(a,e,3.2). via(a,h,7.0).via(b,c,3.2). via(c,f,4.0).via(b,c,3.2). via(c,f,4.0).via(b,c,3.2). via(c,f,4.0).via(b,c,3.2). via(c,f,4.0).via(d,c,2.8). via(d,j,5.8).via(d,c,2.8). via(d,j,5.8).via(d,c,2.8). via(d,j,5.8).via(d,c,2.8). via(d,j,5.8).via(e,g,2.2). via(f,i,3.2).via(e,g,2.2). via(f,i,3.2).via(e,g,2.2). via(f,i,3.2).via(e,g,2.2). via(f,i,3.2).via(g,j,3.0). via(h,j,2.2).via(g,j,3.0). via(h,j,2.2).via(g,j,3.0). via(h,j,2.2).via(g,j,3.0). via(h,j,2.2).via(i,d,5.1). via(i,j,4.0).via(i,d,5.1). via(i,j,4.0).via(i,d,5.1). via(i,j,4.0).via(i,d,5.1). via(i,j,4.0).via(j,a,8.2).via(j,a,8.2).via(j,a,8.2).via(j,a,8.2).
B
A
E
J
D
H
I
G4
3.2
5.8
3.2
2.85.1
4
5.8
2.2
3
8.2
7
2.2
Custo de caminho
Custo de caminhoCusto de caminho
quando as ações têm custo, o custo de um
caminho [a1, a
2, ..., an] é
quando as ações têm custo, o custo de um
caminho [a1, a
2, ..., an] é
Mapa de viasMapa de vias
B
E
J
C F
D
I
G4
3.2
5.8
4
2.8
3.2
5.1
45.8
2.23
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 6
onde g(ai) é o custo da ação ai.onde g(ai) é o custo da ação ai.
Exemplo 2. Custo de caminhoExemplo 2. Custo de caminho
O custo do caminho [[[[vai(a,h)vai(a,h)vai(a,h)vai(a,h),,,,vai(h,j)vai(h,j)vai(h,j)vai(h,j)]]]] é 7777 + 2.22.22.22.2 = 9.29.29.29.2O custo do caminho [[[[vai(a,h)vai(a,h)vai(a,h)vai(a,h),,,,vai(h,j)vai(h,j)vai(h,j)vai(h,j)]]]] é 7777 + 2.22.22.22.2 = 9.29.29.29.2
Numa árvore de busca, o custo de uma folha é o custo do caminho da raiz até ela.
A
E
H
3.2
8.2
7
2.2
0:a0:a0:a0:a
Busca pelo menor custo
Na busca pelo menor custoNa busca pelo menor custo
em cada instante, expande-se uma das folhas que tenha custo mínimoem cada instante, expande-se uma das folhas que tenha custo mínimo
0:a0:a0:a0:a
vai(a,d)vai(a,d)vai(a,d)vai(a,d) vai(a,e)vai(a,e)vai(a,e)vai(a,e)
vai(a,h)vai(a,h)vai(a,h)vai(a,h)vai(a,b)vai(a,b)vai(a,b)vai(a,b)
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 7
Solução: [vai(a,e),vai(e,g),vai(g,j)]Solução: [vai(a,e),vai(e,g),vai(g,j)]Solução: [vai(a,e),vai(e,g),vai(g,j)]Solução: [vai(a,e),vai(e,g),vai(g,j)]
4.0:b4.0:b4.0:b4.0:b 5.8:d5.8:d5.8:d5.8:d 3.2:e3.2:e3.2:e3.2:e 7.0:h7.0:h7.0:h7.0:h
7.2:c7.2:c7.2:c7.2:c
4.0:b4.0:b4.0:b4.0:b
vai(b,c)vai(b,c)vai(b,c)vai(b,c)
11.2:f11.2:f11.2:f11.2:f
7.2:c7.2:c7.2:c7.2:c
vai(c,f)vai(c,f)vai(c,f)vai(c,f)
5.8:d5.8:d5.8:d5.8:d
8.6:c8.6:c8.6:c8.6:c 11.6:j11.6:j11.6:j11.6:j
vai(d,c)vai(d,c)vai(d,c)vai(d,c) vai(d,j)vai(d,j)vai(d,j)vai(d,j)
5.4:g5.4:g5.4:g5.4:g
3.2:e3.2:e3.2:e3.2:e
vai(e,g)vai(e,g)vai(e,g)vai(e,g)
8.4:j8.4:j8.4:j8.4:j
5.4:g5.4:g5.4:g5.4:g
vai(g,j)vai(g,j)vai(g,j)vai(g,j)
9.2:j9.2:j9.2:j9.2:j
7.0:h7.0:h7.0:h7.0:h
vai(h,j)vai(h,j)vai(h,j)vai(h,j)
8.4:j8.4:j8.4:j8.4:j
Busca pelo menor custo
A busca pelo menor custoA busca pelo menor custo
garante encontrar uma solução de custo mínimo (não necessariamente com menos passos)
se as ações têm custo uniforme (todos iguais), esta busca funciona como a busca em largura
garante encontrar uma solução de custo mínimo (não necessariamente com menos passos)
se as ações têm custo uniforme (todos iguais), esta busca funciona como a busca em largura
Folhas de maior custo
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 8
Folhas de maior custo
nós ainda não exploradosFolha de custo mínimo
Busca pelo menor custo
Exemplo 3. Implementação de busca pelo menor custoExemplo 3. Implementação de busca pelo menor custo
busca_menor_custobusca_menor_custobusca_menor_custobusca_menor_custo ::::----
inicial(E),inicial(E),inicial(E),inicial(E),
busca_menor_custo([busca_menor_custo([busca_menor_custo([busca_menor_custo([0000:E:[]],[],P:G),:E:[]],[],P:G),:E:[]],[],P:G),:E:[]],[],P:G),
formatformatformatformat('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),
formatformatformatformat('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).
busca_menor_custobusca_menor_custobusca_menor_custobusca_menor_custo([([([([GGGG:E:C|_],_,P:G) ::E:C|_],_,P:G) ::E:C|_],_,P:G) ::E:C|_],_,P:G) :----
busca_menor_custobusca_menor_custobusca_menor_custobusca_menor_custo ::::----
inicial(E),inicial(E),inicial(E),inicial(E),
busca_menor_custo([busca_menor_custo([busca_menor_custo([busca_menor_custo([0000:E:[]],[],P:G),:E:[]],[],P:G),:E:[]],[],P:G),:E:[]],[],P:G),
formatformatformatformat('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),
formatformatformatformat('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).
busca_menor_custobusca_menor_custobusca_menor_custobusca_menor_custo([([([([GGGG:E:C|_],_,P:G) ::E:C|_],_,P:G) ::E:C|_],_,P:G) ::E:C|_],_,P:G) :----
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 9
meta(E), meta(E), meta(E), meta(E), !!!!,,,,
reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
busca_menor_custobusca_menor_custobusca_menor_custobusca_menor_custo([([([([GGGG:E:C|F],V,P) ::E:C|F],V,P) ::E:C|F],V,P) ::E:C|F],V,P) :----
sucessoresG(sucessoresG(sucessoresG(sucessoresG(GGGG:E:C,V,S),:E:C,V,S),:E:C,V,S),:E:C,V,S),
insereOrdenadoinsereOrdenadoinsereOrdenadoinsereOrdenado(S,F,NF),(S,F,NF),(S,F,NF),(S,F,NF),
unionunionunionunion([E],V,NV),([E],V,NV),([E],V,NV),([E],V,NV),
busca_menor_custo(NF,NV,P).busca_menor_custo(NF,NV,P).busca_menor_custo(NF,NV,P).busca_menor_custo(NF,NV,P).
meta(E), meta(E), meta(E), meta(E), !!!!,,,,
reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
busca_menor_custobusca_menor_custobusca_menor_custobusca_menor_custo([([([([GGGG:E:C|F],V,P) ::E:C|F],V,P) ::E:C|F],V,P) ::E:C|F],V,P) :----
sucessoresG(sucessoresG(sucessoresG(sucessoresG(GGGG:E:C,V,S),:E:C,V,S),:E:C,V,S),:E:C,V,S),
insereOrdenadoinsereOrdenadoinsereOrdenadoinsereOrdenado(S,F,NF),(S,F,NF),(S,F,NF),(S,F,NF),
unionunionunionunion([E],V,NV),([E],V,NV),([E],V,NV),([E],V,NV),
busca_menor_custo(NF,NV,P).busca_menor_custo(NF,NV,P).busca_menor_custo(NF,NV,P).busca_menor_custo(NF,NV,P).
Ordenando as folhas pelo valor de g(s), garantimos escolher a folha de menor custo
Busca pelo menor custo
Exemplo 3. Implementação de busca pelo menor custo (continuação)Exemplo 3. Implementação de busca pelo menor custo (continuação)
sucessoresGsucessoresGsucessoresGsucessoresG(G:E:C,V,S) :(G:E:C,V,S) :(G:E:C,V,S) :(G:E:C,V,S) :----
findallfindallfindallfindall(G1:N:[A|C],(ação(A,E,N,G2),(G1:N:[A|C],(ação(A,E,N,G2),(G1:N:[A|C],(ação(A,E,N,G2),(G1:N:[A|C],(ação(A,E,N,G2),
notnotnotnot((((membermembermembermember(N,V)),(N,V)),(N,V)),(N,V)),
G1 G1 G1 G1 isisisis G+G2),S).G+G2),S).G+G2),S).G+G2),S).
insereOrdenadoinsereOrdenadoinsereOrdenadoinsereOrdenado(S,F,NF) :(S,F,NF) :(S,F,NF) :(S,F,NF) :----
appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
sucessoresGsucessoresGsucessoresGsucessoresG(G:E:C,V,S) :(G:E:C,V,S) :(G:E:C,V,S) :(G:E:C,V,S) :----
findallfindallfindallfindall(G1:N:[A|C],(ação(A,E,N,G2),(G1:N:[A|C],(ação(A,E,N,G2),(G1:N:[A|C],(ação(A,E,N,G2),(G1:N:[A|C],(ação(A,E,N,G2),
notnotnotnot((((membermembermembermember(N,V)),(N,V)),(N,V)),(N,V)),
G1 G1 G1 G1 isisisis G+G2),S).G+G2),S).G+G2),S).G+G2),S).
insereOrdenadoinsereOrdenadoinsereOrdenadoinsereOrdenado(S,F,NF) :(S,F,NF) :(S,F,NF) :(S,F,NF) :----
appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 10
appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
sortsortsortsort(R,NF), (R,NF), (R,NF), (R,NF), !!!!....
appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
sortsortsortsort(R,NF), (R,NF), (R,NF), (R,NF), !!!!....
Exercício 1. Teste de busca pelo menor custoExercício 1. Teste de busca pelo menor custo
Considerando a especificação de ações do problema das rotas (versão 1), encontre
uma solução de custo mínimo para os seguintes problemas:
Ir de AAAA até JJJJIr de JJJJ até HHHH
Considerando a especificação de ações do problema das rotas (versão 1), encontre
uma solução de custo mínimo para os seguintes problemas:
Ir de AAAA até JJJJIr de JJJJ até HHHH
Busca pelo menor custo
Exercício 2. O problema de aritméticaExercício 2. O problema de aritmética
Resolva o problema especificado a seguir usando busca pelo menor custo:
inicialinicialinicialinicial(0).(0).(0).(0).
metametametameta(10).(10).(10).(10).
açãoaçãoaçãoação((((incincincinc,S1,S2,1) :,S1,S2,1) :,S1,S2,1) :,S1,S2,1) :---- S2 is S1+1.S2 is S1+1.S2 is S1+1.S2 is S1+1.
açãoaçãoaçãoação((((decdecdecdec,S1,S2,1) :,S1,S2,1) :,S1,S2,1) :,S1,S2,1) :---- S2 is S1S2 is S1S2 is S1S2 is S1----1.1.1.1.
açãoaçãoaçãoação((((dupdupdupdup,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :---- S2 is S1*2.S2 is S1*2.S2 is S1*2.S2 is S1*2.
Resolva o problema especificado a seguir usando busca pelo menor custo:
inicialinicialinicialinicial(0).(0).(0).(0).
metametametameta(10).(10).(10).(10).
açãoaçãoaçãoação((((incincincinc,S1,S2,1) :,S1,S2,1) :,S1,S2,1) :,S1,S2,1) :---- S2 is S1+1.S2 is S1+1.S2 is S1+1.S2 is S1+1.
açãoaçãoaçãoação((((decdecdecdec,S1,S2,1) :,S1,S2,1) :,S1,S2,1) :,S1,S2,1) :---- S2 is S1S2 is S1S2 is S1S2 is S1----1.1.1.1.
açãoaçãoaçãoação((((dupdupdupdup,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :---- S2 is S1*2.S2 is S1*2.S2 is S1*2.S2 is S1*2.
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 11
açãoaçãoaçãoação((((dupdupdupdup,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :---- S2 is S1*2.S2 is S1*2.S2 is S1*2.S2 is S1*2.
açãoaçãoaçãoação((((divdivdivdiv,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :---- S2 is S1//2.S2 is S1//2.S2 is S1//2.S2 is S1//2.
açãoaçãoaçãoação((((invinvinvinv,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :---- S2 is S2 is S2 is S2 is ----S1.S1.S1.S1.
açãoaçãoaçãoação((((dupdupdupdup,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :---- S2 is S1*2.S2 is S1*2.S2 is S1*2.S2 is S1*2.
açãoaçãoaçãoação((((divdivdivdiv,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :---- S2 is S1//2.S2 is S1//2.S2 is S1//2.S2 is S1//2.
açãoaçãoaçãoação((((invinvinvinv,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :,S1,S2,2) :---- S2 is S2 is S2 is S2 is ----S1.S1.S1.S1.
Exercício 3. Outros problemas de aritméticaExercício 3. Outros problemas de aritmética
Resolva os problemas de aritmética a seguir usando busca pelo menor custo:
Transformar 10101010 em 0000
Transformar 7777 em 1111
Transformar ----7777 em 1111
Resolva os problemas de aritmética a seguir usando busca pelo menor custo:
Transformar 10101010 em 0000
Transformar 7777 em 1111
Transformar ----7777 em 1111
Busca pelo menor custo
Exercício 4. O problema das fichasExercício 4. O problema das fichas
O problema das fichas consiste num tabuleiro com
cinco posições e apenas quatro fichas.
O objetivo é posicionar as duas fichas azuis à esquerda
e as duas fichas vermelhas à direita.
As ações possíveis são da forma mijmijmijmij, sendo iiii a
posição atual da ficha e jjjj a nova posição para a qual ela
é movida (que deve estar livre).
O problema das fichas consiste num tabuleiro com
cinco posições e apenas quatro fichas.
O objetivo é posicionar as duas fichas azuis à esquerda
e as duas fichas vermelhas à direita.
As ações possíveis são da forma mijmijmijmij, sendo iiii a
posição atual da ficha e jjjj a nova posição para a qual ela
é movida (que deve estar livre).
1 2 3 4 5
inicialinicialinicialinicial([v,b,a,v,a])([v,b,a,v,a])([v,b,a,v,a])([v,b,a,v,a])
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 12
é movida (que deve estar livre).
Se iiii e jjjj são adjacentes, o custo da ação é 1111; caso
contrário, o custo da ação é igual ao dobro do número de
posições saltadas pela ficha movida.
açãoaçãoaçãoação((((m21m21m21m21,[,[,[,[bbbb,A,B,C,D],[A,,A,B,C,D],[A,,A,B,C,D],[A,,A,B,C,D],[A,bbbb,B,C,D],1).,B,C,D],1).,B,C,D],1).,B,C,D],1).açãoaçãoaçãoação((((m31m31m31m31,[,[,[,[bbbb,A,B,C,D],[B,A,,A,B,C,D],[B,A,,A,B,C,D],[B,A,,A,B,C,D],[B,A,bbbb,C,D],2).,C,D],2).,C,D],2).,C,D],2).açãoaçãoaçãoação((((m41m41m41m41,[,[,[,[bbbb,A,B,C,D],[C,A,B,,A,B,C,D],[C,A,B,,A,B,C,D],[C,A,B,,A,B,C,D],[C,A,B,bbbb,D],4).,D],4).,D],4).,D],4).açãoaçãoaçãoação((((m51m51m51m51,[,[,[,[bbbb,A,B,C,D],[D,A,B,C,,A,B,C,D],[D,A,B,C,,A,B,C,D],[D,A,B,C,,A,B,C,D],[D,A,B,C,bbbb],6).],6).],6).],6).
Especifique as ações para este problema e resolva-o
usando busca pelo menor custo.
é movida (que deve estar livre).
Se iiii e jjjj são adjacentes, o custo da ação é 1111; caso
contrário, o custo da ação é igual ao dobro do número de
posições saltadas pela ficha movida.
açãoaçãoaçãoação((((m21m21m21m21,[,[,[,[bbbb,A,B,C,D],[A,,A,B,C,D],[A,,A,B,C,D],[A,,A,B,C,D],[A,bbbb,B,C,D],1).,B,C,D],1).,B,C,D],1).,B,C,D],1).açãoaçãoaçãoação((((m31m31m31m31,[,[,[,[bbbb,A,B,C,D],[B,A,,A,B,C,D],[B,A,,A,B,C,D],[B,A,,A,B,C,D],[B,A,bbbb,C,D],2).,C,D],2).,C,D],2).,C,D],2).açãoaçãoaçãoação((((m41m41m41m41,[,[,[,[bbbb,A,B,C,D],[C,A,B,,A,B,C,D],[C,A,B,,A,B,C,D],[C,A,B,,A,B,C,D],[C,A,B,bbbb,D],4).,D],4).,D],4).,D],4).açãoaçãoaçãoação((((m51m51m51m51,[,[,[,[bbbb,A,B,C,D],[D,A,B,C,,A,B,C,D],[D,A,B,C,,A,B,C,D],[D,A,B,C,,A,B,C,D],[D,A,B,C,bbbb],6).],6).],6).],6).
Especifique as ações para este problema e resolva-o
usando busca pelo menor custo.
1 2 3 4 5
metametametameta([a,a,b,v,v])([a,a,b,v,v])([a,a,b,v,v])([a,a,b,v,v])
Função heurística
Função heurísticaFunção heurística
é uma função h que estima o custo mínimo de um caminho (desconhecido) que leva
de um determinado estado corrente s a um estado meta s’.
é uma função h que estima o custo mínimo de um caminho (desconhecido) que leva
de um determinado estado corrente s a um estado meta s’.
ssss0000 ssss s’s’s’s’
inicial corrente meta
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 13
Seja h* uma função que calcula o custo mínimo exato de um caminho que leva de
um estado corrente s a um estado meta s’.
Uma função heurística h é admissível se, para todo estado s, temos h(s) ≤≤≤≤ h*(s).
Particularmente, se s é um estado meta, devemos ter h(s) = 0.
Seja h* uma função que calcula o custo mínimo exato de um caminho que leva de
um estado corrente s a um estado meta s’.
Uma função heurística h é admissível se, para todo estado s, temos h(s) ≤≤≤≤ h*(s).
Particularmente, se s é um estado meta, devemos ter h(s) = 0.
o custo exato do caminho
já percorrido é g(s)
o custo mínimo estimado do
caminho que falta percorrer é h(s)
Função heurística (distância de Manhattan)
Exemplo 4. Função heurística admissívelExemplo 4. Função heurística admissível
O problema do quebra-cabeça de oito peças consiste
em encontrar uma seqüência de movimentos que
transforme um estado inicial s num estado meta s’.
Uma heurística admissível bastante conhecida para
este problema é a chamada distância de Manhattan.
Esta heurística estima o custo mínimo do caminho a ser
O problema do quebra-cabeça de oito peças consiste
em encontrar uma seqüência de movimentos que
transforme um estado inicial s num estado meta s’.
Uma heurística admissível bastante conhecida para
este problema é a chamada distância de Manhattan.
Esta heurística estima o custo mínimo do caminho a ser
1 3 4
8 2 5
7 6
1 3 4 1 3 4
s
s1
s2
Sucessor mais promissor?
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 14
Esta heurística estima o custo mínimo do caminho a ser
percorrido de um estado corrente s a um estado meta
s’, calculando a soma das distâncias entre as posições
que as peças ocupam em s e em s’.
h(s1) = d1(2) + d
1(3) + d
1(4) = 1+1+1 = 3
h(s2) = d2(2) + d
2(3) + d
2(4) + d
2(5) = 1+1+1+1+1 = 5
Esta heurística é admissível porque as peças não
podem se mover na diagonal.
Esta heurística estima o custo mínimo do caminho a ser
percorrido de um estado corrente s a um estado meta
s’, calculando a soma das distâncias entre as posições
que as peças ocupam em s e em s’.
h(s1) = d1(2) + d
1(3) + d
1(4) = 1+1+1 = 3
h(s2) = d2(2) + d
2(3) + d
2(4) + d
2(5) = 1+1+1+1+1 = 5
Esta heurística é admissível porque as peças não
podem se mover na diagonal.
1 3 4
8 2
7 6 5
1 3 4
8 2 5
7 6
1 2 3
8 4
7 6 5
s1
s2
s’
Função heurística (distância em linha reta)
Exemplo 5. Problema das rotas (versão 2)Exemplo 5. Problema das rotas (versão 2)
inicialinicialinicialinicial(a). (a). (a). (a).
metametametameta(j).(j).(j).(j).
açãoaçãoaçãoação((((vai(P,Q)vai(P,Q)vai(P,Q)vai(P,Q),P,Q,D) :,P,Q,D) :,P,Q,D) :,P,Q,D) :----
via(P,Q), dist(P,Q,D).via(P,Q), dist(P,Q,D).via(P,Q), dist(P,Q,D).via(P,Q), dist(P,Q,D).
hhhh(S,H) :(S,H) :(S,H) :(S,H) :---- meta(M), dist(S,M,H).meta(M), dist(S,M,H).meta(M), dist(S,M,H).meta(M), dist(S,M,H).
viaviaviavia(a,b). (a,b). (a,b). (a,b). viaviaviavia(a,d). (a,d). (a,d). (a,d). viaviaviavia(a,e). (a,e). (a,e). (a,e). viaviaviavia(a,h).(a,h).(a,h).(a,h).
viaviaviavia(b,c). (b,c). (b,c). (b,c). viaviaviavia(c,f). (c,f). (c,f). (c,f). viaviaviavia(d,c). (d,c). (d,c). (d,c). viaviaviavia(d,j).(d,j).(d,j).(d,j).
inicialinicialinicialinicial(a). (a). (a). (a).
metametametameta(j).(j).(j).(j).
açãoaçãoaçãoação((((vai(P,Q)vai(P,Q)vai(P,Q)vai(P,Q),P,Q,D) :,P,Q,D) :,P,Q,D) :,P,Q,D) :----
via(P,Q), dist(P,Q,D).via(P,Q), dist(P,Q,D).via(P,Q), dist(P,Q,D).via(P,Q), dist(P,Q,D).
hhhh(S,H) :(S,H) :(S,H) :(S,H) :---- meta(M), dist(S,M,H).meta(M), dist(S,M,H).meta(M), dist(S,M,H).meta(M), dist(S,M,H).
viaviaviavia(a,b). (a,b). (a,b). (a,b). viaviaviavia(a,d). (a,d). (a,d). (a,d). viaviaviavia(a,e). (a,e). (a,e). (a,e). viaviaviavia(a,h).(a,h).(a,h).(a,h).
viaviaviavia(b,c). (b,c). (b,c). (b,c). viaviaviavia(c,f). (c,f). (c,f). (c,f). viaviaviavia(d,c). (d,c). (d,c). (d,c). viaviaviavia(d,j).(d,j).(d,j).(d,j).
Mapa com coordenadas
9 C F
Exercício 5. HeurísticaExercício 5. Heurística
Calcule a heurística para cada localização do mapa a abaixo.Calcule a heurística para cada localização do mapa a abaixo.
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 15
viaviaviavia(b,c). (b,c). (b,c). (b,c). viaviaviavia(c,f). (c,f). (c,f). (c,f). viaviaviavia(d,c). (d,c). (d,c). (d,c). viaviaviavia(d,j).(d,j).(d,j).(d,j).
viaviaviavia(e,g). (e,g). (e,g). (e,g). viaviaviavia(f,i). (f,i). (f,i). (f,i). viaviaviavia(g,j). (g,j). (g,j). (g,j). viaviaviavia(h,j).(h,j).(h,j).(h,j).
viaviaviavia(i,d). (i,d). (i,d). (i,d). viaviaviavia(i,j). (i,j). (i,j). (i,j). viaviaviavia(j,a).(j,a).(j,a).(j,a).
distdistdistdist(P,Q,D) :(P,Q,D) :(P,Q,D) :(P,Q,D) :----
pos(P,Xp,Yp), pos(Q,Xq,Yq),pos(P,Xp,Yp), pos(Q,Xq,Yq),pos(P,Xp,Yp), pos(Q,Xq,Yq),pos(P,Xp,Yp), pos(Q,Xq,Yq),
D D D D isisisis sqrtsqrtsqrtsqrt((Xp((Xp((Xp((Xp----Xq)^2 + (YpXq)^2 + (YpXq)^2 + (YpXq)^2 + (Yp----Yq)^2).Yq)^2).Yq)^2).Yq)^2).
pospospospos(a,1,2). (a,1,2). (a,1,2). (a,1,2). pospospospos(b,1,6). (b,1,6). (b,1,6). (b,1,6). pospospospos(c,2,9).(c,2,9).(c,2,9).(c,2,9).
pospospospos(d,4,7). (d,4,7). (d,4,7). (d,4,7). pospospospos(e,4,3). (e,4,3). (e,4,3). (e,4,3). pospospospos(f,6,9).(f,6,9).(f,6,9).(f,6,9).
pospospospos(g,6,4). (g,6,4). (g,6,4). (g,6,4). pospospospos(h,8,2). (h,8,2). (h,8,2). (h,8,2). pospospospos(i,9,8).(i,9,8).(i,9,8).(i,9,8).
pospospospos(j,9,4).(j,9,4).(j,9,4).(j,9,4).
viaviaviavia(b,c). (b,c). (b,c). (b,c). viaviaviavia(c,f). (c,f). (c,f). (c,f). viaviaviavia(d,c). (d,c). (d,c). (d,c). viaviaviavia(d,j).(d,j).(d,j).(d,j).
viaviaviavia(e,g). (e,g). (e,g). (e,g). viaviaviavia(f,i). (f,i). (f,i). (f,i). viaviaviavia(g,j). (g,j). (g,j). (g,j). viaviaviavia(h,j).(h,j).(h,j).(h,j).
viaviaviavia(i,d). (i,d). (i,d). (i,d). viaviaviavia(i,j). (i,j). (i,j). (i,j). viaviaviavia(j,a).(j,a).(j,a).(j,a).
distdistdistdist(P,Q,D) :(P,Q,D) :(P,Q,D) :(P,Q,D) :----
pos(P,Xp,Yp), pos(Q,Xq,Yq),pos(P,Xp,Yp), pos(Q,Xq,Yq),pos(P,Xp,Yp), pos(Q,Xq,Yq),pos(P,Xp,Yp), pos(Q,Xq,Yq),
D D D D isisisis sqrtsqrtsqrtsqrt((Xp((Xp((Xp((Xp----Xq)^2 + (YpXq)^2 + (YpXq)^2 + (YpXq)^2 + (Yp----Yq)^2).Yq)^2).Yq)^2).Yq)^2).
pospospospos(a,1,2). (a,1,2). (a,1,2). (a,1,2). pospospospos(b,1,6). (b,1,6). (b,1,6). (b,1,6). pospospospos(c,2,9).(c,2,9).(c,2,9).(c,2,9).
pospospospos(d,4,7). (d,4,7). (d,4,7). (d,4,7). pospospospos(e,4,3). (e,4,3). (e,4,3). (e,4,3). pospospospos(f,6,9).(f,6,9).(f,6,9).(f,6,9).
pospospospos(g,6,4). (g,6,4). (g,6,4). (g,6,4). pospospospos(h,8,2). (h,8,2). (h,8,2). (h,8,2). pospospospos(i,9,8).(i,9,8).(i,9,8).(i,9,8).
pospospospos(j,9,4).(j,9,4).(j,9,4).(j,9,4).1 2 3 4 5 6 8 9
1
2
3
4
5
6
7
8
9
B
A
E
J
C F
D
H
I
G
7
Busca heurística
Um método de busca heurísticoUm método de busca heurístico
é um método que usa a estimativa fornecida por uma função heurística h para
escolher a folha mais promissora (i.e., mais próxima a um estado meta) a ser
expandida em cada instante da busca.
é um método que usa a estimativa fornecida por uma função heurística h para
escolher a folha mais promissora (i.e., mais próxima a um estado meta) a ser
expandida em cada instante da busca.
De acordo com esta definição, embora o método de busca pelo menor custo seja um
método de busca informada (pois utiliza informação sobre o custo das ações para
De acordo com esta definição, embora o método de busca pelo menor custo seja um
método de busca informada (pois utiliza informação sobre o custo das ações para
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 16
método de busca informada (pois utiliza informação sobre o custo das ações para
escolher a folha mais promissora a ser expandida), ele não é um método heurístico
(pois a informação que ele tem não serve para orientar a busca em direção à meta).
método de busca informada (pois utiliza informação sobre o custo das ações para
escolher a folha mais promissora a ser expandida), ele não é um método heurístico
(pois a informação que ele tem não serve para orientar a busca em direção à meta).
A seguir, apresentamos dois métodos de busca heurística:
busca pela melhor estimativa
busca ótima (A*)
A seguir, apresentamos dois métodos de busca heurística:
busca pela melhor estimativa
busca ótima (A*)
8.2:a8.2:a8.2:a8.2:a
Busca pela melhor estimativa
Na busca pela melhor estimativaNa busca pela melhor estimativa
em cada instante, expande-se uma das folhas que tenha a melhor estimativa (heurística)em cada instante, expande-se uma das folhas que tenha a melhor estimativa (heurística)
8.2:a8.2:a8.2:a8.2:a
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 17
Solução: [vai(a,h),vai(h,j)]Solução: [vai(a,h),vai(h,j)]Solução: [vai(a,h),vai(h,j)]Solução: [vai(a,h),vai(h,j)]
8.2:b8.2:b8.2:b8.2:b 5.8:d5.8:d5.8:d5.8:d 5.1:e5.1:e5.1:e5.1:e 2.2:h2.2:h2.2:h2.2:h
vai(a,d)vai(a,d)vai(a,d)vai(a,d) vai(a,e)vai(a,e)vai(a,e)vai(a,e)
vai(a,h)vai(a,h)vai(a,h)vai(a,h)vai(a,b)vai(a,b)vai(a,b)vai(a,b)
0.0:j0.0:j0.0:j0.0:j
2.2:h2.2:h2.2:h2.2:h
vai(h,j)vai(h,j)vai(h,j)vai(h,j)
0.0:j0.0:j0.0:j0.0:j
Busca pela melhor estimativa
A busca pelo menor custo minimiza o comprimento do caminho já percorrido, a
partir do estado inicial, até um estado corrente.
Conseqüência: encontra uma solução de custo mínimo.
ssss0000 ssss s’s’s’s’
inicial corrente meta
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 18
A busca pela melhor estimativa minimiza o comprimento estimado do caminho
que ainda falta percorrer, do estado corrente, até um estado meta.
Conseqüência: encontra uma solução rapidamente.
ssss0000 ssss s’s’s’s’
busca pelo menor custo busca pela melhor estimativa
Busca pela melhor estimativa
Exemplo 6. Implementação de busca pela melhor estimativaExemplo 6. Implementação de busca pela melhor estimativa
busca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativa ::::----inicial(E),inicial(E),inicial(E),inicial(E),busca_melhor_estimativa([busca_melhor_estimativa([busca_melhor_estimativa([busca_melhor_estimativa([____:0:E:[]],[],P:G),:0:E:[]],[],P:G),:0:E:[]],[],P:G),:0:E:[]],[],P:G),formatformatformatformat('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),formatformatformatformat('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).
busca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativa([([([([____:G:E:C|_],_,P:G) ::G:E:C|_],_,P:G) ::G:E:C|_],_,P:G) ::G:E:C|_],_,P:G) :----meta(E), meta(E), meta(E), meta(E), !!!!,,,,
busca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativa ::::----inicial(E),inicial(E),inicial(E),inicial(E),busca_melhor_estimativa([busca_melhor_estimativa([busca_melhor_estimativa([busca_melhor_estimativa([____:0:E:[]],[],P:G),:0:E:[]],[],P:G),:0:E:[]],[],P:G),:0:E:[]],[],P:G),formatformatformatformat('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),formatformatformatformat('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).
busca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativa([([([([____:G:E:C|_],_,P:G) ::G:E:C|_],_,P:G) ::G:E:C|_],_,P:G) ::G:E:C|_],_,P:G) :----meta(E), meta(E), meta(E), meta(E), !!!!,,,,
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 19
meta(E), meta(E), meta(E), meta(E), !!!!,,,,reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
busca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativa([([([([____:G:E:C|F],V,P) ::G:E:C|F],V,P) ::G:E:C|F],V,P) ::G:E:C|F],V,P) :----sucessoresH(G:E:C,V,S),sucessoresH(G:E:C,V,S),sucessoresH(G:E:C,V,S),sucessoresH(G:E:C,V,S),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),unionunionunionunion([E],V,NV),([E],V,NV),([E],V,NV),([E],V,NV),busca_melhor_estimativa(NF,NV,P).busca_melhor_estimativa(NF,NV,P).busca_melhor_estimativa(NF,NV,P).busca_melhor_estimativa(NF,NV,P).
meta(E), meta(E), meta(E), meta(E), !!!!,,,,reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
busca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativabusca_melhor_estimativa([([([([____:G:E:C|F],V,P) ::G:E:C|F],V,P) ::G:E:C|F],V,P) ::G:E:C|F],V,P) :----sucessoresH(G:E:C,V,S),sucessoresH(G:E:C,V,S),sucessoresH(G:E:C,V,S),sucessoresH(G:E:C,V,S),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),unionunionunionunion([E],V,NV),([E],V,NV),([E],V,NV),([E],V,NV),busca_melhor_estimativa(NF,NV,P).busca_melhor_estimativa(NF,NV,P).busca_melhor_estimativa(NF,NV,P).busca_melhor_estimativa(NF,NV,P).
Ordenando as folhas pelo valor de h(s), garantimos escolher a folha de melhor estimativa
Busca pela melhor estimativa
Exemplo 6. Implementação de busca pela melhor estimativa (continuação)Exemplo 6. Implementação de busca pela melhor estimativa (continuação)
sucessoresH(G:E:C,V,S) :sucessoresH(G:E:C,V,S) :sucessoresH(G:E:C,V,S) :sucessoresH(G:E:C,V,S) :----
findallfindallfindallfindall(H:G1:N:[A|C],(ação(A,E,N,G2),(H:G1:N:[A|C],(ação(A,E,N,G2),(H:G1:N:[A|C],(ação(A,E,N,G2),(H:G1:N:[A|C],(ação(A,E,N,G2),
notnotnotnot((((membermembermembermember(N,V)),(N,V)),(N,V)),(N,V)),
hhhh(N,H),(N,H),(N,H),(N,H),
G1 G1 G1 G1 isisisis G+G2),S).G+G2),S).G+G2),S).G+G2),S).
sucessoresH(G:E:C,V,S) :sucessoresH(G:E:C,V,S) :sucessoresH(G:E:C,V,S) :sucessoresH(G:E:C,V,S) :----
findallfindallfindallfindall(H:G1:N:[A|C],(ação(A,E,N,G2),(H:G1:N:[A|C],(ação(A,E,N,G2),(H:G1:N:[A|C],(ação(A,E,N,G2),(H:G1:N:[A|C],(ação(A,E,N,G2),
notnotnotnot((((membermembermembermember(N,V)),(N,V)),(N,V)),(N,V)),
hhhh(N,H),(N,H),(N,H),(N,H),
G1 G1 G1 G1 isisisis G+G2),S).G+G2),S).G+G2),S).G+G2),S).
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 20
insereOrdenado(S,F,NF) :insereOrdenado(S,F,NF) :insereOrdenado(S,F,NF) :insereOrdenado(S,F,NF) :----
appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
sortsortsortsort(R,NF), !.(R,NF), !.(R,NF), !.(R,NF), !.
insereOrdenado(S,F,NF) :insereOrdenado(S,F,NF) :insereOrdenado(S,F,NF) :insereOrdenado(S,F,NF) :----
appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
sortsortsortsort(R,NF), !.(R,NF), !.(R,NF), !.(R,NF), !.
Exercício 6. Teste de busca pela melhor estimativaExercício 6. Teste de busca pela melhor estimativa
Usando busca pela melhor estimativa, encontre uma solução para a segunda versão
do problema das rotas.
Usando busca pela melhor estimativa, encontre uma solução para a segunda versão
do problema das rotas.
Busca pela melhor estimativa
Exercício 7. Heurística para o problema das fichasExercício 7. Heurística para o problema das fichas
O número de peças fora do lugar desejado pode ser
usado como heurística no problema das fichas.
hhhh(S,H) :(S,H) :(S,H) :(S,H) :---- meta(M), dif(S,M,H), meta(M), dif(S,M,H), meta(M), dif(S,M,H), meta(M), dif(S,M,H), !!!!....
difdifdifdif([],[],0) :([],[],0) :([],[],0) :([],[],0) :---- !!!!....
difdifdifdif([b|A],[_|B],D) :([b|A],[_|B],D) :([b|A],[_|B],D) :([b|A],[_|B],D) :---- !!!!, dif(A,B,D). , dif(A,B,D). , dif(A,B,D). , dif(A,B,D).
difdifdifdif([X|A],[X|B],D) :([X|A],[X|B],D) :([X|A],[X|B],D) :([X|A],[X|B],D) :---- !!!!, dif(A,B,D)., dif(A,B,D)., dif(A,B,D)., dif(A,B,D).
O número de peças fora do lugar desejado pode ser
usado como heurística no problema das fichas.
hhhh(S,H) :(S,H) :(S,H) :(S,H) :---- meta(M), dif(S,M,H), meta(M), dif(S,M,H), meta(M), dif(S,M,H), meta(M), dif(S,M,H), !!!!....
difdifdifdif([],[],0) :([],[],0) :([],[],0) :([],[],0) :---- !!!!....
difdifdifdif([b|A],[_|B],D) :([b|A],[_|B],D) :([b|A],[_|B],D) :([b|A],[_|B],D) :---- !!!!, dif(A,B,D). , dif(A,B,D). , dif(A,B,D). , dif(A,B,D).
difdifdifdif([X|A],[X|B],D) :([X|A],[X|B],D) :([X|A],[X|B],D) :([X|A],[X|B],D) :---- !!!!, dif(A,B,D)., dif(A,B,D)., dif(A,B,D)., dif(A,B,D).
1 2 3 4 5
inicialinicialinicialinicial([v,b,a,v,a])([v,b,a,v,a])([v,b,a,v,a])([v,b,a,v,a])
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 21
difdifdifdif([X|A],[X|B],D) :([X|A],[X|B],D) :([X|A],[X|B],D) :([X|A],[X|B],D) :---- !!!!, dif(A,B,D)., dif(A,B,D)., dif(A,B,D)., dif(A,B,D).
difdifdifdif([_|A],[_|B],D) :([_|A],[_|B],D) :([_|A],[_|B],D) :([_|A],[_|B],D) :---- !!!!, dif(A,B,R), , dif(A,B,R), , dif(A,B,R), , dif(A,B,R),
D D D D isisisis R+1.R+1.R+1.R+1.
Use esta heurística para resolver o problema, com o
algoritmo de busca pela melhor estimativa.
difdifdifdif([X|A],[X|B],D) :([X|A],[X|B],D) :([X|A],[X|B],D) :([X|A],[X|B],D) :---- !!!!, dif(A,B,D)., dif(A,B,D)., dif(A,B,D)., dif(A,B,D).
difdifdifdif([_|A],[_|B],D) :([_|A],[_|B],D) :([_|A],[_|B],D) :([_|A],[_|B],D) :---- !!!!, dif(A,B,R), , dif(A,B,R), , dif(A,B,R), , dif(A,B,R),
D D D D isisisis R+1.R+1.R+1.R+1.
Use esta heurística para resolver o problema, com o
algoritmo de busca pela melhor estimativa.
1 2 3 4 5
metametametameta([a,a,b,v,v])([a,a,b,v,v])([a,a,b,v,v])([a,a,b,v,v])
8.2:0.0:a8.2:0.0:a8.2:0.0:a8.2:0.0:a
Busca ótima (ou A*)
Na busca ótima (ou A*)Na busca ótima (ou A*)
em cada instante, expande-se uma das folhas que tenha a menor soma de custo e heurística.em cada instante, expande-se uma das folhas que tenha a menor soma de custo e heurística.
8.2:0.0:a8.2:0.0:a8.2:0.0:a8.2:0.0:a
vai(a,d)vai(a,d)vai(a,d)vai(a,d) vai(a,e)vai(a,e)vai(a,e)vai(a,e)
vai(a,h)vai(a,h)vai(a,h)vai(a,h)vai(a,b)vai(a,b)vai(a,b)vai(a,b)
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 22
Solução: [vai(a,e),vai(e,g),vai(g,j)]Solução: [vai(a,e),vai(e,g),vai(g,j)]Solução: [vai(a,e),vai(e,g),vai(g,j)]Solução: [vai(a,e),vai(e,g),vai(g,j)]
8.2:4.0:b8.2:4.0:b8.2:4.0:b8.2:4.0:b 5.8:5.8:d5.8:5.8:d5.8:5.8:d5.8:5.8:d 5.1:3.2:e5.1:3.2:e5.1:3.2:e5.1:3.2:e 2.2:7.0:h2.2:7.0:h2.2:7.0:h2.2:7.0:h
3.0:5.4:g3.0:5.4:g3.0:5.4:g3.0:5.4:g
5.1:3.2:e5.1:3.2:e5.1:3.2:e5.1:3.2:e
vai(e,g)vai(e,g)vai(e,g)vai(e,g)
0.0:8.4:j0.0:8.4:j0.0:8.4:j0.0:8.4:j
3.0:5.4:g3.0:5.4:g3.0:5.4:g3.0:5.4:g
vai(g,j)vai(g,j)vai(g,j)vai(g,j)
0.0:8.4:j0.0:8.4:j0.0:8.4:j0.0:8.4:j
Busca ótima (ou A*)
A busca pelo menor custo encontra uma solução de custo mínimo.
A busca pela melhor estimativa encontra uma solução rapidamente.
ssss0000 ssss s’s’s’s’
inicial corrente meta
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 23
A busca ótima (ou A*) encontra uma solução de custo mínimo rapidamente.
menor custo minimiza g(s) melhor estimativa minimiza h(s)
busca ótima minimiza g(s)+h(s)
Busca ótima (ou A*)
Exemplo 7. Implementação de busca ótimaExemplo 7. Implementação de busca ótima
busca_ótimabusca_ótimabusca_ótimabusca_ótima ::::----
inicial(E),inicial(E),inicial(E),inicial(E),
busca_ótima([busca_ótima([busca_ótima([busca_ótima([____:_:0:E:[]],[],P:G),:_:0:E:[]],[],P:G),:_:0:E:[]],[],P:G),:_:0:E:[]],[],P:G),
formatformatformatformat('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),
formatformatformatformat('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).
busca_ótimabusca_ótimabusca_ótimabusca_ótima([([([([____:_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) :----
busca_ótimabusca_ótimabusca_ótimabusca_ótima ::::----
inicial(E),inicial(E),inicial(E),inicial(E),
busca_ótima([busca_ótima([busca_ótima([busca_ótima([____:_:0:E:[]],[],P:G),:_:0:E:[]],[],P:G),:_:0:E:[]],[],P:G),:_:0:E:[]],[],P:G),
formatformatformatformat('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),('~nPlano: ~w',[P]),
formatformatformatformat('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).('~nCusto: ~w~n~n',[G]).
busca_ótimabusca_ótimabusca_ótimabusca_ótima([([([([____:_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) :----
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 24
busca_ótimabusca_ótimabusca_ótimabusca_ótima([([([([____:_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) :----
meta(E), meta(E), meta(E), meta(E), !!!!,,,,
reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
busca_ótimabusca_ótimabusca_ótimabusca_ótima([([([([____:_:G:E:C|F],V,P) ::_:G:E:C|F],V,P) ::_:G:E:C|F],V,P) ::_:G:E:C|F],V,P) :----
sucessoresFsucessoresFsucessoresFsucessoresF(G:E:C,V,S),(G:E:C,V,S),(G:E:C,V,S),(G:E:C,V,S),
insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),
unionunionunionunion([E],V,NV),([E],V,NV),([E],V,NV),([E],V,NV),
busca_ótima(NF,NV,P).busca_ótima(NF,NV,P).busca_ótima(NF,NV,P).busca_ótima(NF,NV,P).
busca_ótimabusca_ótimabusca_ótimabusca_ótima([([([([____:_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) ::_:G:E:C|_],_,P:G) :----
meta(E), meta(E), meta(E), meta(E), !!!!,,,,
reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
busca_ótimabusca_ótimabusca_ótimabusca_ótima([([([([____:_:G:E:C|F],V,P) ::_:G:E:C|F],V,P) ::_:G:E:C|F],V,P) ::_:G:E:C|F],V,P) :----
sucessoresFsucessoresFsucessoresFsucessoresF(G:E:C,V,S),(G:E:C,V,S),(G:E:C,V,S),(G:E:C,V,S),
insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),insereOrdenado(S,F,NF),
unionunionunionunion([E],V,NV),([E],V,NV),([E],V,NV),([E],V,NV),
busca_ótima(NF,NV,P).busca_ótima(NF,NV,P).busca_ótima(NF,NV,P).busca_ótima(NF,NV,P).
Ordenando as folhas pelo valor de f(s), garantimos escolher a folha de menor g(s)+h(s)
Busca ótima (ou A*)
Exemplo 7. Implementação de busca ótima (continuação)Exemplo 7. Implementação de busca ótima (continuação)
sucessoresFsucessoresFsucessoresFsucessoresF(G:E:C,V,S) :(G:E:C,V,S) :(G:E:C,V,S) :(G:E:C,V,S) :----
findallfindallfindallfindall(F:H:G1:N:[A|C],(ação(A,E,N,G2),(F:H:G1:N:[A|C],(ação(A,E,N,G2),(F:H:G1:N:[A|C],(ação(A,E,N,G2),(F:H:G1:N:[A|C],(ação(A,E,N,G2),
notnotnotnot((((membermembermembermember(N,V)),(N,V)),(N,V)),(N,V)),
hhhh(N,H),(N,H),(N,H),(N,H),
G1 G1 G1 G1 isisisis G+G2,G+G2,G+G2,G+G2,
F F F F isisisis H+G1), S).H+G1), S).H+G1), S).H+G1), S).
sucessoresFsucessoresFsucessoresFsucessoresF(G:E:C,V,S) :(G:E:C,V,S) :(G:E:C,V,S) :(G:E:C,V,S) :----
findallfindallfindallfindall(F:H:G1:N:[A|C],(ação(A,E,N,G2),(F:H:G1:N:[A|C],(ação(A,E,N,G2),(F:H:G1:N:[A|C],(ação(A,E,N,G2),(F:H:G1:N:[A|C],(ação(A,E,N,G2),
notnotnotnot((((membermembermembermember(N,V)),(N,V)),(N,V)),(N,V)),
hhhh(N,H),(N,H),(N,H),(N,H),
G1 G1 G1 G1 isisisis G+G2,G+G2,G+G2,G+G2,
F F F F isisisis H+G1), S).H+G1), S).H+G1), S).H+G1), S).
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 25
insereOrdenadoinsereOrdenadoinsereOrdenadoinsereOrdenado(S,F,NF) :(S,F,NF) :(S,F,NF) :(S,F,NF) :----
appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
sortsortsortsort(R,NF), (R,NF), (R,NF), (R,NF), !!!!....
insereOrdenadoinsereOrdenadoinsereOrdenadoinsereOrdenado(S,F,NF) :(S,F,NF) :(S,F,NF) :(S,F,NF) :----
appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
sortsortsortsort(R,NF), (R,NF), (R,NF), (R,NF), !!!!....
Busca ótima (ou A*)
Exercício 8. Teste de busca ótimaExercício 8. Teste de busca ótima
Considerando a segunda versão do
problema das rotas, use busca ótima
para resolver os seguintes problemas:
Encontrar uma rota de AAAA até JJJJ.
Encontrar uma rota de JJJJ até AAAA.
Considerando a segunda versão do
problema das rotas, use busca ótima
para resolver os seguintes problemas:
Encontrar uma rota de AAAA até JJJJ.
Encontrar uma rota de JJJJ até AAAA. 3
4
5
6
7
8
9
B
E
J
C F
D
I
G
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 26
Exercício 9. Teste de busca ótimaExercício 9. Teste de busca ótima
Considerando a especificação de ações para o problema
das fichas, use busca ótima para encontrar uma solução
para o problema ilustrado na figura ao lado.
Considerando a especificação de ações para o problema
das fichas, use busca ótima para encontrar uma solução
para o problema ilustrado na figura ao lado.
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5 6 8 9
1
2
3
A
H
7
Algoritmo de busca generalizado
Exemplo 8. Algoritmo de busca generalizadoExemplo 8. Algoritmo de busca generalizado
buscabuscabuscabusca((((TTTT) :) :) :) :----inicial(E),inicial(E),inicial(E),inicial(E),busca(busca(busca(busca(TTTT,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),tipo(tipo(tipo(tipo(TTTT,N),,N),,N),,N),formatformatformatformat('('('('~nTipo~nTipo~nTipo~nTipo.: ~w',[N]),.: ~w',[N]),.: ~w',[N]),.: ~w',[N]),formatformatformatformat('('('('~nPlano~nPlano~nPlano~nPlano: ~w',[P]),: ~w',[P]),: ~w',[P]),: ~w',[P]),formatformatformatformat('('('('~nCusto~nCusto~nCusto~nCusto: ~: ~: ~: ~w~n~nw~n~nw~n~nw~n~n',[G]).',[G]).',[G]).',[G]).
buscabuscabuscabusca((((TTTT) :) :) :) :----inicial(E),inicial(E),inicial(E),inicial(E),busca(busca(busca(busca(TTTT,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),tipo(tipo(tipo(tipo(TTTT,N),,N),,N),,N),formatformatformatformat('('('('~nTipo~nTipo~nTipo~nTipo.: ~w',[N]),.: ~w',[N]),.: ~w',[N]),.: ~w',[N]),formatformatformatformat('('('('~nPlano~nPlano~nPlano~nPlano: ~w',[P]),: ~w',[P]),: ~w',[P]),: ~w',[P]),formatformatformatformat('('('('~nCusto~nCusto~nCusto~nCusto: ~: ~: ~: ~w~n~nw~n~nw~n~nw~n~n',[G]).',[G]).',[G]).',[G]).
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 27
formatformatformatformat('('('('~nCusto~nCusto~nCusto~nCusto: ~: ~: ~: ~w~n~nw~n~nw~n~nw~n~n',[G]).',[G]).',[G]).',[G]).
buscabuscabuscabusca((((____,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:C|_C|_C|_C|_],_,P:G) :],_,P:G) :],_,P:G) :],_,P:G) :----meta(E), !,meta(E), !,meta(E), !,meta(E), !,reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
buscabuscabuscabusca((((TTTT,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:C|FC|FC|FC|F],],],],VVVV,P) :,P) :,P) :,P) :----sucessores(sucessores(sucessores(sucessores(TTTT,G:E:C,V,S),,G:E:C,V,S),,G:E:C,V,S),,G:E:C,V,S),insere(insere(insere(insere(TTTT,S,F,NF),,S,F,NF),,S,F,NF),,S,F,NF),unionunionunionunion([E],V,NV),([E],V,NV),([E],V,NV),([E],V,NV),busca(busca(busca(busca(TTTT,NF,NV,P).,NF,NV,P).,NF,NV,P).,NF,NV,P).
formatformatformatformat('('('('~nCusto~nCusto~nCusto~nCusto: ~: ~: ~: ~w~n~nw~n~nw~n~nw~n~n',[G]).',[G]).',[G]).',[G]).
buscabuscabuscabusca((((____,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:C|_C|_C|_C|_],_,P:G) :],_,P:G) :],_,P:G) :],_,P:G) :----meta(E), !,meta(E), !,meta(E), !,meta(E), !,reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
buscabuscabuscabusca((((TTTT,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:C|FC|FC|FC|F],],],],VVVV,P) :,P) :,P) :,P) :----sucessores(sucessores(sucessores(sucessores(TTTT,G:E:C,V,S),,G:E:C,V,S),,G:E:C,V,S),,G:E:C,V,S),insere(insere(insere(insere(TTTT,S,F,NF),,S,F,NF),,S,F,NF),,S,F,NF),unionunionunionunion([E],V,NV),([E],V,NV),([E],V,NV),([E],V,NV),busca(busca(busca(busca(TTTT,NF,NV,P).,NF,NV,P).,NF,NV,P).,NF,NV,P).
Algoritmo de busca generalizado
Exemplo 8. Algoritmo de busca generalizado (continuação)Exemplo 8. Algoritmo de busca generalizado (continuação)
sucessoressucessoressucessoressucessores((((TTTT,G1:E:C,V,R) :,G1:E:C,V,R) :,G1:E:C,V,R) :,G1:E:C,V,R) :----
findallfindallfindallfindall(F:H:G:S:[A|C],(F:H:G:S:[A|C],(F:H:G:S:[A|C],(F:H:G:S:[A|C],
(ação(A,E,S,G2), (ação(A,E,S,G2), (ação(A,E,S,G2), (ação(A,E,S,G2),
notnotnotnot((((membermembermembermember(S,V)), (S,V)), (S,V)), (S,V)),
h(S,H), G h(S,H), G h(S,H), G h(S,H), G isisisis G1+G2, G1+G2, G1+G2, G1+G2,
(T(T(T(T====4 4 4 4 ---->>>> F F F F isisisis GGGG
sucessoressucessoressucessoressucessores((((TTTT,G1:E:C,V,R) :,G1:E:C,V,R) :,G1:E:C,V,R) :,G1:E:C,V,R) :----
findallfindallfindallfindall(F:H:G:S:[A|C],(F:H:G:S:[A|C],(F:H:G:S:[A|C],(F:H:G:S:[A|C],
(ação(A,E,S,G2), (ação(A,E,S,G2), (ação(A,E,S,G2), (ação(A,E,S,G2),
notnotnotnot((((membermembermembermember(S,V)), (S,V)), (S,V)), (S,V)),
h(S,H), G h(S,H), G h(S,H), G h(S,H), G isisisis G1+G2, G1+G2, G1+G2, G1+G2,
(T(T(T(T====4 4 4 4 ---->>>> F F F F isisisis GGGG
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 28
;T;T;T;T====5 5 5 5 ---->>>> F F F F isisisis HHHH
;T;T;T;T====6 6 6 6 ---->>>> F F F F isisisis G+HG+HG+HG+H
; F ; F ; F ; F isisisis 0)),R).0)),R).0)),R).0)),R).
insereinsereinsereinsere(1,S,F,NF) :(1,S,F,NF) :(1,S,F,NF) :(1,S,F,NF) :---- appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
lengthlengthlengthlength(R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), !!!!....
insereinsereinsereinsere(2,S,F,NF) :(2,S,F,NF) :(2,S,F,NF) :(2,S,F,NF) :---- appendappendappendappend(F,S,NF), (F,S,NF), (F,S,NF), (F,S,NF), !!!!....
insereinsereinsereinsere(3,S,F,NF) :(3,S,F,NF) :(3,S,F,NF) :(3,S,F,NF) :---- appendappendappendappend(S,F,NF), (S,F,NF), (S,F,NF), (S,F,NF), !!!!....
insereinsereinsereinsere(_,S,F,NF) :(_,S,F,NF) :(_,S,F,NF) :(_,S,F,NF) :---- appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R), sortsortsortsort(R,NF), (R,NF), (R,NF), (R,NF), !!!!....
;T;T;T;T====5 5 5 5 ---->>>> F F F F isisisis HHHH
;T;T;T;T====6 6 6 6 ---->>>> F F F F isisisis G+HG+HG+HG+H
; F ; F ; F ; F isisisis 0)),R).0)),R).0)),R).0)),R).
insereinsereinsereinsere(1,S,F,NF) :(1,S,F,NF) :(1,S,F,NF) :(1,S,F,NF) :---- appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
lengthlengthlengthlength(R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), !!!!....
insereinsereinsereinsere(2,S,F,NF) :(2,S,F,NF) :(2,S,F,NF) :(2,S,F,NF) :---- appendappendappendappend(F,S,NF), (F,S,NF), (F,S,NF), (F,S,NF), !!!!....
insereinsereinsereinsere(3,S,F,NF) :(3,S,F,NF) :(3,S,F,NF) :(3,S,F,NF) :---- appendappendappendappend(S,F,NF), (S,F,NF), (S,F,NF), (S,F,NF), !!!!....
insereinsereinsereinsere(_,S,F,NF) :(_,S,F,NF) :(_,S,F,NF) :(_,S,F,NF) :---- appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R), sortsortsortsort(R,NF), (R,NF), (R,NF), (R,NF), !!!!....
Algoritmo de busca generalizado
Exemplo 8. Algoritmo de busca generalizado (continuação)Exemplo 8. Algoritmo de busca generalizado (continuação)
embaralhaembaralhaembaralhaembaralha(0,F,F) :(0,F,F) :(0,F,F) :(0,F,F) :---- !!!!....
embaralhaembaralhaembaralhaembaralha(L,F,[X|NF]) :(L,F,[X|NF]) :(L,F,[X|NF]) :(L,F,[X|NF]) :----
N N N N isisisis randomrandomrandomrandom(L), (L), (L), (L),
nth0nth0nth0nth0(N,F,X), (N,F,X), (N,F,X), (N,F,X), deletedeletedeletedelete(F,X,R),(F,X,R),(F,X,R),(F,X,R),
M M M M isisisis LLLL----1,1,1,1,
embaralha(M,R,NF), embaralha(M,R,NF), embaralha(M,R,NF), embaralha(M,R,NF), !!!!....
embaralhaembaralhaembaralhaembaralha(0,F,F) :(0,F,F) :(0,F,F) :(0,F,F) :---- !!!!....
embaralhaembaralhaembaralhaembaralha(L,F,[X|NF]) :(L,F,[X|NF]) :(L,F,[X|NF]) :(L,F,[X|NF]) :----
N N N N isisisis randomrandomrandomrandom(L), (L), (L), (L),
nth0nth0nth0nth0(N,F,X), (N,F,X), (N,F,X), (N,F,X), deletedeletedeletedelete(F,X,R),(F,X,R),(F,X,R),(F,X,R),
M M M M isisisis LLLL----1,1,1,1,
embaralha(M,R,NF), embaralha(M,R,NF), embaralha(M,R,NF), embaralha(M,R,NF), !!!!....
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 29
tipotipotipotipo(1,aleatória).(1,aleatória).(1,aleatória).(1,aleatória).
tipotipotipotipo(2,largura).(2,largura).(2,largura).(2,largura).
tipotipotipotipo(3,profundidade).(3,profundidade).(3,profundidade).(3,profundidade).
tipotipotipotipo(4,menor_custo).(4,menor_custo).(4,menor_custo).(4,menor_custo).
tipotipotipotipo(5,melhor_estimativa).(5,melhor_estimativa).(5,melhor_estimativa).(5,melhor_estimativa).
tipotipotipotipo(6,ótima).(6,ótima).(6,ótima).(6,ótima).
tipotipotipotipo(1,aleatória).(1,aleatória).(1,aleatória).(1,aleatória).
tipotipotipotipo(2,largura).(2,largura).(2,largura).(2,largura).
tipotipotipotipo(3,profundidade).(3,profundidade).(3,profundidade).(3,profundidade).
tipotipotipotipo(4,menor_custo).(4,menor_custo).(4,menor_custo).(4,menor_custo).
tipotipotipotipo(5,melhor_estimativa).(5,melhor_estimativa).(5,melhor_estimativa).(5,melhor_estimativa).
tipotipotipotipo(6,ótima).(6,ótima).(6,ótima).(6,ótima).
Algoritmo de busca generalizado
Exercício 10. Teste do algoritmo de busca generalizadoExercício 10. Teste do algoritmo de busca generalizado
Para cada um dos problemas a seguir:
problema das rotas (versão 2)
problema das fichas
faça as consultas abaixo e analise os resultados obtidos:
Para cada um dos problemas a seguir:
problema das rotas (versão 2)
problema das fichas
faça as consultas abaixo e analise os resultados obtidos:
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 30
????---- busca(1).busca(1).busca(1).busca(1).
????---- busca(2).busca(2).busca(2).busca(2).
????---- busca(3).busca(3).busca(3).busca(3).
????---- busca(4).busca(4).busca(4).busca(4).
????---- busca(5).busca(5).busca(5).busca(5).
????---- busca(6).busca(6).busca(6).busca(6).
????---- busca(1).busca(1).busca(1).busca(1).
????---- busca(2).busca(2).busca(2).busca(2).
????---- busca(3).busca(3).busca(3).busca(3).
????---- busca(4).busca(4).busca(4).busca(4).
????---- busca(5).busca(5).busca(5).busca(5).
????---- busca(6).busca(6).busca(6).busca(6).
Representações sucintas
hipótese do mundo fechado
representação sucinta de estados
representação sucinta de ações
busca generalizada
Hipótese do mundo fechado
A hipótese do mundo fechadoA hipótese do mundo fechado
assume que aquilo que não é explicitamente declarado como verdadeiro é falso
permite que os estados do mundo sejam representados de forma mais concisa
os fatos verdadeiros são declarados por meio de fluentes
assume que aquilo que não é explicitamente declarado como verdadeiro é falso
permite que os estados do mundo sejam representados de forma mais concisa
os fatos verdadeiros são declarados por meio de fluentes
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 32
Fluente Significado
clear(X)clear(X)clear(X)clear(X) bloco X está livre
on(X,Y)on(X,Y)on(X,Y)on(X,Y) bloco X está sobre o bloco Y
ontable(X)ontable(X)ontable(X)ontable(X) bloco X está sobre a mesaBA
C
Representação sucinta de estados
Fluente Significado
clear(X)clear(X)clear(X)clear(X) bloco X está livre
C B
A
EstadosEstados
são representados por conjuntos de fluentessão representados por conjuntos de fluentes
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 33
Exemplo 9. Estado inicial e meta do problema de Sussman (Mundo dos Blocos)Exemplo 9. Estado inicial e meta do problema de Sussman (Mundo dos Blocos)
inicialinicialinicialinicial([([([([clear(b)clear(b)clear(b)clear(b),,,,clear(c)clear(c)clear(c)clear(c),,,,on(c,a)on(c,a)on(c,a)on(c,a),,,,ontable(a)ontable(a)ontable(a)ontable(a),,,,ontable(b)ontable(b)ontable(b)ontable(b)]).]).]).]).
metametametameta(S) :(S) :(S) :(S) :---- subset([subset([subset([subset([on(a,b)on(a,b)on(a,b)on(a,b),,,,on(b,c)on(b,c)on(b,c)on(b,c)],S).],S).],S).],S).
inicialinicialinicialinicial([([([([clear(b)clear(b)clear(b)clear(b),,,,clear(c)clear(c)clear(c)clear(c),,,,on(c,a)on(c,a)on(c,a)on(c,a),,,,ontable(a)ontable(a)ontable(a)ontable(a),,,,ontable(b)ontable(b)ontable(b)ontable(b)]).]).]).]).
metametametameta(S) :(S) :(S) :(S) :---- subset([subset([subset([subset([on(a,b)on(a,b)on(a,b)on(a,b),,,,on(b,c)on(b,c)on(b,c)on(b,c)],S).],S).],S).],S).
on(X,Y)on(X,Y)on(X,Y)on(X,Y) bloco X está sobre o bloco Y
ontable(X)ontable(X)ontable(X)ontable(X) bloco X está sobre a mesaCBA
C B
A
Representação sucinta de ações
Exemplo 10. Ações para o mundo dos blocosExemplo 10. Ações para o mundo dos blocos
açãoaçãoaçãoação((((stack(X,Y)stack(X,Y)stack(X,Y)stack(X,Y),E,S,1) :,E,S,1) :,E,S,1) :,E,S,1) :----
member(member(member(member(ontable(X),ontable(X),ontable(X),ontable(X),E),E),E),E),
member(member(member(member(clear(X)clear(X)clear(X)clear(X),E),,E),,E),,E),
member(member(member(member(clear(Y)clear(Y)clear(Y)clear(Y),E), ,E), ,E), ,E), XXXX\\\\=Y=Y=Y=Y,,,,
union(E,[union(E,[union(E,[union(E,[on(X,Y)on(X,Y)on(X,Y)on(X,Y)],S1),],S1),],S1),],S1),
subtract(S1,[subtract(S1,[subtract(S1,[subtract(S1,[ontable(X)ontable(X)ontable(X)ontable(X),,,,clear(Y)clear(Y)clear(Y)clear(Y)],S).],S).],S).],S).
açãoaçãoaçãoação((((unstack(X,Y)unstack(X,Y)unstack(X,Y)unstack(X,Y),E,S,1) :,E,S,1) :,E,S,1) :,E,S,1) :----
açãoaçãoaçãoação((((stack(X,Y)stack(X,Y)stack(X,Y)stack(X,Y),E,S,1) :,E,S,1) :,E,S,1) :,E,S,1) :----
member(member(member(member(ontable(X),ontable(X),ontable(X),ontable(X),E),E),E),E),
member(member(member(member(clear(X)clear(X)clear(X)clear(X),E),,E),,E),,E),
member(member(member(member(clear(Y)clear(Y)clear(Y)clear(Y),E), ,E), ,E), ,E), XXXX\\\\=Y=Y=Y=Y,,,,
union(E,[union(E,[union(E,[union(E,[on(X,Y)on(X,Y)on(X,Y)on(X,Y)],S1),],S1),],S1),],S1),
subtract(S1,[subtract(S1,[subtract(S1,[subtract(S1,[ontable(X)ontable(X)ontable(X)ontable(X),,,,clear(Y)clear(Y)clear(Y)clear(Y)],S).],S).],S).],S).
açãoaçãoaçãoação((((unstack(X,Y)unstack(X,Y)unstack(X,Y)unstack(X,Y),E,S,1) :,E,S,1) :,E,S,1) :,E,S,1) :----
precondições
efeito positivo
efeitos negativos
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 34
açãoaçãoaçãoação((((unstack(X,Y)unstack(X,Y)unstack(X,Y)unstack(X,Y),E,S,1) :,E,S,1) :,E,S,1) :,E,S,1) :----
member(member(member(member(clear(X)clear(X)clear(X)clear(X),E),,E),,E),,E),
member(member(member(member(on(X,Y)on(X,Y)on(X,Y)on(X,Y),E),,E),,E),,E),
union(E,[union(E,[union(E,[union(E,[ontable(X)ontable(X)ontable(X)ontable(X),,,,clear(Y)clear(Y)clear(Y)clear(Y)],S1),],S1),],S1),],S1),
subtract(S1,[subtract(S1,[subtract(S1,[subtract(S1,[on(X,Y)on(X,Y)on(X,Y)on(X,Y)],S).],S).],S).],S).
açãoaçãoaçãoação((((move(X,Y)move(X,Y)move(X,Y)move(X,Y),E,S,1) :,E,S,1) :,E,S,1) :,E,S,1) :----
member(member(member(member(clear(X)clear(X)clear(X)clear(X),E),,E),,E),,E),
member(member(member(member(clear(Y)clear(Y)clear(Y)clear(Y),E), ,E), ,E), ,E), XXXX\\\\=Y=Y=Y=Y,,,,
member(member(member(member(on(X,Z)on(X,Z)on(X,Z)on(X,Z),E), ,E), ,E), ,E), YYYY\\\\=Z=Z=Z=Z,,,,
union(E,[union(E,[union(E,[union(E,[on(X,Y)on(X,Y)on(X,Y)on(X,Y),,,,clear(Z)clear(Z)clear(Z)clear(Z)],S1),],S1),],S1),],S1),
subtract(S1,[subtract(S1,[subtract(S1,[subtract(S1,[on(X,Z)on(X,Z)on(X,Z)on(X,Z),,,,clear(Y)clear(Y)clear(Y)clear(Y)],S).],S).],S).],S).
açãoaçãoaçãoação((((unstack(X,Y)unstack(X,Y)unstack(X,Y)unstack(X,Y),E,S,1) :,E,S,1) :,E,S,1) :,E,S,1) :----
member(member(member(member(clear(X)clear(X)clear(X)clear(X),E),,E),,E),,E),
member(member(member(member(on(X,Y)on(X,Y)on(X,Y)on(X,Y),E),,E),,E),,E),
union(E,[union(E,[union(E,[union(E,[ontable(X)ontable(X)ontable(X)ontable(X),,,,clear(Y)clear(Y)clear(Y)clear(Y)],S1),],S1),],S1),],S1),
subtract(S1,[subtract(S1,[subtract(S1,[subtract(S1,[on(X,Y)on(X,Y)on(X,Y)on(X,Y)],S).],S).],S).],S).
açãoaçãoaçãoação((((move(X,Y)move(X,Y)move(X,Y)move(X,Y),E,S,1) :,E,S,1) :,E,S,1) :,E,S,1) :----
member(member(member(member(clear(X)clear(X)clear(X)clear(X),E),,E),,E),,E),
member(member(member(member(clear(Y)clear(Y)clear(Y)clear(Y),E), ,E), ,E), ,E), XXXX\\\\=Y=Y=Y=Y,,,,
member(member(member(member(on(X,Z)on(X,Z)on(X,Z)on(X,Z),E), ,E), ,E), ,E), YYYY\\\\=Z=Z=Z=Z,,,,
union(E,[union(E,[union(E,[union(E,[on(X,Y)on(X,Y)on(X,Y)on(X,Y),,,,clear(Z)clear(Z)clear(Z)clear(Z)],S1),],S1),],S1),],S1),
subtract(S1,[subtract(S1,[subtract(S1,[subtract(S1,[on(X,Z)on(X,Z)on(X,Z)on(X,Z),,,,clear(Y)clear(Y)clear(Y)clear(Y)],S).],S).],S).],S).
Busca com representações sucintas
Exemplo 11. Algoritmo de busca com representações sucintasExemplo 11. Algoritmo de busca com representações sucintas
buscabuscabuscabusca((((TTTT) :) :) :) :----inicial(E),inicial(E),inicial(E),inicial(E),busca(busca(busca(busca(TTTT,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),tipo(tipo(tipo(tipo(TTTT,N),,N),,N),,N),formatformatformatformat('('('('~nTipo~nTipo~nTipo~nTipo.: ~w',[N]),.: ~w',[N]),.: ~w',[N]),.: ~w',[N]),formatformatformatformat('('('('~nPlano~nPlano~nPlano~nPlano: ~w',[P]),: ~w',[P]),: ~w',[P]),: ~w',[P]),formatformatformatformat('('('('~nCusto~nCusto~nCusto~nCusto: ~: ~: ~: ~w~n~nw~n~nw~n~nw~n~n',[G]).',[G]).',[G]).',[G]).
buscabuscabuscabusca((((TTTT) :) :) :) :----inicial(E),inicial(E),inicial(E),inicial(E),busca(busca(busca(busca(TTTT,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),,[_:_:0:E:[]],[],P:G),tipo(tipo(tipo(tipo(TTTT,N),,N),,N),,N),formatformatformatformat('('('('~nTipo~nTipo~nTipo~nTipo.: ~w',[N]),.: ~w',[N]),.: ~w',[N]),.: ~w',[N]),formatformatformatformat('('('('~nPlano~nPlano~nPlano~nPlano: ~w',[P]),: ~w',[P]),: ~w',[P]),: ~w',[P]),formatformatformatformat('('('('~nCusto~nCusto~nCusto~nCusto: ~: ~: ~: ~w~n~nw~n~nw~n~nw~n~n',[G]).',[G]).',[G]).',[G]).
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 35
formatformatformatformat('('('('~nCusto~nCusto~nCusto~nCusto: ~: ~: ~: ~w~n~nw~n~nw~n~nw~n~n',[G]).',[G]).',[G]).',[G]).
buscabuscabuscabusca((((____,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:C|_C|_C|_C|_],_,P:G) :],_,P:G) :],_,P:G) :],_,P:G) :----meta(E), !,meta(E), !,meta(E), !,meta(E), !,reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
buscabuscabuscabusca((((TTTT,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:C|FC|FC|FC|F],],],],VVVV,P) :,P) :,P) :,P) :----sucessores(sucessores(sucessores(sucessores(TTTT,G:E:C,V,S),,G:E:C,V,S),,G:E:C,V,S),,G:E:C,V,S),insere(insere(insere(insere(TTTT,S,F,NF),,S,F,NF),,S,F,NF),,S,F,NF),adicionaadicionaadicionaadiciona(E,V,NV),(E,V,NV),(E,V,NV),(E,V,NV),busca(busca(busca(busca(TTTT,NF,NV,P).,NF,NV,P).,NF,NV,P).,NF,NV,P).
formatformatformatformat('('('('~nCusto~nCusto~nCusto~nCusto: ~: ~: ~: ~w~n~nw~n~nw~n~nw~n~n',[G]).',[G]).',[G]).',[G]).
buscabuscabuscabusca((((____,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:C|_C|_C|_C|_],_,P:G) :],_,P:G) :],_,P:G) :],_,P:G) :----meta(E), !,meta(E), !,meta(E), !,meta(E), !,reversereversereversereverse(C,P).(C,P).(C,P).(C,P).
buscabuscabuscabusca((((TTTT,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:,[_:_:G:E:C|FC|FC|FC|F],],],],VVVV,P) :,P) :,P) :,P) :----sucessores(sucessores(sucessores(sucessores(TTTT,G:E:C,V,S),,G:E:C,V,S),,G:E:C,V,S),,G:E:C,V,S),insere(insere(insere(insere(TTTT,S,F,NF),,S,F,NF),,S,F,NF),,S,F,NF),adicionaadicionaadicionaadiciona(E,V,NV),(E,V,NV),(E,V,NV),(E,V,NV),busca(busca(busca(busca(TTTT,NF,NV,P).,NF,NV,P).,NF,NV,P).,NF,NV,P).
Busca com representações sucintas
Exemplo 11. Algoritmo de busca com representações sucintas (continuação)Exemplo 11. Algoritmo de busca com representações sucintas (continuação)
sucessoressucessoressucessoressucessores((((TTTT,G1:E:C,V,R) :,G1:E:C,V,R) :,G1:E:C,V,R) :,G1:E:C,V,R) :----
findallfindallfindallfindall(F:H:G:S:[(F:H:G:S:[(F:H:G:S:[(F:H:G:S:[A|CA|CA|CA|C],],],],
(ação(A,E,S,G2), (ação(A,E,S,G2), (ação(A,E,S,G2), (ação(A,E,S,G2),
notnotnotnot((((pertencepertencepertencepertence(S,V)), (S,V)), (S,V)), (S,V)),
h(S,H), G h(S,H), G h(S,H), G h(S,H), G isisisis G1+G2, G1+G2, G1+G2, G1+G2,
(T(T(T(T====4 4 4 4 ---->>>> F F F F isisisis GGGG
sucessoressucessoressucessoressucessores((((TTTT,G1:E:C,V,R) :,G1:E:C,V,R) :,G1:E:C,V,R) :,G1:E:C,V,R) :----
findallfindallfindallfindall(F:H:G:S:[(F:H:G:S:[(F:H:G:S:[(F:H:G:S:[A|CA|CA|CA|C],],],],
(ação(A,E,S,G2), (ação(A,E,S,G2), (ação(A,E,S,G2), (ação(A,E,S,G2),
notnotnotnot((((pertencepertencepertencepertence(S,V)), (S,V)), (S,V)), (S,V)),
h(S,H), G h(S,H), G h(S,H), G h(S,H), G isisisis G1+G2, G1+G2, G1+G2, G1+G2,
(T(T(T(T====4 4 4 4 ---->>>> F F F F isisisis GGGG
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 36
;T;T;T;T====5 5 5 5 ---->>>> F F F F isisisis HHHH
;T;T;T;T====6 6 6 6 ---->>>> F F F F isisisis G+HG+HG+HG+H
; F ; F ; F ; F isisisis 0)),R).0)),R).0)),R).0)),R).
insereinsereinsereinsere(1,S,F,NF) :(1,S,F,NF) :(1,S,F,NF) :(1,S,F,NF) :---- appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
lengthlengthlengthlength(R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), !!!!....
insereinsereinsereinsere(2,S,F,NF) :(2,S,F,NF) :(2,S,F,NF) :(2,S,F,NF) :---- appendappendappendappend(F,S,NF), (F,S,NF), (F,S,NF), (F,S,NF), !!!!....
insereinsereinsereinsere(3,S,F,NF) :(3,S,F,NF) :(3,S,F,NF) :(3,S,F,NF) :---- appendappendappendappend(S,F,NF), (S,F,NF), (S,F,NF), (S,F,NF), !!!!....
insereinsereinsereinsere(_,S,F,NF) :(_,S,F,NF) :(_,S,F,NF) :(_,S,F,NF) :---- appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R), sortsortsortsort(R,NF), (R,NF), (R,NF), (R,NF), !!!!....
;T;T;T;T====5 5 5 5 ---->>>> F F F F isisisis HHHH
;T;T;T;T====6 6 6 6 ---->>>> F F F F isisisis G+HG+HG+HG+H
; F ; F ; F ; F isisisis 0)),R).0)),R).0)),R).0)),R).
insereinsereinsereinsere(1,S,F,NF) :(1,S,F,NF) :(1,S,F,NF) :(1,S,F,NF) :---- appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R),
lengthlengthlengthlength(R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), (R,L), embaralha(L,R,NF), !!!!....
insereinsereinsereinsere(2,S,F,NF) :(2,S,F,NF) :(2,S,F,NF) :(2,S,F,NF) :---- appendappendappendappend(F,S,NF), (F,S,NF), (F,S,NF), (F,S,NF), !!!!....
insereinsereinsereinsere(3,S,F,NF) :(3,S,F,NF) :(3,S,F,NF) :(3,S,F,NF) :---- appendappendappendappend(S,F,NF), (S,F,NF), (S,F,NF), (S,F,NF), !!!!....
insereinsereinsereinsere(_,S,F,NF) :(_,S,F,NF) :(_,S,F,NF) :(_,S,F,NF) :---- appendappendappendappend(S,F,R), (S,F,R), (S,F,R), (S,F,R), sortsortsortsort(R,NF), (R,NF), (R,NF), (R,NF), !!!!....
Busca com representações sucintas
Exemplo 11. Algoritmo de busca com representações sucintas (continuação)Exemplo 11. Algoritmo de busca com representações sucintas (continuação)
embaralhaembaralhaembaralhaembaralha(0,F,F) :(0,F,F) :(0,F,F) :(0,F,F) :---- !!!!....embaralhaembaralhaembaralhaembaralha(L,F,[(L,F,[(L,F,[(L,F,[X|NFX|NFX|NFX|NF]) :]) :]) :]) :----
N N N N isisisis randomrandomrandomrandom(L), (L), (L), (L), nth0nth0nth0nth0(N,F,X), (N,F,X), (N,F,X), (N,F,X), deletedeletedeletedelete(F,X,R),(F,X,R),(F,X,R),(F,X,R),M M M M isisisis LLLL----1,1,1,1,embaralha(M,R,NF), embaralha(M,R,NF), embaralha(M,R,NF), embaralha(M,R,NF), !!!!....
pertencepertencepertencepertence(X,S) :(X,S) :(X,S) :(X,S) :---- membermembermembermember(Y,S), (Y,S), (Y,S), (Y,S), subsetsubsetsubsetsubset(X,Y), !.(X,Y), !.(X,Y), !.(X,Y), !.
embaralhaembaralhaembaralhaembaralha(0,F,F) :(0,F,F) :(0,F,F) :(0,F,F) :---- !!!!....embaralhaembaralhaembaralhaembaralha(L,F,[(L,F,[(L,F,[(L,F,[X|NFX|NFX|NFX|NF]) :]) :]) :]) :----
N N N N isisisis randomrandomrandomrandom(L), (L), (L), (L), nth0nth0nth0nth0(N,F,X), (N,F,X), (N,F,X), (N,F,X), deletedeletedeletedelete(F,X,R),(F,X,R),(F,X,R),(F,X,R),M M M M isisisis LLLL----1,1,1,1,embaralha(M,R,NF), embaralha(M,R,NF), embaralha(M,R,NF), embaralha(M,R,NF), !!!!....
pertencepertencepertencepertence(X,S) :(X,S) :(X,S) :(X,S) :---- membermembermembermember(Y,S), (Y,S), (Y,S), (Y,S), subsetsubsetsubsetsubset(X,Y), !.(X,Y), !.(X,Y), !.(X,Y), !.
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 37
pertencepertencepertencepertence(X,S) :(X,S) :(X,S) :(X,S) :---- membermembermembermember(Y,S), (Y,S), (Y,S), (Y,S), subsetsubsetsubsetsubset(X,Y), !.(X,Y), !.(X,Y), !.(X,Y), !.
adicionaadicionaadicionaadiciona(X,A,A) :(X,A,A) :(X,A,A) :(X,A,A) :---- pertence(X,A), !.pertence(X,A), !.pertence(X,A), !.pertence(X,A), !.adicionaadicionaadicionaadiciona(X,A,[(X,A,[(X,A,[(X,A,[X|AX|AX|AX|A]).]).]).]).
tipotipotipotipo(1,aleatória).(1,aleatória).(1,aleatória).(1,aleatória).tipotipotipotipo(2,largura).(2,largura).(2,largura).(2,largura).tipotipotipotipo(3,profundidade).(3,profundidade).(3,profundidade).(3,profundidade).tipotipotipotipo(4,(4,(4,(4,menor_customenor_customenor_customenor_custo).).).).tipotipotipotipo(5,(5,(5,(5,melhor_estimativamelhor_estimativamelhor_estimativamelhor_estimativa).).).).tipotipotipotipo(6,ótima).(6,ótima).(6,ótima).(6,ótima).
pertencepertencepertencepertence(X,S) :(X,S) :(X,S) :(X,S) :---- membermembermembermember(Y,S), (Y,S), (Y,S), (Y,S), subsetsubsetsubsetsubset(X,Y), !.(X,Y), !.(X,Y), !.(X,Y), !.
adicionaadicionaadicionaadiciona(X,A,A) :(X,A,A) :(X,A,A) :(X,A,A) :---- pertence(X,A), !.pertence(X,A), !.pertence(X,A), !.pertence(X,A), !.adicionaadicionaadicionaadiciona(X,A,[(X,A,[(X,A,[(X,A,[X|AX|AX|AX|A]).]).]).]).
tipotipotipotipo(1,aleatória).(1,aleatória).(1,aleatória).(1,aleatória).tipotipotipotipo(2,largura).(2,largura).(2,largura).(2,largura).tipotipotipotipo(3,profundidade).(3,profundidade).(3,profundidade).(3,profundidade).tipotipotipotipo(4,(4,(4,(4,menor_customenor_customenor_customenor_custo).).).).tipotipotipotipo(5,(5,(5,(5,melhor_estimativamelhor_estimativamelhor_estimativamelhor_estimativa).).).).tipotipotipotipo(6,ótima).(6,ótima).(6,ótima).(6,ótima).
Exercício 12. Outros problemas no mundo dos blocosExercício 12. Outros problemas no mundo dos blocos
Especifique e encontre soluções para os problemas a seguir:Especifique e encontre soluções para os problemas a seguir:
Busca com representações sucintas
Exercício 11. Problema de SussmanExercício 11. Problema de Sussman
Use o algoritmo de busca com representações sucintas para encontrar uma solução
para o problema de Sussman especificado no Exemplo 8. Defina h(_,0)h(_,0)h(_,0)h(_,0).
Use o algoritmo de busca com representações sucintas para encontrar uma solução
para o problema de Sussman especificado no Exemplo 8. Defina h(_,0)h(_,0)h(_,0)h(_,0).
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 38
Especifique e encontre soluções para os problemas a seguir:
Usando time/1time/1time/1time/1, compare os tempos de busca em largura e profundidade.
Especifique e encontre soluções para os problemas a seguir:
Usando time/1time/1time/1time/1, compare os tempos de busca em largura e profundidade.
CDA
B C
BC
D A
D
A C
B
D
A
B
Busca com representações sucintas
Exercício 13. Mundo do aspirador simplificadoExercício 13. Mundo do aspirador simplificado
Especifique as ações para o mundo do aspirador simplificado, usando o fluente em(X)em(X)em(X)em(X)
para denotar que o aspirador está na sala XXXX e o fluente limpa(X)limpa(X)limpa(X)limpa(X) para denotar que a
sala XXXX está limpa. Em seguida, teste sua especificação para encontrar uma solução
para o problema em que:
Estado inicial = aspirador está na sala 1 e as duas salas estão sujas
Estado meta = as duas salas estão limpas e não importa onde esteja o aspirador
Especifique as ações para o mundo do aspirador simplificado, usando o fluente em(X)em(X)em(X)em(X)
para denotar que o aspirador está na sala XXXX e o fluente limpa(X)limpa(X)limpa(X)limpa(X) para denotar que a
sala XXXX está limpa. Em seguida, teste sua especificação para encontrar uma solução
para o problema em que:
Estado inicial = aspirador está na sala 1 e as duas salas estão sujas
Estado meta = as duas salas estão limpas e não importa onde esteja o aspirador
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 39
Estado meta = as duas salas estão limpas e não importa onde esteja o aspirador
Heurística nula: h(_,0)h(_,0)h(_,0)h(_,0).
Estado meta = as duas salas estão limpas e não importa onde esteja o aspirador
Heurística nula: h(_,0)h(_,0)h(_,0)h(_,0).
Busca com representações sucintas
Exercício 14. Quebra-cabeça de oito peças (inicial e meta)Exercício 14. Quebra-cabeça de oito peças (inicial e meta)
inicialinicialinicialinicial([p(([p(([p(([p(2222,0,0),,0,0),,0,0),,0,0),p(p(p(p(5555,0,1),,0,1),,0,1),,0,1),p(p(p(p(6666,0,2),,0,2),,0,2),,0,2),p(p(p(p(1111,1,0),,1,0),,1,0),,1,0),p(p(p(p(----,1,1),,1,1),,1,1),,1,1),p(p(p(p(3333,1,2),,1,2),,1,2),,1,2),p(p(p(p(8888,2,0),,2,0),,2,0),,2,0),
inicialinicialinicialinicial([p(([p(([p(([p(2222,0,0),,0,0),,0,0),,0,0),p(p(p(p(5555,0,1),,0,1),,0,1),,0,1),p(p(p(p(6666,0,2),,0,2),,0,2),,0,2),p(p(p(p(1111,1,0),,1,0),,1,0),,1,0),p(p(p(p(----,1,1),,1,1),,1,1),,1,1),p(p(p(p(3333,1,2),,1,2),,1,2),,1,2),p(p(p(p(8888,2,0),,2,0),,2,0),,2,0),
2 5 6
1 3
8 4 7
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 40
p(p(p(p(4444,2,1),,2,1),,2,1),,2,1),p(p(p(p(7777,2,2)]).,2,2)]).,2,2)]).,2,2)]).
metametametameta(S) :(S) :(S) :(S) :---- subsetsubsetsubsetsubset([p(([p(([p(([p(1111,0,0),,0,0),,0,0),,0,0),p(p(p(p(2222,0,1),,0,1),,0,1),,0,1),p(p(p(p(3333,0,2),,0,2),,0,2),,0,2),p(p(p(p(8888,1,0),,1,0),,1,0),,1,0),p(p(p(p(----,1,1),,1,1),,1,1),,1,1),p(p(p(p(4444,1,2),,1,2),,1,2),,1,2),p(p(p(p(7777,2,0),,2,0),,2,0),,2,0),p(p(p(p(6666,2,1),,2,1),,2,1),,2,1),p(p(p(p(5555,2,2)],S).,2,2)],S).,2,2)],S).,2,2)],S).
p(p(p(p(4444,2,1),,2,1),,2,1),,2,1),p(p(p(p(7777,2,2)]).,2,2)]).,2,2)]).,2,2)]).
metametametameta(S) :(S) :(S) :(S) :---- subsetsubsetsubsetsubset([p(([p(([p(([p(1111,0,0),,0,0),,0,0),,0,0),p(p(p(p(2222,0,1),,0,1),,0,1),,0,1),p(p(p(p(3333,0,2),,0,2),,0,2),,0,2),p(p(p(p(8888,1,0),,1,0),,1,0),,1,0),p(p(p(p(----,1,1),,1,1),,1,1),,1,1),p(p(p(p(4444,1,2),,1,2),,1,2),,1,2),p(p(p(p(7777,2,0),,2,0),,2,0),,2,0),p(p(p(p(6666,2,1),,2,1),,2,1),,2,1),p(p(p(p(5555,2,2)],S).,2,2)],S).,2,2)],S).,2,2)],S).
1 2 3
8 4
7 6 5
Busca com representações sucintas
Exercício 14. Quebra-cabeça de oito peças (ações)Exercício 14. Quebra-cabeça de oito peças (ações)
açãoaçãoaçãoação(A,E,S,1) :(A,E,S,1) :(A,E,S,1) :(A,E,S,1) :----
membermembermembermember(p((p((p((p(----,X1,Y1),E),,X1,Y1),E),,X1,Y1),E),,X1,Y1),E),
novaposnovaposnovaposnovapos(A,X1,Y1,X2,Y2),(A,X1,Y1,X2,Y2),(A,X1,Y1,X2,Y2),(A,X1,Y1,X2,Y2),
subtractsubtractsubtractsubtract(E,[p((E,[p((E,[p((E,[p(----,X1,Y1),p(N,X2,Y2)],S1),,X1,Y1),p(N,X2,Y2)],S1),,X1,Y1),p(N,X2,Y2)],S1),,X1,Y1),p(N,X2,Y2)],S1),
unionunionunionunion([p(([p(([p(([p(----,X2,Y2),p(N,X1,Y1)],S1,S).,X2,Y2),p(N,X1,Y1)],S1,S).,X2,Y2),p(N,X1,Y1)],S1,S).,X2,Y2),p(N,X1,Y1)],S1,S).
novaposnovaposnovaposnovapos((((upupupup,X1,Y,X2,Y) :,X1,Y,X2,Y) :,X1,Y,X2,Y) :,X1,Y,X2,Y) :---- X1>0, X2 X1>0, X2 X1>0, X2 X1>0, X2 isisisis X1X1X1X1----1.1.1.1.
novaposnovaposnovaposnovapos((((ltltltlt,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :---- Y1>0, Y2 Y1>0, Y2 Y1>0, Y2 Y1>0, Y2 isisisis Y1Y1Y1Y1----1.1.1.1.
açãoaçãoaçãoação(A,E,S,1) :(A,E,S,1) :(A,E,S,1) :(A,E,S,1) :----
membermembermembermember(p((p((p((p(----,X1,Y1),E),,X1,Y1),E),,X1,Y1),E),,X1,Y1),E),
novaposnovaposnovaposnovapos(A,X1,Y1,X2,Y2),(A,X1,Y1,X2,Y2),(A,X1,Y1,X2,Y2),(A,X1,Y1,X2,Y2),
subtractsubtractsubtractsubtract(E,[p((E,[p((E,[p((E,[p(----,X1,Y1),p(N,X2,Y2)],S1),,X1,Y1),p(N,X2,Y2)],S1),,X1,Y1),p(N,X2,Y2)],S1),,X1,Y1),p(N,X2,Y2)],S1),
unionunionunionunion([p(([p(([p(([p(----,X2,Y2),p(N,X1,Y1)],S1,S).,X2,Y2),p(N,X1,Y1)],S1,S).,X2,Y2),p(N,X1,Y1)],S1,S).,X2,Y2),p(N,X1,Y1)],S1,S).
novaposnovaposnovaposnovapos((((upupupup,X1,Y,X2,Y) :,X1,Y,X2,Y) :,X1,Y,X2,Y) :,X1,Y,X2,Y) :---- X1>0, X2 X1>0, X2 X1>0, X2 X1>0, X2 isisisis X1X1X1X1----1.1.1.1.
novaposnovaposnovaposnovapos((((ltltltlt,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :---- Y1>0, Y2 Y1>0, Y2 Y1>0, Y2 Y1>0, Y2 isisisis Y1Y1Y1Y1----1.1.1.1.
1 3 4
8 2 5
7 6
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 41
novaposnovaposnovaposnovapos((((ltltltlt,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :---- Y1>0, Y2 Y1>0, Y2 Y1>0, Y2 Y1>0, Y2 isisisis Y1Y1Y1Y1----1.1.1.1.
novaposnovaposnovaposnovapos((((rtrtrtrt,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :---- Y1<2, Y2 Y1<2, Y2 Y1<2, Y2 Y1<2, Y2 isisisis Y1+1.Y1+1.Y1+1.Y1+1.
novaposnovaposnovaposnovapos((((dndndndn,X1,Y,X2,Y) :,X1,Y,X2,Y) :,X1,Y,X2,Y) :,X1,Y,X2,Y) :---- X1<2, X2 X1<2, X2 X1<2, X2 X1<2, X2 isisisis X1+1.X1+1.X1+1.X1+1.
hhhh([],0) :([],0) :([],0) :([],0) :---- !!!!....
hhhh([p(([p(([p(([p(----,_,_)|R],H) :,_,_)|R],H) :,_,_)|R],H) :,_,_)|R],H) :---- h(R,H), h(R,H), h(R,H), h(R,H), !!!!....
hhhh([p(N,X,Y)|R],H) :([p(N,X,Y)|R],H) :([p(N,X,Y)|R],H) :([p(N,X,Y)|R],H) :----
meta(M), meta(M), meta(M), meta(M), membermembermembermember(p(N,X1,Y1),M),(p(N,X1,Y1),M),(p(N,X1,Y1),M),(p(N,X1,Y1),M),
h(R,H1), H h(R,H1), H h(R,H1), H h(R,H1), H isisisis H1+H1+H1+H1+absabsabsabs(X1(X1(X1(X1----X)+X)+X)+X)+absabsabsabs(Y1(Y1(Y1(Y1----Y), Y), Y), Y), !!!!....
novaposnovaposnovaposnovapos((((ltltltlt,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :---- Y1>0, Y2 Y1>0, Y2 Y1>0, Y2 Y1>0, Y2 isisisis Y1Y1Y1Y1----1.1.1.1.
novaposnovaposnovaposnovapos((((rtrtrtrt,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :,X,Y1,X,Y2) :---- Y1<2, Y2 Y1<2, Y2 Y1<2, Y2 Y1<2, Y2 isisisis Y1+1.Y1+1.Y1+1.Y1+1.
novaposnovaposnovaposnovapos((((dndndndn,X1,Y,X2,Y) :,X1,Y,X2,Y) :,X1,Y,X2,Y) :,X1,Y,X2,Y) :---- X1<2, X2 X1<2, X2 X1<2, X2 X1<2, X2 isisisis X1+1.X1+1.X1+1.X1+1.
hhhh([],0) :([],0) :([],0) :([],0) :---- !!!!....
hhhh([p(([p(([p(([p(----,_,_)|R],H) :,_,_)|R],H) :,_,_)|R],H) :,_,_)|R],H) :---- h(R,H), h(R,H), h(R,H), h(R,H), !!!!....
hhhh([p(N,X,Y)|R],H) :([p(N,X,Y)|R],H) :([p(N,X,Y)|R],H) :([p(N,X,Y)|R],H) :----
meta(M), meta(M), meta(M), meta(M), membermembermembermember(p(N,X1,Y1),M),(p(N,X1,Y1),M),(p(N,X1,Y1),M),(p(N,X1,Y1),M),
h(R,H1), H h(R,H1), H h(R,H1), H h(R,H1), H isisisis H1+H1+H1+H1+absabsabsabs(X1(X1(X1(X1----X)+X)+X)+X)+absabsabsabs(Y1(Y1(Y1(Y1----Y), Y), Y), Y), !!!!....
1 2 3
8 4
7 6 5
Use busca com representações sucintas para resolver este problema!
Busca com representações sucintas
Exercício 15. Quebra-cabeça de oito peças: outro problemaExercício 15. Quebra-cabeça de oito peças: outro problema
Especifique e resolva o problema a seguir usando busca heurística.Especifique e resolva o problema a seguir usando busca heurística.
1 4 7 1 2 3
Prof. Dr. Silvio do Lago Pereira – DTI / FATEC-SP 42
1 4 7
6 3 5
2 8
1 2 3
8 4
7 6 5