CEOPS++ Integração entre Objetos e Regras de Produção em C++ Aluno:Pablo de Santana Barbosa Orientador: Geber Lisboa Ramalho.

Slides:



Advertisements
Apresentações semelhantes
Programação Orientada a Objetos*
Advertisements

C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Paulo Marques Hernâni Pedroso
Projeto conceitual Mostra ao cliente exatamente o que o sistema fará
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
Linguagens de Programação Orientadas a Objetos
Programação Básica em Java
INF Computação Gráfica
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Jess – the Rule Engine for the Java™ Platform
Francesca Volcan Pio Maiara Heil Cancian Ricardo Bedin França
Centro Integrado de Tecnologia da Informação
A linguagem C#.
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Classes Abstractas.
Classes e objetos P. O. O. Prof. Grace.
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
Padrão de Projeto Chain of Responsability e Template Method
I- Introdução Motivação.
Linguagem de Programação C#
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
JAVA Linguagem Ambiente de Desenvolvimento
Atributos, Encapsulamento e Interface em Java
Métodos de Construção de Software: Orientação a Objetos
+ Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
+ Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Flora-2 Aula de Laboratório Arquivo do Exemplo  Baixar os arquivos “safari.flr” de ~apln/aulamci em um diretório acessível pelo unix (subpasta no diretório.
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio Jackson, Jean, Patrícia, Saulo Centro de Informática.
DI UFPE Semântica de Java Towards na Operational Semantics and Proof of Type Soundness for Java Sophia Drossopoulou e Susan Eisenbach Imperial College.
Um Framework Para Testes
Paradigmas de Linguagens de Programação Linguagem Orientada a Objetos 1 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal.
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Classes, Objetos, Atributos e Métodos JAVA
JEOPS Java Embedded Object Production System
Padrões de Projeto e Arquitetura em Camadas
Erick Luis Moraes de Sousa
Sistemas Inteligentes
1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.
Pilhas Profa. Nádia Félix.
Representando Conhecimento em uma Linguagem Orientada a Objetos: a Solução EOOPS Abordagens de programação EOOPS: Integração objetos-regras de produção.
JSP e Servlets ISEP – LP2 Filipe Costa – /2004.
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
Wagner Santos C. de Jesus
Aula prática 14 Orientação a Objetos – C++ Parte 2
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Programação Orientada a Objetos - Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Java Básico Instrutor: Davi Pires
Linguagem Orientada a Agentes Allan Lima, Bruno Edson, Nancy Lyra.
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.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
JR: Flexible Distributed Programming in an Extended Java Elmário Gomes Dutra Jr. Gustavo Romano.
Introdução ao C++ para programadores OO Instrutores: Francisco Carvalho, João Paulo do Monte, Renato Viana Ferreira {fcfl, jpsml,
Trabalho de Persistência para o EPOS. Propostas para a Solução Proposta 1: Usar templates, para que quando o usuário deseje que um objeto seja persistente,
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Módulo II Capítulo 1: Orientação a Objetos
OCLE Object Constraint Language Environment Fábio Moura CIn-UFPE.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Linguagem Java Programação II.
Estrutura de Dados Prof. André Cypriano M. Costa
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

CEOPS++ Integração entre Objetos e Regras de Produção em C++ Aluno:Pablo de Santana Barbosa Orientador: Geber Lisboa Ramalho

Jogos e RBS’s  Jogos Exigência de uma IA cada vez mais sofisticada Realismo e oponentes competitivos  RBS São muito utilizados em jogos Poucos motores código aberto no mercado  O caso SmartSim

Jogos e RBS’s  Poucos Motores de código aberto no Mercado  Princípios importante para o uso de RBS’s em jogos Uniformidade de integração Bom desempenho

Roteiro  Motores de código aberto  CEOPS++  Conclusões

Sistemas de Produção e Orientação a Objetos  EOOPS Vantagens  Facilidade de uso  Engenharia de Software: reutilização, modularidade, extensibilidade... Desvantagens  O problema da modificação dos objetos  Quando usar regras ou objetos?

Motores existentes Linguag. Uniformid.DesempenhoRes. Conflitos Facilidade Integração SoarC-+/-- JeopsJava++/-++ ClipsC--+/--  Tabela de comparação

Motor de referência: Jeops Gera entradas Agente Base de Conhecimentos Base de Objetos Rete Base Interna de Regras Conjunto de Conflito Consulta JEOPS flush insert runobjects Knowledge Base

CEOPS++

Fatos  Podem ser qualquer objeto ou estrutura em C++  O CEOPS++ armazena ponteiros para objetos (void*)

Base de Objetos (ceops::ObjectBase)  Guarda referências para todos os objetos da memória de trabalho  Evita duplicação de fatos  Armazena informações de herança de classes  Principais Métodos bool Insert (T* obj) bool Retract (T* obj) void GetObjects (vector & objs) GetSubclasses (vector & subclasses)

Checagem de subtipos(1) (util::TypeCheckFunction)  C++ não suporta reflexão  Suporte limitado a RTTI( Runtime Type Information )  Algumas API’s código aberto tentam prover reflexão  Escolha de uma solução própria Usado em conjunto com a classe TypeCheck template inline void TypeCheckFunction(T* type, vector & subclasses);

Checagem de subtipos(2) (util::TypeCheckFunction) template class TypeCheck { public: TypeCheck() {} bool check(T* t) { return true; } bool check(T& t) { return true; } bool check(void* v) { return false; } };

Checagem de subtipos(3) (util::TypeCheckFunction) template inline void TypeCheckFunction(T* type, vector & subclasses) { TypeCheck typeA; TypeCheck typeB; TypeCheck typeC; if(typeA.check(type)) { //verifica se eh subclasse de A subclasses.push_back(typeid(A).name()); } if(typeB.check(type)) { //verifica se eh subclasse de B subclasses.push_back(typeid(B).name()); } if(typeC.check(type)) { //verifica se eh subclasse de C subclasses.push_back(typeid(C).name()); }

Regras (ceops::AbstractRule)  Sintaxe próxima de C++  Possui três campos distintos: Declarations  Declaração de ponteiros para classes ou estruturas Conditions  Qualquer expressão booleana válida em C++ Actions  Qualquer comando válido em C++  Insert, Modify, Retract

Exemplo de regra CEOPS++ rule GoDown { declarations Fibonacci* f0; conditions f0->getN() > 1; f0->getValue() == -1; f0->getSon1() == NULL; actions int n = f0->getN(); Fibonacci* s1 = new Fibonacci(n - 1); Fibonacci* s2 = new Fibonacci(n - 2); f0->setSon1(s1); f0->setSon2(s2); Insert(s1); Insert(s2); Modified(f0); }

Base de Regras (ceops::AbstractRuleBase)  Funciona apenas como um repositório de regras  Representa o conjunto das regras definidas pelo usuário  Gerada automaticamente pelo pré- compilador

Pré-compilação

Rete (rete::Rete)  Possui apenas a funcionalidade de memorização das avaliações realizadas

Rete (rete::Rete) rule atacar { declarations AgenteJogador agente; //d1 Unidade unidade1; //d2 Unidade unidade2; //d3 Conditions agente.ehDono(unidade1); //c1 agente.ehInimigo(unidade2); //c2 unidade2.getPosicao().distancia( unidade1.getPosicao() ) <= unidade1.getAlcanceAtaque(); //c3 unidade1.getAtaque() > unidade2.getAtaque(); //c4 unidade1.tirosRestantes > 0; //c5 actions unidade1.atacar(unidade2); //a1 }

Conjunto de conflitos (conflict::ConflictSet)  Conjunto que armazena as regras ativas e os objetos que as ativaram  É uma interface que deve ser implementada pelo usuário  Principais Métodos virtual void InsertElement(ConflictSetElement* element) virtual ConflictSetElement* NextElement() void RemoveElementsWith(void* obj)

Elemento do conjunto de conflitos (conflict::ConflictSetElement)  Representa uma regra ativa e os objetos que ativaram a regra  Principais Métodos AbstractRule* GetRule() vector & GetFacts() unsigned long GetTime()

Base de Conhecimentos (ceops::KnowledgeBase)  É a interface entre o usuário e o motor de inferência  Deve ser inicializada com um conjunto de regras e um conjunto de conflitos  Principais métodos: bool Insert (T* fact) void Modify (T* fact) void Retract (T* fact)

Resultados CEOPS++Jeops Fibonacci(20): 6765 Nº disparos: Criação da KB > 1 ms15 ms Tempo de Execução 565ms2,5min Fibonacci CEOPS++Jeops Nº disparos: 92 Criação da KB 10 ms45ms Tempo de Execução 15 ms Oito rainhas

Considerações finais  Contribuição Desenvolvimento de um motor original que concilia as vantagens do Jeops com uma demanda de performance (C++)  Trabalhos futuros Construir um editor de regras Melhorar o pré-compilador Tornar o código portável para outros compiladores

Principais referências  Figueira, Carlos. JEOPS – Integração entre objetos e Regras de produção em Java. Dissertação de Mestrado, CIn – UFPE,  CLIPS Basic Programming Guide. pg.pdf pg.pdf  Soar 8 Manual. s/Soar8Manual.pdf. s/Soar8Manual.pdf  Vollmann, Detlef. Metaclasses and Reflection in C