520 likes | 614 Views
Representando Conhecimento em uma Linguagem Orientada a Objetos: a Solução EOOPS. Abordagens de programação EOOPS: Integração objetos-regras de produção. Exemplos Atuais de Aplicações Complexas. Recuperação de Informação na Internet Informação desorganizada e enorme Comércio Eletrônico
E N D
Representando Conhecimento em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção
Exemplos Atuais de Aplicações Complexas • Recuperação de Informação na Internet • Informação desorganizada e enorme • Comércio Eletrônico • Vários sites, produtos, preços, prazos, etc. • Jogos Eletrônicos • Realismo e oponentes competitivos
Pontos em comum • Aplicações 3M • Muito grande (muitas linhas de código) • Muita gente • Muitos e variados serviços (componentes) • Serviços IA (dedução, indução, comunicação,...) • Modelo das preferências do usuário, coordenação de ações, comportamento dirigido a objetivos,... tudo encapsulado no conceito de agente • Serviços não-IA • BD, GUI, WWW, Mobilidade, ...
Consequentemente, é preciso... • Engenharia de Software • Metodologia, gerência e qualidade de software • Material humano qualificado • Cada vez mais escasso • Reutilização e integração de componentes (serviços) • Não “reinventar a roda” • Questão: como integrar e facilitar reutilização?
Reasoning Mechanism Como implementar os agentes? • “Linguagens de IA” • Orientadas a agentes (ex. Agent0, Placa, 3APL) • Programação em lógica (prolog) + Oferecem os serviços básicos dos agentes + Coesão - Sistemas desenvolvidos não são facilmente integráveis • Poucos componentes a reutilizar e pouca gente • Metodologia? AIOL (AI-OrientedLanguage)
Host AI - Oriented Language Language Como implementar os agentes? • Linguagens orientadas a objetos • Java, C++, ... + Facilitam a reutilização e integração de serviços + Engenharia de software + Mão de obra disponível - Não oferecem de antemão as funcionalidades dos agentes (raciocínio)
Integração Objetos / Regras de produção Por que não ter o melhor dos mundos?
AIOL OO Reasoning Mechanisms Mechanism Como integrar dedução com OO? • OO dentro de IA • ex. ObjLog (fim dos anos 80), LIFE, .... + trata herança mais facilmente - mesmos problemas de integração com outros sistemas e de pouca reutilização
AI AIOL Host Host Language Language Reasoning Mechanism Como integrar dedução com OO? • IA e OO cooperando • ex. Jasper, JavaLog, InterProlog (fim anos 90) + técnica promissora mas... - requer dupla habilidade de programação - pode não ser eficiente ou viável Tempo de execução
Host Language Como integrar dedução em OO? • IA dentro de OO • Abordagem 1: Tradução • ex. Prolog Café , jProlog, Minerva and Jinni • “Caixa preta” • Muito bom mas ainda requer dupla habilidade AI - Oriented AI - Oriented Translator Language Language Reasoning Mechanism
Extended Host Knowledge Language Base - - - - ---- - - - - ---- - - - - - -- - - - - ---- - - - - - - Como integrar dedução em OO? • IA dentro de OO • Abordagem 2: Novas Agent-Oriented (Hybrid) Programming Languages • Primitivas redefinidas/extendidas!!! • ex. Jack e AgentJava - excelentes (caixa branca) mas ainda incipientes....
Como integrar dedução com OO? • IA dentro de OO • Abordagem 3: API • ex. CLIPS, NéOpus, RAL/C++ (meados dos anos 80) • Implementação mais usada: EOOPS • Embedded Object-Oriented Production Systems • Linguagem OO + Sistema de Produção
Lembrete sobre sistemas de produção • Conjunto de • Base de regras de produção • Base de fatos • Conjunto de conflitos (das regras disparáveis) • Passos (encadeamento progressivo) • Unificação da condições com os fatos • Resolução de conflitos entre regras ativas • Execução das ações da regra
Regras de Produção • Representam conhecimento com pares condição-ação • Secondição (ou premissa ou antecedente) ocorre entãoação (resultado, conclusão ou conseqüente) deverá ocorrer. • Regras de produção produzem novos fatos a partir dos fatos e regras da BC. • Esses novos fatos passam a fazer parte da BC
Regras de Produção • Formalismo mais simples, procedimental e popular animal(x)^estimação(x)^pequeno(x) => doméstico(x) premissas conseqüente • Base de fatos e base de regras animal(Rex),estimação(Rex),pequeno(Rex) • Mecanismo de inferência: São produzidos novos fatos instanciando fatos existentes nas regras (encadeamento para a frente) • Estratégia de controle: resolução de conflito
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
Base defatos Base de Regras Motor de Inferência Pai(João, José) Pai(José, Marcos) unificação p1, p2, p3: Pai(p1,p2) Pai(p2,p3) Avo(p1,p3) Avo(João, Marcos) Lembrete sobre sistemas de produção
unificação Conjunto de Conflito resolução de conflitos Regra execução Novos Fatos Lembrete sobre sistemas de produção Base de Regras Base de Fatos Ciclo Obs: para não ter de re-testar a cada ciclo, só testa os fatos modificados (retirados, adicionados)
p1, p2, p3: Pai(p1,p2) Pai(p2,p3) Avo(p1,p3) Pai(João, José) Pai(José, Marcos) Nome: Marcos Nome: José Nome: João Regra Avo Para todo objeto p1, p2 e p3 da classe Pessoa, SE p1.ehPai(p2); p2.ehPai(p3); ENTÃO pai pai Pessoa Pessoa Pessoa 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)
Integração Objetos/Regras em EOOPS: características • Eficiência • RETE? • Expressividade • ordem lógica (0, 0+, 1) implementada? • Encadeamentos • Progressivo e/ou regressivo? • Estratégias de Controle • Flexível? Declarativa? • Uniformidade da integração
Uniformidade da Integração • Aspectos • Sintático: como aparentam as regras? • Semântico: quão respeitados são os conceitos da linguagem OO? • Vantagens • Facilidade de uso • Engenharia de Software: reutilização, modularidade, extensibilidade, ...
Uniformidade da Integração • Desvantagens: modified problem • Encapsulamento não permite ao motor de inferência “ver” as mudanças em um objeto (fato) • ex. como saber se um objeto Pessoa passou a ter avô sem precisar perguntá-lo (de novo)?
Sistema Ling. Progr. Unif. Integr. Serviços Eficiência Encad. Resol. Conflitos CLIPS C++ - - +/- - RAL/C++ C++ +/- + + - NéOpus Smalltalk + - +/- + JESS Java - +/- +/- - JEOPS Java + + +/- +/- Integração Objetos/Regras:Algumas Propostas
Regras CLIPS • Nem todos objetos são utilizados • As regras tem sintaxe própria (lisp-like) (defclass Pessoa (is-a USER) (role concrete) (pattern-match reactive) (slot nome (create-accessor read-write)) (slot pai (create-accessor read-write))) (defrule RegraAvo "O pai do pai de alguém é seu avô” ?a <- (object (is-a Pessoa) (nome ?nomeAvo)) ?p <- (object (is-a Pessoa) (nome ?nomePai) (pai ?a)) (object (is-a Pessoa) (nome ?nomeNeto) (pai ?p)) => (printout t ?nomeAvo “ é avô de ” ?nomeNeto crlf) )
CLIPS • Outras caraterísticas • COOL (CLIPS Object-Oriented Language) • Foi uma linguagem utilizada bem difundida (> 5.000 usuários) • Aplicações • medicina, multiagentes, helpdesk, aplicações aeroespaciais, etc. • Sites • http://herzberg.ca.sandia.gov/jess/ • http://www.ghg.net/clips/CLIPS.html
Regras RAL/C++ • Utiliza classes C++, se indicado • Sintaxe um pouco mais próxima à de C++ class Pessoa { public: char nome[20]; Pessoa pai; ... } wmedef PessoaMT:Pessoa {} RegraAvo { // O pai do pai de alguém é seu avô Avo (PessoaMT nome::NomeAvo) Pai (PessoaMT nome::NomePai pai==Avo) Neto (PessoaMT nome::nomeNeto pai==Pai) --> printf(“%s é avô de %s\n”, NomeAvo, NomeNeto); )
Regras NéOpus • Toda classe Smalltalk • Regras com sintaxe de Smalltalk Object subclass: #Pessoa instanceVariableNames: ‘nome pai’! RegraAvo “O pai do pai de alguém é seu avô” | Pessoa a p n | a = p pai. p = n pai. actions Transcript show: a nome, ‘ é avô de ’, n nome, cr.!
Pessoa nome idade timePreferido(): Time timePreferifo(t : Time) Time nome nome(): String nome(n : String) NéOpus • ViraCasaca | Pessoa p| (p timePreferido) nome = “Santa Cruz”. Actions | Time bom | bom := Time new. bom nome: “Sport”. p timePreferido: bom. P modified. time
NéOpuswww-poleia.lip6.fr/~fdp/NeOpus.html • Outras características • Bases de regra são representadas por classes abstratas (herança!) • Controle declarativo (via Metabase) • Aplicações • controle de aparelhos respiratórios, prova de teoremas, transformação de modelo de dados, análise de harmônicas, Actalk,... • Infelizmente... • SmallTalk dançou!
Regras JESS (CLIPS para Java) • Pode usar classes Java, com restrições • Regras com sintaxe própria (lisp-like) class Pessoa { private String nome; private Pessoa pai; ... } (defclass Pessoa Pessoa) (defrule RegraAvo "O pai do pai de alguém é seu avô” ?a <- (Pessoa (nome ?nomeAvo)) ?p <- (Pessoa (nome ?nomePai) (pai ?a)) ?n <- (Pessoa (nome ?nomeNeto) (pai ?p)) => (printout t ?nomeAvo “ é avô de ” ?nomeNeto crlf) )
JEOPS Java Embedded Object Production System Made in Cin (1997/2-2000/1) http://www.di.ufpe.br/~jeops/ http://sourceforge.net/projects/jeops/
JEOPS - Princípios • Java • 1001 serviços • Uniformidade total de integração • Reutilização de componentes • Engenharia de Software • Facilidade de uso • Fachada única de acesso
Base de Objetos Base Interna de Regras Knowledge Conjunto de Conflito Base - - - - ---- - - - - ---- - - - - - -- - - - - ---- - - - - - - JEOPS - Arquitetura Agente assert run objects flush JEOPS Rete Gera entradas Consulta Base de Conhecimentos Assert = insere objetos na base de objetos Objects = recupera objetos da base de objetos Flush = limpa base de fatos
Regras JEOPS • Rule ::= "rule" "{" <Rule Body> "}" • Rule Body ::= <Declarations> <Local Declarations>? <Conditions> <Actions> • Declarations ::= "declarations" (<class name> <ident> ("," <ident>)* )* • Local Declarations ::= "localdecl" (<class name> <ident> "=" <expression>)* • Conditions ::= "conditions" (<expression>)* • Actions ::= (Action)+ • Action ::= "assert" "(" <expression> ")" | "retract" "(" <expression> ")" | "modified" "(" <expression> ")" | <block>
JEOPS - Exemplo de Utilização • Definição das classes • Jogador, Time, Partida, ... class Jogador { private Time time; private int habilidade; ... } class Partida { private int etapa; private int tempo; ... } class Time { private Jogador[] jogs; ... } class Goleiro extends Jogador { ... } class Atacante extends Jogador { ... } class Meia extends Jogador { ... }
JEOPS - Exemplo de Utilização • Criação das regras rule Retranca { declarations Partida p; Jogador a; localdecl Time meuTime = a.getTime(); conditions p.getEtapa() == 2; // Estamos no segundo tempo, ... p.getPlacar(meuTime) >= p.getPlacarAdversario(meuTime); meuTime.getCategoria() < // ... e eu sou ruim p.getTimeAdversario(meuTime).getCategoria(); actions a.vaParaDefesa(); // Então bola pro mato... modified(a); }
JEOPS - Exemplo de Utilização • Criação dos objetos • Execução do motor de inferência RegrasFutebol base = new RegrasFutebol(); Time camaroes = new Time(“Camaroes”); base.assert(camaroes); base.assert(new Atacante(camaroes, “MBoma”)); base.assert(new Lateral(camaroes, “Mila”)); base.assert(new Meia(camaroes, “Nkekessi”)); base.assert(new Goleiro(camaroes, “Silva”)); ... base.assert(new Partida(brasil, camaroes)); base.run();
JEOPS - Outras Características • Pré-compilação de regras • Regras convertidas em classes Java • comando: • java jeops.compiler.Main nome_do_arquivo.rules • Rete • Algoritmo eficiente de unificação • Aplicações • Administração de rede, Jogos interativos (NetMaze, Enigmas, Guararapes), Recuperação de Informação, Geração de variações fonéticas
JEOPS - Outras Características • Resolução de conflitos • Mecanismo flexível de definição de políticas • Classes • LRUConflictSet • MRUConflictSet • NaturalConflictSet • OneShotConflictSet • PriorityConflictSet
Drools • Faz parte do Jboss, um servidor de aplicação open-source completamente escrito em Java • Segue o padrão JSR-94 de rule engines • Provê uma plataforma integrada para incluir lógica de negócio em um sistema • Um novo conceito: Blip (Business Logic Integration Platform) • Integra regras, eventos e raciocínio temporal
DroolsExpert • O Drools Expert é a engine de regras componente da plataforma Drools • Baseado no algoritmo RETE • Totalmente integrável com Java • Integração transparente através de um plug-in do eclipse • Pode ler classes Java nas condições das regras; • Pode chamar métodos de java na ação das regras;
Exemplo no domínio dos veículos • Fatos iniciais: num-rodas=4, motor=sim, num-portas=3, tamanho=médio • Fase de “casamento” • Automóvel: Se num-rodas=4 E motor=sim Então veículoTipo=automóvel
No Drools: Regra Automóvel rule"Automovel" when v : Veiculo (num_rodas == 4, motor == true, tipo != ETipoVeiculo.Automovel) then v.setTipo(ETipoVeiculo.Automovel); update(v) end
Encadeamento progressivo:Exemplo no domínio dos veículos • Fatos na MT: • num-rodas=4; motor=sim; num-portas=3; tamanho=médio • veículoTipo=automóvel • MiniVan:Se veículoTipo=automóvel E tamanho=médio E num-portas=3 Então veículo=MiniVan
No Drools: Regra Automóvel rule“Minivan" when v : Veiculo (num_portas == 3, tamanho == Etamanho.Medio, tipo == ETipoVeiculo.Automovel) then v.setConceito(“Minivan”); update(v); end
Passos para o desenvolvimento de aplicações 1. Definir as classes • Atributos e métodos 2. Definir as regras • Interação entre os objetos da base 3. Voltar ao passo 1 4. Escolher estratégia de resolução de conflito 5. Deixar a base de conhecimentos trabalhar...
Considerações Finais sobre a Integração Objetos/Regras • Vantagens • Reutilização, modularidade, legibilidade, extensibilidade, ... • Separação clara entre ontologia e regras (IA) • Facilidade de aprendizado (disponibilidade de gente)
Considerações Finais sobre a Integração Objetos/Regras • Desvantagem: falta de metodologia • O que vai para as regras e o que vai para os objetos? • Dica: procedimentos, conhecimento consolidado, cálculos eficientes, serviços diversos (ex. BD, WWW) , ... => métodos • Executa logo? • Parte ação das regras: agenda ou executa? • Agente dentro e fora da KB?
Agentes x Base de Conhecimento? • Agentes estão dentro da base de objetos • Por exemplo jogadores estão dentro de uma base sobre jogar futebol... • É como se fosse uma agente externo (a base do agente “técnico”) • Cada agente tem sua BC (atributo) • Ciclo { • Percepções => base de objetos (da BC) • Run BC • Recupera da BC ações a serem executadas • Executa ações}