Regras de Produção: o Motor de Inferência JESS Prof. Fred Freitas CIn - UFPE
Componentes de um  Motor de Inferência <ul><li>Um  formalismo  lógico de Representação de Conhecimento </li></ul><ul><ul><...
Regras de Produção <ul><li>Representam conhecimento com pares  condição-ação </li></ul><ul><ul><li>Se   condição  (ou  pre...
Regras de Produção <ul><li>Formalismo mais simples, procedimental e popular </li></ul><ul><li>animal(x)^estimação(x) </li>...
Sistemas de Produção <ul><li>Fatos:  x ,  y </li></ul><ul><li>Regras:  x & y => assert(p) </li></ul><ul><li>Encadeamento p...
Módulos de Sistemas de Produção <ul><li>Base de Regras ou memória permanente  </li></ul><ul><ul><li>regras se-então e fato...
Arquitetura de Sistemas de Produção
Funcionamento de um sistema de regras de produção <ul><li>As regras seriam a memória duradoura </li></ul><ul><li>Os fatos ...
Sistemas Especialistas Facts &quot;Item #123 is expensive speakers&quot; &quot;Gold cables are expensive&quot; &quot;Bob i...
Sistemas Especialistas Facts Rules Inference Engine For every customer, for every item in their cart, if it is speakers, f...
O Algoritmo Rete <ul><li>Representa regras como  dados </li></ul><ul><li>O compilador gera máquinas de estado a partir de ...
O Algoritmo Rete Facts Rules Inference Engine When a customer picks out an item, if it is speakers, recommend the appropri...
O Algoritmo Rete <ul><li>x & y => assert(p) </li></ul><ul><li>x & y & z => assert(q) </li></ul>x? y? x? y? z? p q “ rede d...
O Algoritmo Rete <ul><li>x & y => p </li></ul><ul><li>x & y & z => q </li></ul>x? y? z? p q 6 nós Otimização 1: Compartilh...
O Algoritmo Rete <ul><li>x & y => p </li></ul><ul><li>x & y & z => q </li></ul>x? y? z? p q 5 nós Otimização 2: Compartilh...
Boas práticas: eficiência <ul><li>Durante o projeto de regras, lembrar que elas são implementadas através de uma rede  </l...
Praticando <ul><li>java jess.Main – inicia o motor  </li></ul><ul><li>Dentro do Jess: </li></ul><ul><li>Comandos de vizual...
Definindo fatos e regras <ul><li>(assert <fato>) – põe um fato na base  </li></ul><ul><ul><li>Ex: (assert (pequeno fido)) ...
Exemplos <ul><li>Fido </li></ul><ul><li>(batch example/Diver1.clp) </li></ul><ul><li>(batch example/Diver2.clp) </li></ul>
Problemas de mergulho: DIVER1.CLP
<ul><li>Problemas de  </li></ul><ul><li>mergulho mais  </li></ul><ul><li>Detalhados: </li></ul><ul><li>DIVER2.CLP </li></ul>
A Linguagem das Regras <ul><li>(defrule recommend-appropriate-cables </li></ul><ul><li>(customer (id  ?id ) (cart ?cart)) ...
Pacotes (módulos) de Regras <ul><li>Apesar de não queremos controlar o fluxo de processamento, às vezes precisamos de fase...
Qualidades das Regras <ul><li>São fáceis de compreender (legíveis) e de modificar </li></ul><ul><li>Independência e  Local...
Desvantagens <ul><li>Há problemas eminentemente procedimentais  </li></ul><ul><li>Eficiência </li></ul><ul><li>Fácil funci...
Sistemas de Produção Plugáveis   <ul><li>Antes: Dificuldade de integrar as linguagens lógicas – LISP e Prolog- com as outr...
CLIPS: Integração C-regras <ul><li>&quot;C” Language Integrated Production System ) [Giarratano & Riley 98] </li></ul><ul>...
JESS  - Java Expert System Shell <ul><li>Integra objetos Java e Java  beans  a regras </li></ul><ul><li>Projetado para ser...
Frames  e Herança em JESS <ul><li>Herança </li></ul><ul><ul><li>apenas herança simples </li></ul></ul>(deftemplate ANIMAL ...
Manipulando JESS a partir de Java <ul><li>Exemplo: alterando a base de fatos a partir de um código em um projeto Java </li...
Integração com Java  <ul><li>new   </li></ul><ul><ul><li>Conversões de tipo </li></ul></ul><ul><ul><li>import </li></ul></...
Integração com Java <ul><li>(import java.util.*) </li></ul><ul><li>; create a Vector, add entries </li></ul><ul><li>(bind ...
Jess e Ontologias via Protégé <ul><li>Integrados via plugin Protégé JessTab [Eriksson 2003] </li></ul><ul><li>Agora Jess p...
Achar as cidades paraibanas mais próximas (entre 5   ) <ul><li>Arara </li></ul><ul><li>João Pessoa </li></ul><ul><li>Espe...
Estilo de programar com regras <ul><li>Na ontologia temos : </li></ul><ul><ul><li>City </li></ul></ul><ul><ul><ul><li>x,y,...
1º. Calcular as distâncias <ul><li>Função (distância euclidiana): </li></ul><ul><li>(deffunction fdist  (?x1 ?y1 ?x2 ?y2) ...
1º. Calcular as distâncias <ul><li>(defrule dist </li></ul><ul><li>(object (is-a City) (OBJECT ?o1) (name ?n1)  (x ?x1) (y...
3º Achar o menor <ul><li>3.1. Criar o predicado menor </li></ul><ul><li>(defrule first-menor </li></ul><ul><li>(not (close...
3º Achar o menor <ul><li>(defrule menor </li></ul><ul><li>?f <- (closer ?oc) </li></ul><ul><li>(object (distance (city1 ?o...
Conclusões <ul><li>Formalismo fácil de usar </li></ul><ul><li>Integrável a uma linguagem hospedeira (C, java,...) </li></u...
Próximos SlideShares
Carregando em…5
×

Regras de Produção: o Motor de Inferência JESS

3.384 visualizações

Publicada em

Publicada em: Tecnologia, Negócios
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.384
No SlideShare
0
A partir de incorporações
0
Número de incorporações
22
Ações
Compartilhamentos
0
Downloads
68
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Regras de Produção: o Motor de Inferência JESS

    1. 1. Regras de Produção: o Motor de Inferência JESS Prof. Fred Freitas CIn - UFPE
    2. 2. Componentes de um Motor de Inferência <ul><li>Um formalismo lógico de Representação de Conhecimento </li></ul><ul><ul><li>Ex: Lógica de Descrição, Frames , regras, etc. </li></ul></ul><ul><li>Um método ou estratégia de resolução ou mecanismo de inferência para o formalismo </li></ul>
    3. 3. Regras de Produção <ul><li>Representam conhecimento com pares condição-ação </li></ul><ul><ul><li>Se condição (ou premissa ou antecedente ) ocorre </li></ul></ul><ul><ul><li>então ação ( resultado , conclusão ou conseqüente ) deverá ocorrer. </li></ul></ul><ul><li>Regras de produção produzem novos fatos a partir dos fatos e regras da BC. </li></ul><ul><ul><li>Esses novos fatos passam a fazer parte da BC </li></ul></ul>
    4. 4. Regras de Produção <ul><li>Formalismo mais simples, procedimental e popular </li></ul><ul><li>animal(x)^estimação(x) </li></ul><ul><li>^pequeno(x) => (assert(doméstico(x)) </li></ul><ul><li>premissas conseqüente </li></ul><ul><li>Base de fatos e base de regras </li></ul><ul><li>animal(Rex),estimação(Rex),pequeno(Rex) </li></ul><ul><li>Mecanismo de inferência: São produzidos novos fatos instanciando fatos existentes nas regras (encadeamento para a frente) </li></ul><ul><li>Estratégia de controle: resolução de conflito </li></ul>
    5. 5. Sistemas de Produção <ul><li>Fatos: x , y </li></ul><ul><li>Regras: x & y => assert(p) </li></ul><ul><li>Encadeamento para a frente ( Forward chaining ) </li></ul><ul><ul><li>Dados x e y, derive então p </li></ul></ul><ul><ul><li>OPS5, CLIPS, Jess </li></ul></ul><ul><ul><li>Orientado a dados: O sistema deriva todas as conclusões possíveis, mesmo se elas não ajudam a resolver o problema </li></ul></ul><ul><li>Encadeamento para trás ( Backward chaining ) </li></ul><ul><ul><li>p é verdad? Então verificarei x e y. </li></ul></ul><ul><ul><li>Prolog </li></ul></ul>
    6. 6. Módulos de Sistemas de Produção <ul><li>Base de Regras ou memória permanente </li></ul><ul><ul><li>regras se-então e fatos conhecidos </li></ul></ul><ul><li>Memória de Trabalho ou temporária </li></ul><ul><ul><li>percepções do agente, fatos iniciais e gerados a partir da BR pelo mecanismo de inferência </li></ul></ul><ul><li>Mecanismo (motor) de Inferência </li></ul><ul><ul><li>determina o método de raciocínio utilizado (progressivo ou regressivo) </li></ul></ul><ul><ul><li>Executa a busca com casamento (unificação) </li></ul></ul><ul><ul><li>resolve conflitos e executa ações. </li></ul></ul>
    7. 7. Arquitetura de Sistemas de Produção
    8. 8. Funcionamento de um sistema de regras de produção <ul><li>As regras seriam a memória duradoura </li></ul><ul><li>Os fatos seriam a memória de trabalho </li></ul><ul><li>Ao usarmos as regras sobre os fatos, são derivados novos fatos </li></ul><ul><li>O ciclo se repete até que não haja mais fatos a derivar </li></ul><ul><li>Conflito: várias regras podem ser disparadas ao mesmo tempo </li></ul>
    9. 9. Sistemas Especialistas Facts &quot;Item #123 is expensive speakers&quot; &quot;Gold cables are expensive&quot; &quot;Bob is a customer&quot; &quot;Bob is buying item #123&quot; Rules &quot;Recommend appropriate cables when customers buy speakers&quot; Inference Engine List of Actions to Take &quot;Recommend that Bob buy gold cables.&quot; O problema é simples... [Friedman-Hill]
    10. 10. Sistemas Especialistas Facts Rules Inference Engine For every customer, for every item in their cart, if it is speakers, for every catalog item, if the cart item is the catalog item, if the catalog item is in some price category, for every catalog item, if it is a cable and it is in the same category, recommend that cable to that customer. List of Actions to Take &quot;Recommend that Bob buy gold cables.&quot; ... Mas a solução é cara: O (RF P )
    11. 11. O Algoritmo Rete <ul><li>Representa regras como dados </li></ul><ul><li>O compilador gera máquinas de estado a partir de regras </li></ul><ul><li>Novos fatos guiam a máquina de estado (orientado a dados) </li></ul><ul><li>O algoritmo lembra os estados antigos </li></ul><ul><li>Charles L. Forgy, Artificial Intelligence 19 (1982), 17-37. </li></ul>
    12. 12. O Algoritmo Rete Facts Rules Inference Engine When a customer picks out an item, if it is speakers, recommend the appropriate cables. List of Actions to Take &quot;Recommend that Bob buy gold cables.&quot; ... o algoritmo Rete pode ser O(RF)
    13. 13. O Algoritmo Rete <ul><li>x & y => assert(p) </li></ul><ul><li>x & y & z => assert(q) </li></ul>x? y? x? y? z? p q “ rede de padrões&quot; “ rede conjunta&quot; 8 nós [Friedman-Hill]
    14. 14. O Algoritmo Rete <ul><li>x & y => p </li></ul><ul><li>x & y & z => q </li></ul>x? y? z? p q 6 nós Otimização 1: Compartilhamento da rede de padrões x & y => assert(p) x & y & z => assert(q)
    15. 15. O Algoritmo Rete <ul><li>x & y => p </li></ul><ul><li>x & y & z => q </li></ul>x? y? z? p q 5 nós Otimização 2: Compartilhamento na rede conjunta x & y => assert(p) x & y & z => assert(q)
    16. 16. Boas práticas: eficiência <ul><li>Durante o projeto de regras, lembrar que elas são implementadas através de uma rede </li></ul><ul><li>Evitar predicados com atributos muito gerais e que variam com freqüência (ex: status); </li></ul><ul><li>Construir o lado das premissas como uma consulta eficiente de banco de dados, ou seja, contendo apenas predicados necessários ao disparo de regras. </li></ul>
    17. 17. Praticando <ul><li>java jess.Main – inicia o motor </li></ul><ul><li>Dentro do Jess: </li></ul><ul><li>Comandos de vizualização: </li></ul><ul><ul><li>(facts) – vê a base de fatos </li></ul></ul><ul><ul><li>(watch compilations) – vê o processo de compilação da base de regras na rede </li></ul></ul><ul><ul><li>(watch facts) – vê cada modificação na base de fatos </li></ul></ul><ul><ul><li>(watch activations) – vê cada ativação de regra </li></ul></ul><ul><ul><ul><li>Quando a regra está pronta para ser disparada </li></ul></ul></ul><ul><ul><li>(watch rules) – vê as regras sendo disparadas </li></ul></ul><ul><ul><li>(watch all) – todas as opções acima </li></ul></ul><ul><ul><li>(unwatch XXX) – para desabilitar as opções acima </li></ul></ul>
    18. 18. Definindo fatos e regras <ul><li>(assert <fato>) – põe um fato na base </li></ul><ul><ul><li>Ex: (assert (pequeno fido)) </li></ul></ul><ul><li>(defrule <nome da regra> </li></ul><ul><ul><li><padrão de fato 1> Lado esquerdo da </li></ul></ul><ul><ul><li>... regra (LHS) </li></ul></ul><ul><ul><li><padrão de fato n> </li></ul></ul><ul><ul><li>=> </li></ul></ul><ul><ul><li><ação 1> Lado direito da </li></ul></ul><ul><ul><li>... regra (RHS) </li></ul></ul><ul><ul><li><ação n> </li></ul></ul><ul><ul><li>) </li></ul></ul>
    19. 19. Exemplos <ul><li>Fido </li></ul><ul><li>(batch example/Diver1.clp) </li></ul><ul><li>(batch example/Diver2.clp) </li></ul>
    20. 20. Problemas de mergulho: DIVER1.CLP
    21. 21. <ul><li>Problemas de </li></ul><ul><li>mergulho mais </li></ul><ul><li>Detalhados: </li></ul><ul><li>DIVER2.CLP </li></ul>
    22. 22. A Linguagem das Regras <ul><li>(defrule recommend-appropriate-cables </li></ul><ul><li>(customer (id ?id ) (cart ?cart)) </li></ul><ul><li>(cart (id ?cart) (contents $?cnt)) </li></ul><ul><li>(item (id ?s&:(member$ $?cnt ?s)) </li></ul><ul><li>(is speaker)(price-category ?pc)) </li></ul><ul><li>(not (item (id ?c&:(member$ $?cnt ?c)) </li></ul><ul><li>(is cable) </li></ul><ul><li>(price-category ?pc)) </li></ul><ul><li>=> </li></ul><ul><li>(printout t &quot;You need to buy &quot; ?pc </li></ul><ul><li>&quot; cables.&quot; crlf)) </li></ul>[Friedman-Hill]
    23. 23. Pacotes (módulos) de Regras <ul><li>Apesar de não queremos controlar o fluxo de processamento, às vezes precisamos de fases </li></ul><ul><ul><li>Em manutenção de dispositivos eletrônicos, e.g., as fases de detecção, isolamento, conserto e funcionamento </li></ul></ul><ul><li>Organizar regras em pacotes (módulos) que são ativados um por vez </li></ul><ul><ul><li>Engenharia de conhecimento </li></ul></ul>
    24. 24. Qualidades das Regras <ul><li>São fáceis de compreender (legíveis) e de modificar </li></ul><ul><li>Independência e Localidade </li></ul><ul><li>Flexibilidade (Expressividade) </li></ul><ul><li>Genericidade </li></ul><ul><li>Portabilidade </li></ul><ul><li>Facilidade, simplicidade e fidelidade semântica </li></ul><ul><li>Alterabilidade - > código auto-alterável </li></ul><ul><li>Liberdade e gradualidade </li></ul><ul><li>Interoperabilidade de conhecimento </li></ul><ul><ul><li>Vide slides das aulas de ontologias </li></ul></ul>
    25. 25. Desvantagens <ul><li>Há problemas eminentemente procedimentais </li></ul><ul><li>Eficiência </li></ul><ul><li>Fácil funcionamento </li></ul><ul><li>Efetividade </li></ul><ul><li>Fluxo de Controle </li></ul><ul><li>Controle de consistência </li></ul>
    26. 26. Sistemas de Produção Plugáveis <ul><li>Antes: Dificuldade de integrar as linguagens lógicas – LISP e Prolog- com as outras </li></ul><ul><li>Solução adotada: Permitir inferência às linguagens imperativas (C, Java, ...) </li></ul><ul><li>Interoperabilidade, portabilidade e reuso </li></ul><ul><li>Motores de inferência “plugáveis” </li></ul>
    27. 27. CLIPS: Integração C-regras <ul><li>&quot;C” Language Integrated Production System ) [Giarratano & Riley 98] </li></ul><ul><li>Inclui uma linguagem interna, COOL (“C” Object Oriented Language ) que representa classes como frames </li></ul><ul><ul><li>Características de frames : herança múltipla, atributos podem ser instâncias de outras classes, inferência direta, facetas, etc </li></ul></ul>
    28. 28. JESS - Java Expert System Shell <ul><li>Integra objetos Java e Java beans a regras </li></ul><ul><li>Projetado para servir à comunidade de orientação a objetos </li></ul><ul><li>Milhares de usuários </li></ul>
    29. 29. Frames e Herança em JESS <ul><li>Herança </li></ul><ul><ul><li>apenas herança simples </li></ul></ul>(deftemplate ANIMAL (slot color) (slot weight)) (deftemplate CAT extends ANIMAL (slot whisker-count)) ;;CAT has three slots: color, weight, and whisker-count (deftemplate box (slot location) (multislot contents)) (assert (box(location kitchen) (contents spatula sponge frying-pan))) <ul><li>Instanciação </li></ul>
    30. 30. Manipulando JESS a partir de Java <ul><li>Exemplo: alterando a base de fatos a partir de um código em um projeto Java </li></ul>public void definaInstancia(String atomo, Object objeto) throws ReteException { Funcall f = new Funcall(&quot;definstance&quot;, rete); f.add(new Value(atomo, RU.ATOM)); f.add(new Value(objeto, RU.EXTERNAL_ADDRESS)); f.simpleExecute(f, rete.globalContext()); }
    31. 31. Integração com Java <ul><li>new </li></ul><ul><ul><li>Conversões de tipo </li></ul></ul><ul><ul><li>import </li></ul></ul><ul><li>Chamadas a métodos ( Call ) </li></ul><ul><li>get e set </li></ul><ul><ul><li>Manipulação direta das propriedades de um Bean </li></ul></ul><ul><li>try-catch, throw </li></ul><ul><li>Persistência, GUI, Beans, ... </li></ul>
    32. 32. Integração com Java <ul><li>(import java.util.*) </li></ul><ul><li>; create a Vector, add entries </li></ul><ul><li>(bind ?v (new Vector)) </li></ul><ul><li>(call ?v addElement &quot;foo&quot;) </li></ul><ul><li>(call ?v addElement &quot;bar&quot;) </li></ul><ul><li>; iterate over Vector and print entries </li></ul><ul><li>(bind ?e (call ?v elements)) ; retorna um </li></ul><ul><li>; Enumeration que tem metodo nextElement(),… </li></ul><ul><li>(while (call ?e hasMoreElements) do </li></ul><ul><li>(printout t (call ?e nextElement) crlf)) </li></ul>[Friedman-Hill]
    33. 33. Jess e Ontologias via Protégé <ul><li>Integrados via plugin Protégé JessTab [Eriksson 2003] </li></ul><ul><li>Agora Jess passa a ter atributos que podem ser instâncias de outras classes como o CLIPS </li></ul><ul><li>Executável dentro do Protégé </li></ul><ul><li>De Jess, pode-se manipular Protégé e vice-versa </li></ul>
    34. 34. Achar as cidades paraibanas mais próximas (entre 5  ) <ul><li>Arara </li></ul><ul><li>João Pessoa </li></ul><ul><li>Esperança </li></ul><ul><li>Campina Grande </li></ul><ul><li>Pocinhos </li></ul>
    35. 35. Estilo de programar com regras <ul><li>Na ontologia temos : </li></ul><ul><ul><li>City </li></ul></ul><ul><ul><ul><li>x,y,name </li></ul></ul></ul><ul><li>E aí, como achar??? </li></ul>
    36. 36. 1º. Calcular as distâncias <ul><li>Função (distância euclidiana): </li></ul><ul><li>(deffunction fdist (?x1 ?y1 ?x2 ?y2) </li></ul><ul><li>(return (sqrt (+ </li></ul><ul><li>(** (- ?x1 ?x2) 2) </li></ul><ul><li>(** (- ?y1 ?y2) 2))))) </li></ul>
    37. 37. 1º. Calcular as distâncias <ul><li>(defrule dist </li></ul><ul><li>(object (is-a City) (OBJECT ?o1) (name ?n1) (x ?x1) (y ?y1)) </li></ul><ul><li>(object (is-a City) (OBJECT ?o2&~?o1) (name ?n2) (x ?x2) (y ?y2)) </li></ul><ul><li>(not (object (distance (city1 ?o1) (city2 ?o2)))) </li></ul><ul><li>(not (object (distance (city1 ?o2) (city2 ?o1)))) </li></ul><ul><li>=> (make-instance (str-cat ?n1 ?n2) of distance (city1 ?o1) (city2 ?o2) (value (fdist ?x1 ?y1 ?x2 ?y2)) map)) </li></ul>
    38. 38. 3º Achar o menor <ul><li>3.1. Criar o predicado menor </li></ul><ul><li>(defrule first-menor </li></ul><ul><li>(not (closer ?)) </li></ul><ul><li>(object (distance (city1 ?o1) (city2 ?o2) (OBJECT ?o))) </li></ul><ul><li>=> (printout t &quot;a menor distancia agora entre 2 cidades paraibanas é &quot; (* 100 (slot-get ?o value)) &quot; entre &quot; (slot-get ?o1 name) &quot; e &quot; (slot-get ?o2 name)) </li></ul><ul><li>(assert (closer ?o))) </li></ul><ul><li>3.2. Comparar distâncias com o menor </li></ul>
    39. 39. 3º Achar o menor <ul><li>(defrule menor </li></ul><ul><li>?f <- (closer ?oc) </li></ul><ul><li>(object (distance (city1 ?o1) (city2 ?o2) (OBJECT ?o&~?oc) (value ?v&:(< ?v (slot-get ?oc value))))) </li></ul><ul><li>=>(printout t &quot;a menor distancia agora entre 2 cidades paraibanas é “ (* 100 (slot-get ?oc value)) &quot; entre &quot; (slot-get ?o1 name) &quot; e &quot; (slot-get ?o2 name) &quot;.&quot; crlf) </li></ul><ul><li>(retract ?f) </li></ul><ul><li>(assert (closer ?o))) </li></ul>
    40. 40. Conclusões <ul><li>Formalismo fácil de usar </li></ul><ul><li>Integrável a uma linguagem hospedeira (C, java,...) </li></ul><ul><li>Modelo de computação um tanto diferente... </li></ul><ul><li>Vantagens declarativas </li></ul><ul><li>Porém, formalismo não-monotônico </li></ul>

    ×