210 likes | 320 Views
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
E N D
JEOPSJava 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 • 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 JEOPS Compiler Base de Regras (.java) Base de Regras (.rule) Compilação da Aplicação Base de Regras (.java) Java Compiler Byte Code + Aplicação Java JEOPS RE
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 Verdadeiro + Fatos Pai(a, b); Pai(b, c);
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 2: Fibonacci publicclass Fibonacci { publicint n; // The order publicint 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 • 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 • Modificar o exemplo da família, criando uma regra para descobrir os avós paternos • 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