Sistema Progol TÉCNICAS E HEURÍSTICAS. Progol – Tópicos Definição do sistema; Declarações de Modo; Construção da cláusula mais específica; Algoritmo de.

Slides:



Advertisements
Apresentações semelhantes
Lógica de Predicados e Representação de Conhecimento
Advertisements

Introdução a Algoritmos
Capítulo 7 Tableaux semânticos e resolução na Lógica Proposicional
Lógica Matemática e Computacional 7 – Introdução à Programação Lógica
Tópicos de Lógica Proposicional
Elsa Carvalho 241 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Interpretação.
Linguagens de Programação
Introdução a Programação Renata Freire
Introdução à Programação Lógica
Introdução à Linguagem Prolog
Introdução à Linguagem Prolog
Banco de Dados Dedutivo
Introdução à Linguagem Prolog
Cálculo Relacional Datalog não-recursivo
Programação em Lógica Indutiva
Jacques Robin, Francisco Carvalho, Flávia Barros
Programação em Lógica Indutiva
FACENS – Engenharia da Computação Inteligência Artificial
FACENS – Engenharia da Computação Inteligência Artificial
Inteligência Artificial
INTRODUÇÃO À PROGRAMAÇÃO
Programação Lógica: PROLOG
PROGRAMAÇÃO ou LINGUAGEM C?
Construção de Algoritmos e Programação
Programação em Lógica Augusto Marks Batista Guilherme dos Santos Fujiyoshi Marlon Bill Santos.
Resolução Proposicional
INF 1771 – Inteligência Artificial
Inteligência Artificial
Aprendizado de Máquina
Vinicius Ponte Machado
Aula Prática - Prolog Sistemas Inteligentes /~if684
Prolog Programação Lógica Ícaro A. Souza.
Paradigma Lógico.
Aux a fim início Simulação da execução de um algoritmo que troca o conteúdo de duas variáveis recebidas e apresenta o resultado da inversão: leia a,b a.
Lógica de Predicados Teorema de Herbrand.
UNIVERSIDADE ESTADUAL DE SANTA CRUZ
Prolog Paradigma Declarativo - Lógico
Linguagens lógicas 2013 – Luiz Mauricio Nascimento Silva
Inteligência Artificial
Capítulo 11 Programação Lógica
Learning Sets of Rules Tom Mitchel (cap. 10)
Implementação de Resolução
Teoria da Computação Aula 5 Prof. Fabiano Sabha.
Sistemas Especialistas
Marcílio C. P. de Souto DIMAp/UFRN
Profa. Mercedes Gonzales Márquez
Princípios da Programação em Prolog
Construção e Análise de Algoritmos
Operadores Relacionais e Lógicos
INTRODUÇÃO À PROGRAMAÇÃO EM LÓGICA Profa. Joseluce de Farias Cunha
Linguagem XML Criando um documento XML válido
Progol: uma extensão indutiva de Prolog Jacques Robin CIn-UFPE.
Semântica de uma fórmula da lógica da 1a ordem via modelo de Herbrand
Estratégias de Resolução
Programação de computadores Prof. Giovanni Castro.
Programação em Lógica Indutiva Jacques Robin DI-UFPE.
Banco de Dados Dedutivos
Programação Declarativa 2 INTRODUZIR REGRAS Relação X é descendente de Y (denotada pelo predicado offspring (X,Y)) Aproximação 1 (definição exaustiva)
Programação Lógica com Prolog
Marcus Sampaio DSC/UFCG. Marcus Sampaio DSC/UFCG O Problema Dados –Um banco de transações de compra –Cada transação é um conjunto de ítens comprados Encontrar.
Inteligência Artificial: A Linguagem Prolog (Parte 1)
Sumário 1 SQL Embutida 2 Processamento de Consultas
Elsa Carvalho 262 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Com os.
Algoritmos e Programação MC102
Frases de Horn Forma Normal Conjuntiva- para frases sem quantificadores conjunção de frases cada elemento da conjunção é disjunção de literais literal:
ALGORITMOS.
Revisão 1º Bimestre Inteligência Artificial
Grafos e Teoria da Complexidade Professor: Fabio Tirelo
Lógica de Programação – Forbellone / Eberspacher Lógica de Programação Capítulo 6 Modularizando Algoritmos.
Lógica de Programação Aula 06 Prof. Marcelo Marcony.
Transcrição da apresentação:

Sistema Progol TÉCNICAS E HEURÍSTICAS

Progol – Tópicos Definição do sistema; Declarações de Modo; Construção da cláusula mais específica; Algoritmo de Covering do Progol; Algoritmo A* de construção de cláusula; Exemplo de construção de cláusula;

Definição do Sistema O Progol é um interpretador Prolog com provador limitado por profundidade. (depth bound); O Progol possui um mecanismo de inversão da conseqüência lógica, que o torna capaz de aprender e/ou refinar teorias de forma indutiva (através de exemplos);

Progol – Tópicos Definição do sistema; Declarações de Modo; Construção da cláusula mais específica; Algoritmo de Covering do Progol; Algoritmo A* de construção de cláusula; Exemplo de construção de cláusula;

Declarações de Modo São uma forma de definir (restringir) as relações entre diversos literais nas cláusulas geradas, como : – Os literais que podem aparecer no corpo e na cabeça; – O tipo de cada termo em um predicado; – A definição de termos de entrada e saída em um predicado; – O número máximo de literais com os quais um predicado pode se relacionar;

Declarações de Modo Restringindo literais do corpo e cabeça Modeb – As declarações modeb definem quais os literais que podem aparecer no corpo de uma regra; Ex.: modeb(*, long(+car)) Modeh – As declarações modeh definem quais os literais que podem aparecer na cabeça de uma regra; Ex.: modeh(*, eastbound(+train))

Declarações de Modo Restringindo utilização de variáveis Definição de Tipos : – As declarações modeb e modeh necessitam da definição de um tipo para cada termo do literal sendo definido. modeh(*,eastbound(+train)), modeb(*,long(+car)) Não é permitido : eastbound(A)<- long(A)

Declarações de Modo Restringindo utilização de variáveis Definição de Tipos : – Para cada tipo definido, nós devemos definir também o seu domínio. Ex. modeb(shape(+car, #shape)) Domínio car : car(car_11), car(car_12), car(car_22). Domínio shape : shape(elipse), shape(hexagon), shape(u_shaped).

Declarações de Modo Restringindo utilização de variáveis Termos de Entrada e Saída : – Definição do predicado como uma função com parâmetros de entrada (termos de entrada) e parâmetros de saída (termos de saída); Existem três tipos de marcadores: +tipo(entrada), –tipo (saída) e #tipo (constante); modeb(*, open(+car)), modeb(*, has_car(+train, -car)) modeb(*, shape(+car, #shape))

Declarações de Modo Restringindo utilização de variáveis Cadeia de variáveis : – Uma cláusula C é um encadeamento de variáveis (variable- chaining) se e somente se ela contém uma cadeia de variáveis v 1,..., v n, tal que v 1, v n são, respectivamente, termos de entrada e saída na cabeça de C e cada par v i,v i+1, 1 i < n, são respectivamente termos de entrada e saída em um literal do corpo de C.encadeamento de variáveis Uma cláusula C é E/S completa (I/O complete) se e somente se para cada termo de saída u da cabeça de C, existe uma cadeia de variáveis v 1,..,v n, onde v n = u.E/S completa

Declarações de Modo Restringindo utilização de variáveis. Considere o seguinte exemplo: modeh(*, mult(+real, +real,-real)), modeb(*, dec(+real,-real)) modeb(*, plus(+real, +real,-real)) C é um encadeamento de variáveis pois contém a cadeia de variáveis E,H,I,G. C é E/S completa pois existe uma cadeia de variáveis para G em C. C = mult(E,F,G) dec(E, H), mult(F, H, I), plus(F,I,G).

Declarações de Modo Restringindo utilização de variáveis Restrição do Progol : – Uma variável só pode ser utilizada como termo de entrada em um literal se ela for uma variável global (da cabeça, quantificada universalmente) ou uma variável de trabalho retornada anteriormente na regra como resposta (quantificada existencialmente). eastbound(A)<-has_car(A,B), not open(B), not long(B) eastbound(A)<-not open(B), has_car(A,B), not long(B)

Declarações de Modo Restringindo utilização de variáveis Literais determinados : – São literais que fornecem somente uma resposta para uma determinada configuração de parâmetros de entrada. dec(5,4), inc(5, 6), infront_of(car_11, car_12). has_car(train1, car_11), has_car(train1, car_12)

Declarações de Modo Restringindo utilização de variáveis Profundidade de uma variável : – Seja A L 1,..L n uma cláusula ordenada – A profundidade de uma variável v é definida como : prof(v) = 0, se v ocorre em A prof(v)=prof(x)+1, onde v, x ocorre em L i e x é a variável de maior profundidade em L i. Se nenhuma das outras variáveis de L i tem a profundidade já definida então prof(v) =

Declarações de Modo Restringindo utilização de variáveis No Progol, nós podemos afirmar que a profundidade exprime o menor caminho entre uma variável de trabalho (quantificada existencialmente) e uma variável global (quantificada universalmente, da cabeça). eastbound(A)<-has_car(A,B), has_car(A,C), long(B), short(C), infront_of(B,C). Prof(A) = 0Prof(B) = 1Prof(C) = 1

Declarações de Modo Restringindo o número o de relações entre predicados Parâmetro de Recall : – A declaração modeb (e/ou modeh) para um literal p permitem definir o número máximo de possíveis instanciações para os termos de saída de p. modeb(2, squareroot(+real, -real)), modeb(1, dec(+int,-int)) modeb(*, has_car(+train,-car))

Progol – Tópicos Definição do sistema; Declarações de Modo; Construção da cláusula mais específica; Algoritmo de Covering do Progol; Algoritmo A* de construção de cláusula; Exemplo de construção de cláusula;

Algoritmo da Bottom Clause Entrada : h, i naturais, B conhecimento preliminar, e uma instância e M um conjunto de declarações de modo. Seja m uma declaração de modo. a(m) representa o átomo formado pela troca de cada marcador por uma variável distinta. Ex.: a(modeb(*, open(+car))) = open(B) Seja hash : Termos + uma função que mapeia termos em números naturais. Seja k = 0, i = <>, TermosInt =

Algoritmo da Bottom Clause 1.Se não existe nenhum modeh em M tal que a(m) e então retorne. 2. Caso contrário, seja m a primeira declaração de modo tal que a(m) e com substituição h. Seja a h uma cópia de a(m). Para cada v/t em h, se v corresponde a um marcador #tipo em m troque v em a h por t, caso contrário troque v por v j onde j = hash(t). Adicione a h em i. Se v for um termo de entrada (+tipo), adicione t a TermosInt. 3. Se k = i então retorne i caso contrário k = k + 1.

Algoritmo da Bottom Clause 4.Para cada modeb mb seja {v 1,..,v n } variáveis de entrada em a(mb). Seja T(mb) = T 1 x.. x T n o conjunto de tuplas de termos tal que cada T j corresponde ao conjunto de todos os termos do mesmo tipo de v j em TermosInt. Para cada seja a b uma cópia de a(mb) e = {v 1 /t 1,...,v n /t n }. Se Prolog com limite de profundidade h for bem-sucedido na consulta a b ?, retornando o conjunto de respostas b então para cada b em b e v/t em b se v for constante (#tipo) então troque v em a b por t caso contrário troque v em a b por v j onde j = hash(t) e adicione a b em i. Se v for um termo de saída(-tipo), adicione t a TermosInt. 5.Vá para o passo 3..

Algoritmo da Bottom Clause eastbound(east2). (i = 2, h = 100) B = {has_car(east2,car_21), has_car(east2, car_22), has_car(east2, car_23), open(car_21), open(car_22), shape(car_21, u_shaped), shape(car_22, u_shaped), shape(car_23, rectangle)} i = {eastbound(A) has_car(A,B), has_car(A,C), has_car(A,D), TermosInt = {east2, car_21, car_22, car_23} i = {eastbound(A) has_car(A,B), has_car(A,C), has_car(A,D), open(B), open(C), TermosInt = {east2, car_21, car_22, car_23} i = {eastbound(A) TermosInt = {east2. i = {eastbound(A) has_car(A,B), has_car(A,C), has_car(A,D), open(B), open(C), not open(D), not long(B), not long(C), not long(D), TermosInt = {east2, car_21, car_22, car_23} i = {eastbound(A) has_car(A,B), has_car(A,C), has_car(A,D), open(B), open(C), not open(D), not long(B), not long(C), not long(D), shape(B, u_shaped), shape(C, u_shaped), shape(D, rectangle) } TermosInt = {east2, car_21, car_22, car_23} i = {eastbound(A) has_car(A,B), has_car(A,C), has_car(A,D), open(B), open(C), not open(D), TermosInt = {east2, car_21, car_22, car_23}

Progol – Tópicos Definição do sistema; Declarações de Modo; Construção da cláusula mais específica; Algoritmo de Covering do Progol; Algoritmo A* de construção de cláusula; Exemplo de construção de cláusula;

Algoritmo de Covering do Progol 1.Se E = então retorne B. 2.Seja e o primeiro exemplo de E. 3.Construa a cláusula i de e. 4.Construa a cláusula cl para i. 5.Seja B = B cl 6.Seja E= {e | e E, B e} 7.E = E – E e retorna para 1.

Progol – Tópicos Definição do sistema; Declarações de Modo; Construção da cláusula mais específica; Algoritmo de Covering do Progol; Algoritmo A* de construção de cláusula; Exemplo de construção de cláusula;

Algoritmo A* de construção de cláusula O algoritmo de construção de cláusula do Progol para um exemplo e busca encontrar a melhor cláusula cl tal que  cl i, O algoritmo inicia com uma cláusula vazia e através de um operador de refinamento (especialização) e uma heurística, pesquisa no espaço de cláusulas tais que  cl i.

Algoritmo A* de construção de cláusula Definição da -subsumption : Seja C e D duas cláusulas. C -subsume D ou C D se e somente se C D. C = eastbound(A) has_car(A,B), long(B), has_car(A,C), open(C). D = eastbound(A) has_car(A,B), long(B), open(B), shape(B, triangle). = {A/A, B/B, C/B} C = eastbound(A) has_car(A,B), long(B), open(B) = {A/A, B/B, C/B} C = eastbound(A) has_car(A,B), long(B), open(B) D.

Algoritmo A* de construção de cláusula Um operador de refinamento retorna para uma determinada cláusula C, um conjunto de especializações de C. Ex.: C = eastbound(A) (C) = {(eastbound(A) has_car(A,B)), (eastbound(A) has_car(A,B), not open(B)),...}

Algoritmo A* de construção de cláusula O operador de refinamento (C) é construído para manter  cl i : – Ele trabalha com estados do tipo, onde C é uma cláusula, um conjunto de substituições tal que C i e k (1 k n, onde n = | i |) um índice indicando que os literais l 1,..,l k foram considerados para estar em C.

Algoritmo A* de construção de cláusula Seja C uma cláusula e uma substituição tal que C i. está em ( ) se e somente se C´ = C {l}, k´ = k, (, k) e C´ L i (M), ou C´ = C, k´ = k+1, ´ = e k < n.

Algoritmo A* de construção de cláusula Uma variável v é dita splittable em um literal p se ela corresponde a um marcador +tipo ou – tipo em uma declaração modeh de p ou se corresponde a um marcador –tipo em uma definição modeb de p. Ex.: eastbound(A) has_car(A,B), not open(B), not long(B), has_car(A,C), long(C), open(C).

Algoritmo A* de construção de cláusula Sejam l = p(v 1,...,v m ), l k = p(u 1,...,u m ), o k-ésimo literal de i duas cláusulas, e,, dois conjuntos de substituições (,k) se e somente se l =l k, - = {(v j / u j ) | u j é splittable em l k e v j não pertence a dom( )}, Para cada variável u j splittable em l k, v j / u j

Algoritmo A* de construção de cláusula 1. Seja Abertos = { } e Fechados = 2. Seja s = melhor(Abertos) e Abertos = Abertos-{s}melhor 3. Seja Fechados = Fechados {s}. 4. Se poda(s) vá até 6.poda 5. Seja Abertos = (Abertos (s)) - Fechados. 6. Se terminado(Fechados, Abertos) então retorneterminado melhor(Fechado).melhor 7. Se Abertos = então imprima ´sem compressão´ e retorne 8. Vá até 2.

Algoritmo A* de construção de cláusula poda(s) = Verdadeirose n s = 0 e f s > 0 Falso caso contrário terminado(S,S´) = Verdadeirose s = melhor(S), n s = 0, f s > 0 e para cada s´ S´ f s f s´ Falso caso contrário.

Algoritmo A* de construção de cláusula p s = |{e : e E | B C e h }|(# ex. corretos) n s = |{e : e E | B C e h }|(# ex. incorretos) c s = |C|-1 (# tamanho da cláusula-1) V s = {v : u / v e u está no corpo de C} h s = min v Vs d´(v) (# de átomos para completar a cláusula) f s = p s – (n s + c s + h s ) (medida de performance da cláusula) melhor(S) é o estado s S que tem o maior valor de f e c s c..

Algoritmo A* de construção de cláusula 0se não existe variável –tipo na cabeça de i. 0se v é uma variável –tipo na cabeça de i. se v não está em i. (min u Uv d´(u)+1)caso contrário.. d´(v)= onde U v são variáveis –tipo nos literais do corpo de C onde v é um termo de entrada.

Algoritmo A* de construção de cláusula. Considere o seguinte exemplo: modeh(*, mult(+real, +real,-real)), modeb(*, dec(+real,-real)) modeb(*, plus(+real, +real,-real)) i = mult(A,B,C) dec(A, D), dec(B, E), mult(B, D, F), mult(A, E, G), plus(A, G, C), plus(B, F, C). C = mult(A,B,C) dec(A, D), mult(B, D, F). d(A)=3, d(B)=2, d(D) = 2, d(F) = 1 e d(C) = 0 (h = 1) C = mult(A,B,C) dec(A, D), d(A)=3, d(B)=3, d(D) = 2 e d(C) = 0 (h = 2)

Algoritmo A* de construção de cláusula. Este algoritmo é garantido de terminar e retorna a cláusula, se existir, que tem o melhor poder explanatório com o menor tamanho possível. No pior caso, o algoritmo irá considerar todas as cláusulas da ordenação subsumption. Refinamentos de estados s são desconsiderados se f s > 0 e n s = 0, porque os refinamentos aumentam c s e tendem a diminuir p s, piorando o valor de f s. O algoritmo termina quando existe um estado já fechado com maior f s já encontrado até então e que não pode ser melhorado por refinamentos. Considera-se que nenhum outro estado s´ ainda aberto com f s f s´ pode ter refinamento melhor.

Progol – Tópicos Definição do sistema; Declarações de Modo; Construção da cláusula mais específica; Algoritmo de Covering do Progol; Algoritmo A* de construção de cláusula; Exemplo de construção de cláusula;