A relação entre os mecanismos de regras de negócios e as linguagens de programação de restrições


20

Se olharmos para os manuais (talvez mais antigos) de Drools ou alguns outros mecanismos de regras, uma das ilustrações de seu valor agregado é resolver quebra-cabeças, como o quebra-cabeça Miss Manners (manual de Drools). Agora, esses quebra-cabeças são naturalmente formulados e resolvidos usando o Prolog ou as linguagens de programação de restrições mais recentes, e nos perguntamos por que alguém usaria o Drools para esse fim. O valor agregado que o Prolog e a CPL dão nesse caso é a capacidade de formular naturalmente o quebra-cabeça como um conjunto de predicados lógicos e pesquisar automaticamente o espaço das soluções (com a CPL sendo mais eficiente nesse sentido). Mas qual é o valor agregado de um produto como o Drools (quero dizer, além dos sinos e assobios de pegar, por exemplo, um arquivo do Excel e traduzi-lo em um conjunto de regras)?

Mais especificamente, o Prolog implementa a pesquisa de retorno, o CLP implementa a pesquisa de retorno com propagação de restrições e, portanto, em vez de pesquisar, por assim dizer, todo o produto cartesiano de espaços para variáveis ​​individuais, eles eliminam grandes porções do espaço do produto. É isso que os torna eficazes e úteis. O Prolog e o CLP são amplamente discutidos na literatura.

Por outro lado, embora seja claro que o algoritmo Rete armazena em cache o conjunto de regras na forma de algumas estruturas de dados, tornando-o mais eficaz para avaliar a saída se algumas das entradas tiverem sido alteradas (pelo que entendi). e dando meios para atualizar efetivamente essa estrutura de dados para mudanças incrementais, é difícil (para mim) entender a idéia básica e, mais ainda, sua eficácia (em comparação com o que? Prolog? CLP)? Infelizmente, é difícil encontrar boas referências que visualizem o algoritmo Rete nesse contexto mais amplo.

Infelizmente, a documentação do Drools não é muito informativa a esse respeito. O máximo que pude encontrar foi "O algoritmo Rete, o algoritmo Leaps e seus descendentes, como o Reteoo (e o Leaps) da Drools, fornecem maneiras muito eficientes de corresponder padrões de regra aos dados do objeto do seu domínio. Eles são especialmente eficientes quando você tem conjuntos de dados que não mude completamente (como o mecanismo de regras pode se lembrar de correspondências anteriores). Esses algoritmos são comprovados em batalha ". Muito eficiente - comparado com o que? Provado em batalhas - poderia apontar para aplicativos do mundo real?

Eu apreciaria se alguém pudesse lançar um pouco mais de luz sobre esse assunto ou fornecer uma referência válida.


1
Esta questão é um pouco amplo e realmente não 'pertencem' aqui ...

3
Bem, receio que para o cstheory.stackexchange.com seja muito "orientado para o setor". O que realmente me interessa é o ponto básico sobre os mecanismos de regras de negócios e por que usá-los é mais vantajoso do que usar o Prolog ou o CLP. Se você tiver uma sugestão para um lugar melhor para publicá-la, ficarei feliz em ouvi-la.

Respostas:


7

Eu acho que o argumento para muitos sistemas comerciais de regras de negócios que usam mecanismos de encadeamento direto (por exemplo, Drools) versus encadeamento reverso (Prolog) é que muitos "programadores Joe" estão acostumados a lidar com a lógica IF / THEN / ELSE - e isso o torna um todo muito mais fácil de comercializar para as massas. Não acho que o mérito técnico tenha algo a ver com isso.

Estou postando isso como wiki da comunidade, porque é minha opinião bastante colorida e não uma resposta real.


4

Baba recentemente adicionando encadeamento para trás, perfeitamente na linguagem drl. Então agora você obtém os benefícios das duas palavras.

Ainda não possui todos os recursos do prólogo, por exemplo, nenhum 'corte'. Mas os resultados da árvore de unificação e derivação funcionarão como o prólogo espera das pessoas, ou seja, suporte total para fechamentos transitórios. E os recursos continuarão a crescer, como suporte para apresentação, corte e unificação de expressões.

Você pode usar regras de "consulta" direta ou reativa separadamente, ou usá-las juntas; onde a regra reativa pode se unir aos resultados de uma consulta.

Uma coisa que adicionamos é que nossas consultas podem ser totalmente materializadas como uma exibição reativa. Assim, você pode chamar uma consulta de fechamento transititve e ela permanecerá aberta de maneira reativa e responderá às alterações nos dados subjacentes - sem ter que realizar uma nova pesquisa na consulta.

Consulte as seções Novas e Notáveis ​​para saber quando o "encadeamento reverso" foi adicionado: http://blog.athico.com/2012/05/drools-540final-released.html

Então eu acho que sua pergunta seria melhor formulada, por que você gostaria de usar qualquer outra coisa, quando você tem um Sistema de Raciocínio Híbrido como o Drools? http://blog.athico.com/2012/05/drools-54-artificial-intelligence.html


3

Concordo com você que o Prolog é mais poderoso que o Drools. Mas acho que o Drools é atraente para o cliente corporativo por causa das ferramentas e integrações sofisticadas de front-end que o Drools tem com outros aplicativos corporativos populares. Eu acho que essas regras são persistidas no banco de dados onde muitos mecanismos Drools podem usá-las imediatamente.

Alterar regras durante o tempo de execução é uma maneira bastante dinâmica de usar o mecanismo Drools e é suportado. Eu acredito que o Prolog poderia ter um sistema semelhante, mas isso não existe AFAIK. Para onde iriam essas regras ou regras editadas? afirmado no banco de dados do programa? Na reinicialização, essas regras seriam perdidas. Nós os persistiríamos em um banco de dados compartilhado e os afirmaríamos no programa, conforme necessário? O prólogo pode ser utilizável, mas o Drools já está bem integrado à pilha de aplicativos corporativos. Por que ficar louco (exceto por diversão)?


"Concordo com você que o Prolog é mais poderoso que o Drools. Mas acho que o Drools é atraente para o cliente corporativo por causa das sofisticadas ferramentas e integrações de front-end que o Drools tem com outros aplicativos corporativos populares"

Conforme meu comentário acima, o Drools agora implementa árvores de derivação baseadas em objetivos da mesma maneira que o Prolog. Drools adicionais podem fazer algo com essa árvore de privação que a maioria dos outros sistemas Prolog não pode. Drools podem materializar a árvore de derivação em uma visualização e receber atualizações reativas conforme os termos do grupo subjacente mudam.


2
O @MarkProctor, geralmente, coisas que são objeções e não correções geralmente devem ser feitas por meio de comentários e (potencialmente) voto negativo, em vez de editar o conteúdo da resposta de outra pessoa.
Charles Duffy

2

Os babos começaram sendo baseados no CLIPS . O CLIPS era um " sistema de produção " mais antigo e, como todos os sistemas de produção, é um sistema de encadeamento direto. Muitas pesquisas sobre Rete "escureceram", pois o criador acabou trabalhando para empresas onde os algoritmos eram de propriedade intelectual. A versão 3 do Rete é de propriedade de quem faz as pontuações do FICO , então sim, é "comprovada em batalha".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.