Procura cega

4
1 Descrição do trabalho efetuado para resolver o e-fólio A A matéria do e-fólio A é a Procura cega. Existem dois métodos de procura cega: Procura em Largura Primeiro (BFS – Breadth First Search) A Procura de Custo Uniforme (UCS – uniform-cost search) é igual, só que expande primeiro o nó com menor custo. Procura em Profundidade Primeiro (DFS – Depth-First Search) A Procura em Profundidade Limitada (DLS – Depth-Limited Search) é igual, apenas limita a profundidade da procura. A Procura em Profundidade Iterativa ou Aprofundamento Progressivo (IDDFS – Iterative Deepening Depth-First Search) é uma melhoria em relação à anterior, temos apenas de fazer variar o limite do aprofundamento entre 0 e infinito. Sendo os Algoritmos: Função ProcuraLarguraPrimeiro (problema, InsereFila): solução ou falha I_nós ← Fazfila ( EstadoInicial(problema) ) Repete Se FilaVazia(I_nós) Então Devolve falha Fim_de_Se nó ← RetiraFila(I_nós) Se TesteObjectivo(nó) Então Devolve Senão InsererFila(I_nós, Expansão(nó, Operadores(problema))) Fim_de_Se Fim_de_Repete Fim_de_Função Função ProcuraProfundidadePrimeiro (problema, InserePilha): solução ou falha I_nós ← FazPilha ( EstadoInicial(problema) ) Repete Se PilhaVazia(I_nós) Então Devolve falha Fim_de_Se nó ← RetiraPilha(I_nós) Se TesteObjectivo(nó) Então Devolve Senão InsererPilha(I_nós, Expansão(nó, Operadores(problema))) Fim_de_Se Fim_de_Repete Fim_de_Função

description

Inteligencia Artificial - Procura cega

Transcript of Procura cega

Page 1: Procura cega

1

Descrição do trabalho efetuado para resolver o e-fólio A

A matéria do e-fólio A é a Procura cega.

Existem dois métodos de procura cega:

Procura em Largura Primeiro (BFS – Breadth First Search)

A Procura de Custo Uniforme (UCS – uniform-cost search) é igual, só que expande primeiro o

nó com menor custo.

Procura em Profundidade Primeiro (DFS – Depth-First Search)

A Procura em Profundidade Limitada (DLS – Depth-Limited Search) é igual, apenas limita a

profundidade da procura.

A Procura em Profundidade Iterativa ou Aprofundamento Progressivo (IDDFS – Iterative

Deepening Depth-First Search) é uma melhoria em relação à anterior, temos apenas de fazer

variar o limite do aprofundamento entre 0 e infinito.

Sendo os Algoritmos:

Função ProcuraLarguraPrimeiro (problema, InsereFila): solução ou falha

I_nós ← Fazfila ( EstadoInicial(problema) )

Repete

Se FilaVazia(I_nós) Então

Devolve falha

Fim_de_Se

nó ← RetiraFila(I_nós)

Se TesteObjectivo(nó) Então

Devolve nó

Senão

InsererFila(I_nós, Expansão(nó, Operadores(problema)))

Fim_de_Se

Fim_de_Repete

Fim_de_Função

Função ProcuraProfundidadePrimeiro (problema, InserePilha): solução ou falha

I_nós ← FazPilha ( EstadoInicial(problema) )

Repete

Se PilhaVazia(I_nós) Então

Devolve falha

Fim_de_Se

nó ← RetiraPilha(I_nós)

Se TesteObjectivo(nó) Então

Devolve nó

Senão

InsererPilha(I_nós, Expansão(nó, Operadores(problema)))

Fim_de_Se

Fim_de_Repete

Fim_de_Função

Page 2: Procura cega

2

Verifica-se que ambos retornam (solução ou falha), i.e., uma variável booleana (true ou false). A

única diferença que se nota entre eles é a utilização de uma fila ou de uma pilha.

Sendo assim, só temos que saber qual é a diferença entre fila e pilha.

A fila baseia-se no método FIFO-First In First Out. A pilha baseia-se no método LIFO- Last In First Out.

Com se faz a procura de uma solução (GOAL) de um problema?

1. O problema tem diversos estados e a solução é um desses estados.

2. Para resolver um problema, construímos uma estrutura em árvore e associamos a essa

estrutura os estados possíveis do problema, apenas para facilitar a procura.

Árvore Estados do problema

Associação: 0:E0, 1:E1, 2:E2, etc.

Para compreender e fixar melhor a matéria dada, resolvi melhorar o programa apresentado no e-

fólio A de forma a integrar a parte mais significativa da matéria.

Para resolver o sokoban, o programa (problema do e-fólio A) tem uma classe com o nome

Tfila_pilha, é esta classe que tem implementada a diferença existente entre fila e pilha.

Inicialmente o programa executa o procedimento genérico de procura, quer em BFS ou DFS, que é

expandir o nó 0 para dar origem aos 4 novos nós, correspondentes aos 4 estados possíveis, definidos

na resolução do puzzle sokoban (movimento da peça @ para N-Norte, S-Sul, E-Este e W-Oeste).

Depois vai usar a fila ou pilha, conforme faz procura BFS ou DFS.

Tanto a fila como a pilha são construídas com arrays onde se insere elementos na última posição dos

arrays. A única diferença está na obtenção do elemento que se retira do array, correspondente ao

nó que se deseja expandir. Na fila é o primeiro, na pilha é o ultimo (normalmente retira-se o topo da

pilha).

A sequência efetuada no programa é a seguinte (neste exemplo considerou-se que expande apenas

os nós apresentados na figura seguinte):

01

11

21

31

41

51

E0

E1

E2

71

61

E3 E4

E5 E6

E7

Page 3: Procura cega

3

Procura em Largura Primeiro (BFS – Breadth First Search)

Árvore Estados do problema

Sequência Fila Sai da Fila Expansão

1º [0] 0 1, 2

2º [1, 2] 1 3, 4

3º [2, 3, 4] 2 5, 6, 7

4º [3, 4, 5, 6, 7] 3 Etc.

Procura em Profundidade Primeiro (DFS – Depth-First Search)

Árvore Estados do problema

Sequência Pilha Sai da Pilha Expansão

1º [0] 0 1, 2

2º [1, 2] 2 3, 4

3º [1, 3, 4] 4 5, 6, 7

4º [1, 3, 5, 6,7] 7 Etc.

Nota: Em relação à fila, aqui apenas se trocou a posição do nó 1 pelo 2, do 4 pelo 3, etc., não

interessa nada trata-se apenas de uma questão de atribuição de índice.

Para a implementar a estrutura em árvore, o programa tem a classe Tprocura com o algoritmo de

procura para BFS/DFS e a classe Tfila_pilha. Os algoritmos BFS e DFS são praticamente iguais, por

isso tem apenas um, a diferença faz-se na classe Tfila_pilha.

01

11

21

31

41

51

E0

E1

E2

71

61

E3 E4

E5 E6

E7

Ordem

01

21

11

4 3

E0

E2

E4

E3

E1

E5 E6

E7 7 6 5

O

r

d

e

m

Page 4: Procura cega

4

Para resolver o puzzle sokoban tem a classe Tnode_problem que serve para guardar os estados do

problema, associados aos nós (é um contentor). Tem a classe Tprolem que resolve o movimento das

peças, as expansões, e elemina os estados repetidos.