Introdução à Linguagem Prolog

20
Introdução à Linguagem Prolog Prof. Fabrício Enembreck PPGIA – Programa de Pós Graduação em Informática Aplicada

description

Introdução à Linguagem Prolog. Prof. Fabrício Enembreck PPGIA – Programa de Pós Graduação em Informática Aplicada. Conteúdo do Curso. Introdução à Lógica e à Programação Lógica Introdução ao Prolog e ao SWI-Prolog Matching e Backtraking Múltiplas soluções Listas e predicados recursivos - PowerPoint PPT Presentation

Transcript of Introdução à Linguagem Prolog

Page 1: Introdução à Linguagem Prolog

Introdução à Linguagem Prolog

Prof. Fabrício Enembreck

PPGIA – Programa de Pós Graduação em Informática Aplicada

Page 2: Introdução à Linguagem Prolog

Conteúdo do Curso

• Introdução à Lógica e à Programação Lógica

• Introdução ao Prolog e ao SWI-Prolog

• Matching e Backtraking

• Múltiplas soluções

• Listas e predicados recursivos

• Grafos em Prolog

Page 3: Introdução à Linguagem Prolog

Resolução de Problema como um Espaço de Estados

• Uma possível estratégia para solução de problemas é listar todos os estados possíveis.

• A solução do problema consiste em percorrer o espaço de estados a partir do estado inicial até o estado meta.

• É necessário desenvolver um conjunto de operadores que modifique um estado para um outro estado.

Page 4: Introdução à Linguagem Prolog

Definição do Problema como um Espaço de Estados (Cont.)

• Conjunto de Estados possíveis.

• Conjunto de operações possíveis que modifiquem um estado.

• Especificação de um estado inicial(s).

• Especificação de um estado meta(s).

Page 5: Introdução à Linguagem Prolog

Exemplo: Problema dos Jarros de Água

3 lt4 lt

Objetivo: 2 litros no jarro 4 lt

Sem limite de Água

Sem limite de Água

Page 6: Introdução à Linguagem Prolog

Espaço de Estados do Problema dos Jarros de Água

O espaço de estados pode ser representado por dois inteiros x e y:

x = litros no jarro de 4 litros

y = litros no jarro de 3 litros

Espaço de Estados = (x,y)

tal que x {0,1,2,3,4}, y {0,1,2,3}

Page 7: Introdução à Linguagem Prolog

Início dos Jarros de Água e Estados Meta

• O Estado Inicial ocorre quando ambos os jarros estão vazios:

(0,0)

• O Estado Meta é qualquer estado que possua 2 litros de água no jarro de 4 litros:

(2,n) para qualquer n

Page 8: Introdução à Linguagem Prolog

Estados do Jarros de Água

(0,0) (1,0) (2,0) (3,0)

(0,1) (1,1) (2,1) (3,1)

(0,2) (1,2) (2,2) (3,2)

(0,3) (1,3) (2,3) (3,3)

(4,0)

(4,1)

(4,2)

(4,3)

Estados MetaEstado

Inicial

Page 9: Introdução à Linguagem Prolog

Operações com Jarros de Água

• Colocar 3 lt. no jarro 3

• Colocar 4 lt. no jarro 4

• Esvaziar jarro 3

• Esvaziar jarro 4

• Coloca o conteúdo do jarro 3 no jarro 4

• Outros ???

(x,y) -> (x,3)

(x,y) -> (4,y)

(x,y) -> (x,0)

(x,y) -> (0,y)

(0,y) -> (y,0)

Page 10: Introdução à Linguagem Prolog

Restrições

• Não é possível colocar água em um jarro cheio.

• Restrições são associadas para que uma operação possa ser aplicada sobre um estado

(x,y), x < 4 -> (x,0)

(x,y), y < 3 -> (0,y)

(x,y), x + y <= 4 -> (y,0)

Page 11: Introdução à Linguagem Prolog

Regras de Produção

• Uma operação e as condições que devem ser satisfeitas (restrições) antes da operação poder ser aplicada é chamada de regra.

• Tipicamente é necessário mesclar regras gerais e regras específicas.

• Informação prévia sobre a solução tende a produzir regras específicas e aumentar a velocidade da busca.

Page 12: Introdução à Linguagem Prolog

Domínio de Regras Específicas

• Para o problema dos Jarros de Água :(0,2) -> (2,0)

(x,2) -> (0,2)

• Utilizando estas regras soluções podem ser encontradas rapidamente!

Page 13: Introdução à Linguagem Prolog

Grafo dos Jarros de Água

(0,0)

(4,0)

(4,3) (1,3)(0,0)

(0,3)

(4,3) (3,0)(0,0)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.Uma solução possível: (4, 0) (1, 3) (1, 0) (0, 1) (4, 1) (2, 3)

Page 14: Introdução à Linguagem Prolog

Busca em Profundidade

• Algoritmo• Estabeleça alguma ordenação às regras;• Enquanto existem regras aplicáveis

Aplique a próxima regra e gere um novo estado;

Faça uma busca em profundidade (BP) no novo estado.

• fim_enquanto

Page 15: Introdução à Linguagem Prolog

Características da Busca em Profundidade

• Não necessita armazenar o caminho

de uma grande lista de estados.

• Pode encontrar uma solução

muito rapidamente.

• “Poda” é possível Exemplo: utilização de heurísticas

• Pode facilmente encontrar problemas com ciclos (loops).

d

cb

a

ge

h i kj

f

Page 16: Introdução à Linguagem Prolog

Busca em Largura

•A estratégia de árvore para o problema dos jarros de água é um exemplo de busca em largura.

•Algoritmo geral para BL:• crie lista_nós e a inicialize com o estado inicial;• enquanto um estado meta não é encontrado ou lista_nós != {};

• remova o primeiro elemento de lista_nós, primeiro_nó;• aplique todas as regras possíveis em primeiro_nó e adicione

os estados resultantes em lista_nós;• fim_enquanto

Page 17: Introdução à Linguagem Prolog

Características da Busca em Largura

• Se há uma solução, BL a encontrará.• Encontrará a solução mínima (o

caminho mais curto até a solução).• Não terá problemas com ciclos.• Requer espaço disponível para

armazenar lista_nós, que pode ser muito grande!!!

d

cb

a

ge

h i kj

f

Page 18: Introdução à Linguagem Prolog

Grafos em Prolog

• São normalmente utilizados para representar espaços de busca

• Exemplo:

faz_divisa(sc, pr). % (1)faz_divisa(sc, rs). % (2)faz_divisa(pr, sp). % (3)faz_divisa(pr, ms). % (4)faz_divisa(sp, rj). % (5)faz_divisa(sp, mg). % (6)faz_divisa(sp, ms). % (7)faz_divisa(sp, pr). % (8)

SC

RS

PR

SP

RJMS

MG

1

2

3 , 8

4

576

Page 19: Introdução à Linguagem Prolog

Exercícios

• 1) A partir do MAPA do Brasil:– A) Crie um grafo em Prolog para representar as

fronteiras entre os estados;– B) Escreva um programa Prolog para colorir o

MAPA de maneira que dois estados vizinhos não apresentem a mesma cor. Um número pequeno de cores deve ser utilizada (3 ou 4)

Page 20: Introdução à Linguagem Prolog

Exercícios

• 2) Implementar a resolução do problema dos jarros de água usando uma estratégia de busca em largura