Jess – the Rule Engine for the Java™ Platform Inteligência Artificial Aplicada a Controle de Processos e Automação Industrial Jess Grupo: Francisco de Assis Neto Rodrigo Tacla Saad Marcelo Valverde Jess – Apresentação Sistemas Especialistas: O que são? Para que servem? Arquitetura Ferramentas - Comparativo Jess O que é? História Problema Motivador – Assistente de Vendas Implementação do Problema Jess – Sistemas Especialistas O que são? Sistemas Especialistas são programas de computador que contêm conhecimentos específicos de um tema de um ou mais especialistas humanos. Estes programas foram inicialmente desenvolvidos por pesquisadores da área de Inteligência Artificial entre os anos de 1960 e 1970 e usados comercialmente depois dos anos 80. A forma mais comum dos sistemas especialistas são os programas feitos sobre regras que analisam informações (geralmente inseridas pelo usuário do sistema) sobre um problema relacionado a um tema específico, como também fornecendo a análise do problema, e, dependendo da implementação do sistema, pode recomendar ao usuário a melhor ação a tomar. Jess – Sistemas Especialistas Para que Servem? Sistemas Especialistas são muito valiosos para organizações que possuem alto nível de knowhow e expertise, os quais são muito difíceis de serem transferidos entre os membros. Eles são projetados para possuírem a inteligência e a informação encontradas no intelecto dos experts e repassá-las para os outros membros da organização. Jess – Arquitetura Arquitetura com trés módulos: uma base de regras, uma memória de trabalho e um motor de inferência. Jess – Comparativo I Jess – Comparativo II Jess – O que é? Desenvolvido por Ernest Friedman-Hill (Sandia National Labs), 1995. Plataforma Java para Sistemas Especialistas Ferramenta proprietária. Plug-in do Eclipse. Compila arquivo baseados em CLIPS. API Java documentada e com código fonte disponível. Algoritmo de RETE. Jess – História (LISP) LISt Processing Linguagem de programação funcional concebida por John McCarthy em 1958. Baseado no Lambda Cálculo (Alonzo Church, década de 30). Amplamente difundida na comunidade de IA. (defun factorial (n) (if (<= n 1) 1 (* n (factorial (- n 1))))) Jess – História (CLIPS) C Language Integrated Production System Deselvonvida em 1984 (NASA - Johnson Space Center). Implementar Sistemas Especialistas. Problemas do LISP: Não era disponível em vários computadores. Alto custo de hardware e software. Pouca integração com outras linguagens Atualmente é uma ferramenta de código livre. Jess – Assistente de Vendas Objetivo: Implementação de um assistente de vendas de automóveis. Esperteza: O assistente deduz o estilo da pessoa e sugere os automóveis mais indicados. Dados para análise: O assistente é alimentado com alguns dados, são eles: idade, sexo, estado civil, número de filhos, renda mensal e o período de financiamento. Obs: O assistente deve oferecer somente carros que o cliente tem capacidade de pagar. Jess – Representação do Conhecimento Quadros: Consiste em um conjunto de atributos (slots) que descrevem características do objeto representado. Permite representar a herança de propriedades. deftemplate: Quadros (estrutura dos fatos) são definidos através do comando “deftemplate”. ex: (deftemplate automovel (slot garantia) (slot modelo) (slot fabricante) (slot preco)) Jess – Representação do Conhecimento Jess – Memória de Trabalho Fatos: Para o Jess, todo fato na memória de trabalho é visto como uma tupla de uma tabela relacional. Ele sempre possui um nome e um conjunto de propriedades. assert: Insere fatos, com estruturas previamente definidas ou não, na memória de trabalho. deffacts: Insere uma lista de fatos de uma vez. ex: (deffacts start (phase start) (popular (modelo uno) (garantia 1ano) (fabricante fiat) (preco 18000))) Jess – Funções deffunctions: Jess permite que você defina suas próprias funções. Ex: (deffunction printCar (?modelo ?garantia ?fabricante ?preco ?portas ?consumo ?potencia) (printout t "Carro:"?modelo crlf "Especificacoes:" crlf "fabricante = "?fabricante crlf "garantia = "?garantia crlf "preco = "?preco crlf "portas = "?portas crlf "consumo = "?consumo crlf "potencia = "?potencia crlf crlf)) Jess – Regras Uma regra em Jess é algo como declarações if....then usadas nas linguagens procedurais, mas estas não são usadas de forma procedural. Enquanto if...then são executadas em momentos definidos e em uma ordem definida, de acordo como o programador as escreveu, regras em jess são executadas sempre que seus “ifs” (parte esquerda ou LHS) são satisfeitas. Isto torna as regras em Jess menos determinísticas que em um programa procedural típico. defrules: O comando defrules é formado por duas partes separadas pelo símbolo “=>”, o qual pode ser lido como a palavra “then”. A primeira parte do comando (LHS) consiste nas condições aplicadas sobre os fatos armazenados na memória de trabalho. A segunda parte (RHS) consiste nas ações (chamadas de funções). Jess – Regras Ex:(defrule start ?phase <- (phase start) => (retract ?phase) (printout t "Seja Bem Vindo ao assitente Virtual. " crlf) (assert (phase askAge))) (defrule whichStyle_popular (declare (salience 1)) ?phase <- (phase testStyle) (userMonthlyIncome ?mi&:(> ?mi 1000)) => (retract ?phase) (printout t "Estilo Popular. " crlf) (assert (userStyle Popular)) (assert (phase getCar))) Jess Fim Obrigado