Pergunta

No passado tive que desenvolver um programa que funcionasse como avaliador de regras.Você tinha um antecedente e alguns consequentes (ações), portanto, se o antecedente fosse avaliado como verdadeiro, as ações seriam executadas.

Naquela época eu usei uma versão modificada do Algoritmo RETE (existem três versões do RETE, sendo a primeira pública) para a correspondência de padrões antecedentes.Estamos falando aqui de um grande sistema com milhões de operações por regra e alguns operadores “repetidos” em diversas regras.

É possível que eu tenha que implementar tudo de novo em outra linguagem e, mesmo tendo experiência em RETE, alguém conhece outros algoritmos de correspondência de padrões?Alguma sugestão ou devo continuar usando o RETE?

Foi útil?

Solução

O algoritmo TREAT é semelhante ao RETE, mas não registra correspondências parciais.Como resultado, ele pode usar menos memória que o RETE em determinadas situações.Além disso, se você modificar um número significativo de fatos conhecidos, o TREAT poderá ser muito mais rápido porque você não precisará perder tempo com retratações.

Há também RETE* que equilibra entre RETE e TREAT salvando algum estado do nó de junção dependendo de quanta memória você deseja usar.Assim, você ainda economiza algum tempo de asserção, mas também economiza tempo de memória e retração, dependendo de como você ajusta seu sistema.

Você também pode querer conferir SALTOS, que usa um esquema de avaliação lento e incorpora elementos de RETE e TREAT.

Só tenho experiência pessoal com RETE, mas parece que RETE* ou LEAPS são as escolhas melhores e mais flexíveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top