Busca no espaço de estados (parte II) - IME-USPslago/pl-11.pdf · Para que o custo de uma ação...

43
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

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*)

Busca informada

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

Fim