JEOPS
Java Embedded Object Production System
Allan Lima
[email protected]
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
 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
Compilação das Regras
Base de
Regras (.rule)
Base de
Regras (.java)
JEOPS
Compiler
Compilação da Aplicação
Base de
Regras (.java)
+
Aplicação
Java
Java
Compiler
JEOPS RE
Byte Code
Como o JEOPS funciona
Execução
se Pai(a, b)
então Filho(b, a)
Filho(a, b) ???
Base de
Regras
Motor de
Inferência
+
Fatos
Pai(a, b);
Pai(b, c);
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 Regras
package 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;
}
public class Objetivo {
private boolean ativo;
private Pessoa pai, mae;
private Pessoa alvo;
public String getNome() {
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: Fibonacci
package 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: Fibonacci
rule 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: Fibonacci
rule 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


LRUConflictSet


Não permite que uma regra seja disparada mais de uma vez com os
mesmos objetos (problemas com memória)
OneShotConflictSet


Escolherá a regra mais recentemente utilizada
NaturalConflictSet


Escolherá sempre a regra menos recentemente utilizada
MRUConflictSet


Não há regras, se preocupa apenas com a eficiência
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/orientadaAgent
es.html
Download

Aula sobre o JEOPS