Você está na página 1de 34

Pesquisa ou busca não-

informada
Msc. Eng. Solander Patrício Lopes Agostinho
Problemática

• Entrada: Grafos
• Nós: Situação do problema
• Arestas: Movimentos permitidos, ações ou passos para chegar a solução
• Solução: Encontrar um caminho no Grafo que atinge o destino
• Arestas Sem custo
• Solução: Caminho mínimo
• Arestas com Custo
• Solução: Custo mínimo do caminho
Atingindo o resultado (Quebra cabeça)
Problema do quebra cabeça

• Estados: posições inteiras dos quadrados (ignorar posições


intermediárias)
• Operadores: mover números para esquerda, direita, acima,
embaixo
• Estado Final: = estado fornecido (único)
• Custo do caminho: 1 por movimento
Problema das quatro rainhas...???
Problema das quatro rainhas...???

Estado ???
Operador ???
Estado final ???
Custo do caminho
??
Problema das quatro rainhas...

• Estado: qualquer arranjo de 0 a 4 rainhas no tabuleiro


• Operador: adicionar uma rainha a qualquer quadrado
• Estado Final: 4 rainhas no tabuleiro, sem ataque (múltiplos
estados)
• Custo do caminho: zero (apenas o estado final é interessante)
Sequência de letras

C A

A B

B C
Missionários e canibais
Prolog

• Programing In Logic

• Linguagem de programação utilizada para resolver problemas


envolvendo objetos e relações entre objetos

• Conceitos básicos: fatos, perguntas, variáveis, conjunções e regras


Programação em lógica

• Programação Procedural (procedimental):


• Programa = Algoritmo + Estruturas de Dados
• Programação Lógica
• lgoritmo = Lógica + Controle
• Programa = Lógica + Controle + Estruturas de Dados
• Em PL, programa-se de forma declarativa, ou seja,
especificando o que deve ser computado ao invés de como
deve ser computado
Como funciona??

• Declarar alguns fatos a respeito de objetos e seus relacionamentos

• Definir algumas regras sobre os objetos e seus relacionamentos

• Fazer perguntas sobre os objetos e seus relacionamentos


Constantes

• Nomeiam objetos específicos ou relações (Átomos)


• 1-Sequência de letras e dígitos e sublinhado começando por letras
minúsculas.
• Ex. mario, livro texto,Cicl21, Es_de_dd_2
• 2-Caracteres especiais: + - * / \ ~ ^ < > : . ? @ # $ &.
• Ex. +,<..>,
• 3- Sequencia com apóstrofos (´)
• Ex. ´Beta´, ´23alp´
Variáveis

• São sequencias de letras, dígitos começando sempre por maiúsculo


ou “Underline”
• Ex. Resposta, X, _alfa
• Variáveis representam objetos desconhecidos
E mais....

• Os predicados devem ser em letras minúsculas....


OBRIGATORIAMENTE!
• “:-” condição de leitura da regra
• Os fatos, regras e questões terminam por “.” (ponto);
• “,” representa o “and” lógico
• “;” representa o “or” lógico
• TODA REGRA POSSUI UMA “HEAD” e um “BODY”
Numeros...
Cláusulas

• permite especificar uma relação entre objetos ou uma


propriedade de um objeto.
• Quando a relação ou propriedade não depende de nenhuma
condição, sendo considerada verdadeira sempre, a cláusula é um
fato.
• Caso contrário é uma regra
Fatos vs Regra

• Fato, sempre verdadeiro (Base de informação)


• Regra: (Verdadeira mediante algumas condições)
• pai(B, A).
• filho(A,B) :- pai(B,A).
Relações por regras

Unário Binário
• mulher(sara). • sexo(sara,feminino).
• homem(abraão). • sexo(abraão,masculino).
• homem(isaque). • sexo(isaque,masculino).
• homem(ismael). • sexo(ismael,masculino).
• homem(esaú). • sexo(esaú,masculino).
• homem(jacó). • sexo(jacó,masculino).
• homem(josé) • sexo(josé,masculino).
Objetos e relações

• Como representar: “Sara é uma mulher”


• mulher(sara).
• Permite responder: “Quem é mulher?”
• Não permite responder: “Qual o sexo de Sara?”
• sexo(sara,feminino).
• Permite responder: “Quem é mulher?”
• Permite responder: “Qual o sexo de Sara?”
• Não permite responder: “Qual a propriedade de Sara que tem
o valor feminino?”
• propriedade(sara,sexo,feminino).
• Permite responder todas as perguntas
• Representação objeto-atributo-valor
Progenitores
Exercício

• Mapear a árvore e acima e dizer quais as resposta produzidas pelo


sistema:
• ?- progenitor(josé,X).
• ?- progenitor(X,josé).
• ?- progenitor(sara,X),
progenitor(X,jacó).
• ?- progenitor(sara,X),
progenitor(X,Y),
progenitor(Y,josé).
Exercício

• Usando a base ao abaixo, defina a regra:


• Uma pessoa pode roubar algo se essa pessoa é um ladrão e ela
gosta de um objeto
• Qual a resposta dada por Prolog a pergunta:
• João rouba o quê?
• ladrao(joao).
• ladrao(pedro).
• gosta(maria,flor).
• gosta(maria,queijo).
• gosta(maria,vinho).
DFS em prolog
DFS em prolog

• aresta(a, b).
aresta(a, c).
aresta(b, d).
aresta(b, e).
aresta(c, f).
aresta(c, g).
aresta(d, h).
aresta(e, i).
aresta(e, j).
aresta(f, k).
• s(X, Y) :- aresta(X, Y).
• final(j).
final(f).
Retorno do caminho?

• Se N é um nó final, então Solucao = [N]


• Se N tem um sucessor N1, tal que há um caminho N1 a um nó
final, então Solucao = [N | Caminho_de_N1_a_no_final] (ordem
inversa)
• Prolog:
• resolva(N,[N]) :- final(N). % alcançou a meta
• resolva(N,[N|Caminho]) :- s(N,N1), % faça um movimento válido
resolva(N1,Caminho). % recursividade
Ciclos?... Como resolve-los??
Ciclos….

• aresta(a, b).
aresta(a, c).
aresta(b, d).
aresta(b, e).
aresta(c, f).
aresta(c, g).
aresta(d, h).
aresta(e, i).
aresta(e, j).
aresta(f, k).
• s(X, Y) :- aresta(X, Y).
• final(j).
final(f).
Solução ciclo….

• resolva(No,Solucao) :- depthFirst([],No,Solucao).

• depthFirst(Caminho,No,[No|Caminho]) :- final(No).
depthFirst(Caminho,No,Solucao) :- s(No,No1),
\+pertence(No1,Caminho), % evita ciclo
depthFirst([No|Caminho],No1,Solucao).

• pertence(E,[E|_]).
pertence(E,[_|T]) :- pertence(E,T).
Ainda sobre o Backtracking….

• Repare que o backtracking do Prolog faz com que não seja


necessário o uso de uma pilha para guardar os estados anteriores

• Um problema com a busca em profundidade é que existem


espaços de estado nos quais o algoritmo se perde: quando há
ramos infinitos no espaço de estados
• O algoritmo então explora esta parte infinita do espaço, nunca chegando
perto de um nó final
• Como evitar caminho infinitos?
Procedimento iterativo….
Procedimento iterativo….
L=2…
Atividade….

• Implementar a busca em profundidade limitada (iterativa)


• Implemente também a busca em largura