La relazione tra Business Rules Engines e Constraint Programming languages

20

Se si guardano i manuali (forse più vecchi) di Drools o di altri motori di regole, una delle illustrazioni del loro valore aggiunto è la risoluzione di enigmi del genere come il puzzle di Miss Manners (manuale di Drools). Ora, questi enigmi sono formulati naturalmente e risolto usando Prolog o i più recenti linguaggi di Constraint Programming, e ci si chiede perché qualcuno dovrebbe usare Drools per questo scopo. Il valore aggiunto quale Prolog e CPL danno in questo caso è la loro capacità di naturalmente formulare il puzzle come un insieme di predicati logici e automaticamente cerca lo spazio delle soluzioni (con CPL che è più efficiente in questo senso). Ma qual è il valore aggiunto del prodotto come Drools (intendo anche di le campane e i fischietti di prendere, per esempio, un file Excel e la traduzione in una serie di regole)?

Più specificamente, Prolog implementa la ricerca di backtrack, CLP implementa la ricerca di backtrack con la propagazione dei vincoli, e quindi invece di cercare, per così dire, il intero prodotto cartesiano di spazi per variabili individuali, si potano grandi porzioni di questo spazio prodotto. Questo ciò che li rende efficaci e utili. Sia Prolog che Il CLP è ampiamente discusso in letteratura.

D'altra parte, mentre è chiaro che l'algoritmo di Rete memorizza nella cache l'insieme di regole sotto forma di alcune strutture di dati, quindi (a mio modo di vedere) rendendola di più efficace per valutare l'output se alcuni degli input sono cambiati e dando significa aggiornare efettivamente questa struttura dati per cambiamenti incrementali, lo è difficile (per me) capire l'idea di base, e ancora di più, la sua efficacia (rispetto a cosa? a Prolog? a CLP)? Sfortunatamente, è difficile trovare un buon risultato riferimenti che vedono l'algoritmo di Rete in questo più ampio contesto.

La documentazione di Drools è sfortunatamente poco istruttiva a questo riguardo. Il massimo che ho trovato è stato "L'algoritmo di Rete, l'algoritmo Leaps ei suoi discendenti come Reteoo (e Leaps) di Drools, forniscono metodi molto efficienti per associare i pattern delle regole ai dati degli oggetti di dominio, particolarmente efficienti quando si dispone di set di dati non cambiare completamente (poiché il motore delle regole può ricordare le partite precedenti). Questi algoritmi sono collaudati in battaglia ". Molto efficiente - rispetto a cosa? Prova di battaglia - potrebbe un punto al mondo reale applicazioni?

Apprezzerei se si potesse gettare un po 'di luce su questo argomento o dare una valida riferimento.

    
posta John Donn 17.10.2011 - 16:25
fonte

4 risposte

7

Penso che l'argomento per molti sistemi di regole aziendali commerciali che utilizzano i motori di concatenamento in avanti (es. Drools) vs backward chaining (Prolog) è che molti "programmatori Joe" sono abituati a gestire la logica IF / THEN / ELSE - e questo lo rende molto più facile da commercializzare per le masse. Non penso al merito tecnico ha qualcosa a che fare con questo.

Sto postando questo come wiki della comunità perché è la mia opinione piuttosto colorata e non una vera risposta.

    
risposta data 17.10.2011 - 17:06
fonte
4

Drools di recente aggiunge il concatenamento all'indietro, senza interruzioni nel linguaggio drl. Quindi ora ottieni i benefici di entrambe le parole.

Non ha ancora tutte le caratteristiche del prologo, ad esempio nessun 'taglio'. Ma è unificazione e i risultati dell'albero di derivazione funzioneranno come si aspettano le persone prolog, cioè il pieno supporto per chiusure transitive. E le funzionalità continueranno a crescere, come il supporto per la presentazione, il taglio, l'unificazione sulle espressioni.

È possibile utilizzare separatamente le regole "di ricerca" "reattiva" o "indietro", o usarle insieme; dove la regola reattiva può unirsi ai risultati di una query.

Una cosa che abbiamo aggiunto è che le nostre domande possono essere completamente materializzate come una vista reattiva. Quindi puoi chiamare una query di chiusura transititve e rimarrà aperta in modo reattivo e risponderà al cambiamento dei dati sottostanti - senza dover ri-interrogare la query.

Vedi Nuovo & Sezioni importanti per quando è stato aggiunto "concatenamento all'indietro": link

Quindi penso che la tua domanda sarebbe meglio formulata, perché dovresti usare qualcos'altro, quando hai un sistema di ragionamento ibrido come Drools? link

    
risposta data 15.05.2012 - 00:01
fonte
3

Sono d'accordo con te sul fatto che Prolog è più potente di Drools. Ma penso che Drools sia attraente per i client aziendali a causa degli strumenti e delle integrazioni di front-end fantasiosi che Drools ha con altre popolari applicazioni aziendali. Penso che queste regole siano poi mantenute nel database dove molti motori Drools possono usarle immediatamente.

Cambiare le regole durante il runtime è un modo piuttosto dinamico di utilizzare il motore Drools ed è supportato. Credo che Prolog potrebbe avere un sistema simile, ma questo non esiste AFAIK. Dove dovrebbero andare queste regole o regole modificate? asserito nel db del programma? Al riavvio, queste regole andrebbero perse. Li faremo persistere su un db condiviso e poi li asseriremo nel programma secondo necessità? Prolog potrebbe essere utilizzabile, ma Drools è già ben integrato nello stack di applicazioni aziendali, quindi perché essere pazzo (eccetto il divertimento)?

"Sono d'accordo con te sul fatto che Prolog sia più potente di Drools, ma penso che Drools sia attraente per i client aziendali a causa dei fantasiosi strumenti e integrazioni frontali che Drools ha con altre popolari applicazioni aziendali"

Come per il mio commento sopra, Drools ora implementa alberi di derivazione basati su obiettivi allo stesso modo di Prolog. Ulteriori Drools possono fare qualcosa con quell'albero di deivazione che la maggior parte degli altri sistemi Prolog non è in grado di fare. Drools può materializzare l'albero di derivazione in una vista e ricevere aggiornamenti reattivi quando i termini di grouond sottostanti cambiano.

    
risposta data 17.10.2011 - 21:30
fonte
2

I Drools sono partiti basandosi su CLIP . CLIPS era un vecchio " sistema di produzione ", e come tutti i sistemi di produzione è un sistema di catene di regate. Molte ricerche su Rete si sono "oscurate" quando l'ideatore ha finito per andare a lavorare per aziende in cui gli algoritmi erano proprietà intellettuale. Rete versione 3 è di proprietà delle persone che fanno punteggi FICO , quindi sì, è "provato battaglia".

    
risposta data 18.10.2011 - 00:21
fonte

Leggi altre domande sui tag