Ceops integra o entre objetos e regras de produ o em c
This presentation is the property of its rightful owner.
Sponsored Links
1 / 25

CEOPS++ Integração entre Objetos e Regras de Produção em C++ PowerPoint PPT Presentation


  • 47 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

CEOPS++ Integração entre Objetos e Regras de Produção em C++

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Ceops integra o entre objetos e regras de produ o em c

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 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 s1

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

Roteiro

  • Motores de código aberto

  • CEOPS++

  • Conclusões


Sistemas de produ o e orienta o a objetos

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

Motores existentes

  • Tabela de comparação


Motor de refer ncia jeops

Base de

Objetos

Base Interna

de Regras

Knowledge

Conjunto de Conflito

Base

-

-

-

-

----

-

-

-

-

----

-

-

-

-

-

--

-

-

-

-

----

-

-

-

-

-

-

Motor de referência: Jeops

Agente

insert

run

objects

flush

JEOPS

Rete

Gera

entradas

Consulta

Base de

Conhecimentos


Ceops

CEOPS++


Fatos

Fatos

  • Podem ser qualquer objeto ou estrutura em C++

  • O CEOPS++ armazena ponteiros para objetos (void*)


Base de objetos ceops objectbase

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>(T* obj)

    • bool Retract<T>(T* obj)

    • void GetObjects<T>(vector<T*>& objs)

    • GetSubclasses<T>(vector<string>& subclasses)


Checagem de subtipos 1 util typecheckfunction

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<typename T>inline void TypeCheckFunction(T* type, vector<string>& subclasses);


Checagem de subtipos 2 util typecheckfunction

Checagem de subtipos(2)(util::TypeCheckFunction)

template<typename T>

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

Checagem de subtipos(3)(util::TypeCheckFunction)

template<typename T>

inline void TypeCheckFunction(T* type, vector<string>& subclasses) {

TypeCheck<A> typeA;

TypeCheck<B> typeB;

TypeCheck<C> 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

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

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

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

Pré-compilação


Rete rete rete

Rete(rete::Rete)

  • Possui apenas a funcionalidade de memorização das avaliações realizadas


Rete rete rete1

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

}

Rete(rete::Rete)


Conjunto de conflitos conflict conflictset

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

Elemento do conjunto de conflitos(conflict::ConflictSetElement)

  • Representa uma regra ativa e os objetos que ativaram a regra

  • Principais Métodos

    • AbstractRule* GetRule()

    • vector<Fact>& GetFacts()

    • unsigned long GetTime()


Base de conhecimentos ceops knowledgebase

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>(T* fact)

    • void Modify<T>(T* fact)

    • void Retract<T>(T* fact)


Resultados

Resultados

Fibonacci

Oito rainhas


Considera es finais

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

Principais referências

  • Figueira,Carlos. JEOPS – Integração entre objetos e Regras de produção em Java. Dissertação de Mestrado, CIn – UFPE, 2000.

  • CLIPS Basic Programming Guide.http://www.ghg.net/clips/download/documentation/bpg.pdf

  • Soar 8 Manual. http://ai.eecs.umich.edu/soar/sitemaker/docs/manuals/Soar8Manual.pdf.

  • Vollmann, Detlef. Metaclasses and Reflection in C++. http://vollmann.ch/en/pubs/meta/meta/meta.html.


  • Login