Sistemas de Produção Fatos: x, y Regras: x & y => p

Slides:



Advertisements
Apresentações semelhantes
Programação de jogos MMO com DALua
Advertisements

Geração de DSLs Vamos criar agora um projeto exemplo que trabalhe não mais com a linguagem DRL, mas sim com DSL (Domain Specific Languages – Linguagens.
Exemplo de Projeto Vamos criar agora um projeto exemplo para verificar as condições de crédito de um conjunto de indivíduos; Nosso primeiro conjunto de.
JAVA Orientação a Objetos
Curso de aprofundamento na linguagem C
Viviane Torres da Silva
Gerenciamento de Dados e Informação Estudo de caso – PL/SQL
Programação em Java Prof. Maurício Braga
Sistemas especialistas
Paulo Marques Hernâni Pedroso
Triggers Renata Viegas.
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Trabalho com tabelas de decisão
Padrão de Projeto Interpreter
Linguagens de Programação Orientadas a Objetos
Raciocínio Viviane Torres da Silva
Programação Básica em Java
Lógica de Programação Módulo II
Agentes Baseados em Regras de Produção
1 Professor Rogério B. de Andrade - Aula 001- Dez/2008 Técnicas e Linguagem de Programação.
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Jess – the Rule Engine for the Java™ Platform
Francesca Volcan Pio Maiara Heil Cancian Ricardo Bedin França
Sistemas Baseados em Regras de Produção
Introdução aos Sistemas Especialistas
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Elementos de Classe, class wrappers.
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
CRIANDO OBJETOS EM JAVA
Introdução a linguagem Python
Unidade I: “Dê um mergulho rápido”
Aula prática - análise contextual
JAVA Orientação a Objetos
Padrão de Projeto Visitor
JAVA Linguagem Ambiente de Desenvolvimento
Desenvolvimento de Sistemas Orientados a Aspectos
FTIN Formação Técnica em Informática
PL/SQL, Procedures e Funções
Programação I Aula 2 (Métodos)
Entendendo as definições de classe
Primeira aula de PL/SQL Parte II
Teste dos Caminhos Básico
Agentes Baseados em Regras de Produção
Augusto Sampaio e Paulo Borba Centro de Informática
Regras de Produção: o Motor de Inferência JESS
JEOPS Java Embedded Object Production System
Sistemas Especialistas
Sistemas Inteligentes
Adriano Melo sistemas inteligentes
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Sistemas Baseados em Conhecimento
Representando Conhecimento em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Linguagem II Exceções.
Programação Orientada a Objetos - Java
Especificação em Projeto de Sistemas
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Java Kickstart, day 2 Semelhanças com linguagem C.
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Aula 1 – Profª Danielle Costa
Linguagem Orientada a Agentes Allan Lima, Bruno Edson, Nancy Lyra.
Ruby André Braga Patrícia Lustosa. Yukihiro Matsumoto (“Matz”), 1993 Perl Smalltalk Eiffel Ada Lisp “Natural, not simple” “More powerful than Perl and.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Concurrent Versions System (CVS) Alexandre Monteiro.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
©Silberschatz, Korth and Sudarshan (modificado)9.2.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
Desenvolvimento WEB Prof. Renato de Oliveira Bastos
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Transcrição da apresentação:

Sistemas de Produção Fatos: x, y Regras: x & y => p Encadeamento para a frente (Forward chaining) Dados x e y, derive então p Encadeamento para trás (Backward chaining) p é verdade? Então verificarei x e y. Prolog

Lembrete sobre sistemas de produção Base de fatos Pai(João, José) Pai(José, Marcos) Base de Regras  p1, p2, p3: Pai(p1,p2)  Pai(p2,p3)  Avo(p1,p3) Motor de Inferência Avo(João, Marcos) unificação

Lembrete sobre sistemas de produção Base de Regras unificação Conjunto de Conflito Base de Fatos resolução de conflitos Regra Ciclo Novos Fatos execução Obs: para não ter de re-testar a cada ciclo, só testa os fatos modificados (retirados, adicionados)

Integração Objetos/Regras Mudança filosófica Fatos: string => Objetos Predicados: string => métodos dos objetos Casamento estrutural => Casamento comportamental (pertinência a classes + veracidade dos predicados) Pai(João, José) Pai(José, Marcos)  p1, p2, p3: Pai(p1,p2)  Pai(p2,p3)  Avo(p1,p3) Regra Avo Para todo objeto p1, p2 e p3 da classe Pessoa, SE p1.ehPai(p2); p2.ehPai(p3); ENTÃO Nome: Marcos José João pai Pessoa

Anderson Neves afrn@cin.ufpe.br

Roteiro Sobre o Drools Módulos Drools Expert Aplicação bancária Regras DRL API Hello World Aplicação bancária Infraestrutura Testes Exercício

Sobre o Drools The Business Logic integration Platform 5 Módulos integrados Desde 2001 Semântica em 2011 Jboss e Red Hat Open Source Plugin para Eclipse http://www.jboss.org/drools

Sobre o Drools Implementa ferramentas para decisões complexas de negócio Problemas dos métodos tradicionais: If-else (Código espaguete) Uma pequena alteração precisa de recompilação e redeploy Não separa código de infraestrutura das regras de negócio O que: requisitos de negócio Como: algoritmo

Sobre o Drools Permite implementar a lógica de negócio de uma maneira mais declarativa Separa o conhecimento, do código de infraestrutura Fornece diferentes ferramentas para cada tipo de lógica de negócio Decisões Processos de negócio Eventos

Sobre o Drools Vantagens Fácil entendimento Maior facilidade de manutenção Desempenho razoável Requisitos traduzidos em regras Reutilização

Sobre o Drools Desvantagens Não é a “bala de prata” Requer uma curva de aprendizado Entender minimamente como funciona uma engine de regras (máquina de inferência) As regras podem gerar recursão, que devem ser tratadas pelo desenvolvedor Em casos de conflitos o desenvolvedor tem que escolher qual tratamento usar Consumo de memória

Roteiro Sobre o Drools Módulos Drools Expert Aplicação bancária Regras DRL API Hello World Aplicação bancária Infraestrutura Testes Exercício

Módulos Engine de regras Linguagem para regras (DRL) Tabelas de decisão (xls e cvs) Linguagem específica do domínio (DSL) Integrado ao Java

Módulos Workflows BPMN Editor gráfico do fluxograma Extensível Para criar, executar e monitorar processos de negócio

Módulos Processamento de Eventos Complexos (CEP) Eventos no tempo Para sistemas de: Detecção de fraudes Aprovação de crédito

Módulos BRMS (não só regras) Repositório centralizado do conhecimento Aplicação Web Versionamento Foco nas regras de negócio

Módulos Planejamento automático Problemas com restrições Problemas como: Escalas de empregados Horário escolar Caixeiro viajante

Roteiro Sobre o Drools Módulos Drools Expert Aplicação bancária Regras DRL API Hello World Aplicação bancária Infraestrutura Testes Exercício

Drools Expert Exemplo de regra: package bank.model; rule "basic rule" when // condition Account( balance < 100 ) then // consequence System.out.println("Account balance is less than 100"); end

Drools Expert O package funciona como um namespace Nomes de regras em um pacote tem que ser únicas basic rule é o nome da regra when indica a condição (premissa) LHS (Left Hand Side) then indica a consequência da regra RHS (Right Hand Side) // é usado para comentários

Drools Expert Várias condições Variáveis nas regras Tipos Comentários Account( balance == 200 ) Customer( name == "John" ) Várias condições Variáveis nas regras Tipos String Date Boolean Enum Comentários $account : Account( $type : type ) Customer( name matches "[A-Z][a-z]+" ) Account( dateCreated > "01-Jan-2008" ) Transaction( isApproved == true ) Account( type == Account.Type.SAVINGS ) #Comentário de única linha //Comentário de única linha /*Comentário de várias linhas*/

Drools Expert Imports Variáveis Globais Funções Condição da regra And import com.mycompany.mypackage.MyClass; import com.mycompany.anotherPackage.*; Imports Variáveis Globais Funções Condição da regra And Or Not Exists function double calculateSquare(double value) { return value * value; } Customer( name == "John", age < 26 ) Customer( name == "John" || age < 26 ) Customer( age < 26 || > 70 ) not Account( type == Account.Type.SAVINGS ) exists Account( type == Account.Type.SAVINGS )

Drools Expert Trabalhando com coleções (Not) contains (Not) memberOf From $account : Account( ) Customer( accounts contains $account ) Customer( accounts not contains $account ) $customer : Customer($accounts : accounts) Account( this memberOf $accounts ) Account(this memberOf $customer.accounts) $customer : Customer( ) Account( ) from $customer.accounts

Drools Expert Quando todas as condições de uma regra são satisfeitas, a regra é ativada Uma regra ativada é disparada, segundo a estratégia de resolução de conflito A execução das regras podem ativar outras regras O processo é repetido até que nenhuma regra seja ativada

Drools Expert Alguns comandos usados na consequência da regra update(objeto); insert(new Objeto()); insertLogical(new Objeto()); retract(objeto); drools.halt(); drools.getRule().getName(); kcontext.getKnowledgeRuntime().halt();

Drools Expert Alguns atributos das regras salience (prioridade) Default é 0 no-loop date-effective date-expires duration salience 100 salience ($account.balance * 5) no-loop date-effective "01-Jan-2011" date-expires "01-Jan-2011" duration 3000

Drools Expert Parte da API Drools

Roteiro Sobre o Drools Módulos Drools Expert Aplicação bancária Regras DRL API Hello World Aplicação bancária Infraestrutura Testes Exercício

Roteiro Sobre o Drools Aplicação bancária Módulos Infraestrutura Drools Expert Regras DRL API Hello World Aplicação bancária Infraestrutura Testes Exercício

Aplicação Bancária Modelo

Roteiro Sobre o Drools Módulos Drools Expert Aplicação bancária Regras DRL API Hello World Aplicação bancária Infraestrutura Testes Exercício

Roteiro Sobre o Drools Módulos Drools Expert Aplicação bancária Regras DRL API Hello World Aplicação bancária Infraestrutura Testes Exercício

Roteiro Sobre o Drools Módulos Drools Expert Aplicação bancária Regras DRL API Hello World Aplicação bancária Infraestrutura Testes Exercício

Exercício Criar regra suggestInvestment, onde ela verifica se o saldo de uma conta é maior que 100. Criar regra suggestLoan, onde ela verifica se o saldo de uma conta é menor que 0. Criar regra insertTransaction, que diz assim: Sendo uma conta1 do tipo JOINT e uma conta2 do tipo SAVINGS, e as contas pertencem ao cliente Paulo Farias, então crie uma transação da conta1 para a conta2 cujo total é a metade do saldo da conta1 e coloque seu status como INIT. Insira a transação na memória de trabalho. Criar regra highTransaction, que diz assim: Para uma transação com um total maior que 10000 e status INIT, então coloque seu status para PENDING e atualize o objeto. No final desta regra coloque a seguinte linha: report.addMessage("highTransaction" + $transaction.getAccountFrom().getNumber() + $transaction.getAccountTo().getNumber());