JEOPS Java Embedded Object Production System

Post on 09-Jan-2016

49 views 1 download

Tags:

description

JEOPS Java Embedded Object Production System. Allan Lima adsl@cin.ufpe.br Material disponível em http://www.cin.ufpe.br/~adsl/arquivos/jeops. Roteiro. O que é o JEOPS? Um pouco de história Configurando o Eclipse para usar o JEOPS Como o JEOPS funciona? Regras JEOPS - PowerPoint PPT Presentation

transcript

JEOPSJava Embedded Object Production System

Allan Limaadsl@cin.ufpe.br

Material disponível emhttp://www.cin.ufpe.br/~adsl/arquivos/jeops

Roteiro O que é o JEOPS? Um pouco de história Configurando o Eclipse para usar o JEOPS Como o JEOPS funciona? Regras JEOPS

Exemplo 1: Descobrindo ancestrais Exemplo 2: Calculando os números de Fibonacci

Resolução de Conflitos Exercícios

Configurando o Eclipse Baixe o JEOPS e o plugin para o Eclipse:

www.cin.ufpe.br/~adsl/arquivos/jeops Descompacte o arquivo JEOPSsrc.zip

Baixe o Eclipse em: www.eclipse.org

Descompacte o arquivo JEOclipse.zip na pasta eclipse

Abra o eclipse File > Import > General > Existing Projects into

Workspace Selecione o diretório onde o código do JEOPS se

encontra e clique em finish

O que é o JEOPS?

JEOPS Java Embedded Object Production

System

É um motor de inferência para a linguagem de programação Java

Com ele podemos definir regras para serem executadas sobre objetos Java

Um pouco de história Idealizado em 1997 na, hoje extinta,

cadeira de Inteligência Artificial Simbólica Primeira versão chamada JEPS

Java Embedded Production System Possuía diversos problemas e limitações

1998 Utilizado por alunos de mestrado Correção de bugs e grande aumento de

performance com o novo algoritmo de unificação Mudança de nome para JEOPS Problemas com resolução de conflitos

Um pouco de história 1999

Personalização da resolução de conflitos Refatoração de todo o código para o Inglês Criação de um manual para o usuário

2000~2001 Sistema totalmente reescrito

Regras pré-compiladas Parser otimizado para a total integração com

Java Maior facilidade para a personalização de

conflitos Melhor unificação entre regras e objetos

Como o JEOPS funciona

Base de Regras (.rule)

JEOPS Compiler

Base de Regras (.java)

Compilação das Regras

Aplicação Java

Java Compiler

Byte Code

Compilação da Aplicação

Base de Regras (.java)

+

JEOPS RE

Como o JEOPS funciona

Fatos

Motor de Inferência

Execução

Base de Regras

+

se Pai(a, b) então Filho(b, a)

Pai(a, b);Pai(b, c);

Filho(a, b) ???

Verdadeiro

Regras JEOPS São organizadas em uma base de regras

Uma base de regra contem regras, mas também pode conter métodos e declarações de variáveis, como qualquer classe de Java.

As regras são descritas através de três campos Declaração de variáveis Condições Ações

Regras JEOPS Declaração de variáveis

Variáveis que compõem a regra Parâmetros para a avaliação da regra

Variáveis locais Variáveis auxiliares,usadas para simplificar

expressões complexas Condições

Qualquer expressão booleana em Java Não deve modificar o estado dos objetos

Ações Qualquer expressão de Java

Estrutura de uma Base de Regraspackage nomeDoPacote;

public ruleBase NomeDaBaseDeRegras {

rule NomeDaRegra {

declarations // Declaração de variáveis, parâmetros da regra localdecl // Declaração de variáveis internas da regra conditions // Condições para a realização das ações actions // Ações que serão realizadas caso as condições sejam // satisfeitas }

}

Trabalhando com a Base de Regras

Inserindo objetos insert(Object obj);

Removendo objetos: retract(Object obj);

Informando modificações modified(Object obj);

Exemplo 1: Descobrindo ancestrais

public class Pessoa { private String nome; private Pessoa pai, mae; public String getNome() { ...}

public class Objetivo { private boolean ativo; private Pessoa alvo; public Objetivo(Pessoa p) { ...}

Exemplo 1: Descobrindo ancestrais

ruleBase Familia { rule encontraAncestrais { declarations Pessoa p; Objetivo o; localdecl Pessoa pai = p.getPai(); Pessoa mae = p.getMae(); conditions p == o.getAlvo(); o.isAtivo(); actions o.desativa(); System.out.println(pai.getNome() + “ e ” + mae.getNome() + “ são ancestrais”); insert(new Objetivo(pai)); insert(new Objetivo(mae)); }}

Exemplo 2: Fibonacci

public class Fibonacci {

public int n; // The order

public int value;

public Fibonacci son1;

public Fibonacci son2;

...

}

Exemplo 2: Fibonaccipackage fibonacci;

public ruleBase FibonacciBase {

rule BaseCase { // if n == 1 or n == 0, then the value is n. declarations Fibonacci f; conditions f.getN() <= 1; f.getValue() == -1; actions f.setValue(f.getN()); modified(f); // Yes, I modified f }

Exemplo 2: Fibonaccirule GoDown { // if n >= 2, create two sons for the object declarations Fibonacci f; conditions f.getValue() == -1; f.getN() >= 2; f.getSon1() == null; actions Fibonacci f1 = new Fibonacci(f.getN() - 1); Fibonacci f2 = new Fibonacci(f.getN() - 2); f.setSon1(f1); f.setSon2(f2); insert(f1); // Let's tell our knowledge base insert(f2); // that these two sons exist. modified(f);}

Exemplo 2: Fibonaccirule GoUp { // if both subproblems are solved, // so let's solve this one declarations Fibonacci f, f1, f2; conditions f1 == f.getSon1(); f2 == f.getSon2(); f.getValue() == -1; f.getN() >= 2; f1.getValue() != -1; f2.getValue() != -1; actions f.setValue(f1.getValue() + f2.getValue()); retract(f1); // I don't need retract(f2); // they anymore... modified(f);}

Resolução de Conflitos O JEOPS possui um mecanismo flexível para a resolução de

conflitos Podemos criar nosso próprio gerenciador de conflitos

Herdando da classe AbstractConflictSet Ou usar as classes do projeto

DefaultConflictSet Não há regras, se preocupa apenas com a eficiência

LRUConflictSet Escolherá sempre a regra menos recentemente utilizada

MRUConflictSet Escolherá a regra mais recentemente utilizada

NaturalConflictSet Não permite que uma regra seja disparada mais de uma vez com os

mesmos objetos (problemas com memória) OneShotConflictSet

Não permite que uma regra seja disparada mais de uma vez, mesmo que com objetos distintos.

PriorityConflictSet A ordem da definição das regras no arquivo define as suas

prioridades.

Exercícios

1. Modificar o exemplo da família, criando uma regra para descobrir os avós paternos

2. Implementar o calculo do fatorial de um número

Como saber mais sobre JEOPS? Site do Projeto

http://www.cin.ufpe.br/~jeops/ CEOPS++

Motor de inferência para C++ baseado no JEOPS http://www.cin.ufpe.br/~tg/2006-1/psb.pdf

Linguagem orienta a agentes baseada na sintaxe no JEOPS http://www.cin.ufpe.br/~nll/

orientadaAgentes.html