La relazione tra i motori delle regole di business e i linguaggi di programmazione dei vincoli


20

Se si guardano i manuali (forse più vecchi) di Drools o alcuni altri motori di regole, una delle illustrazioni del loro valore aggiunto è quella di risolvere enigmi come il puzzle di Miss Manners (manuale di Drools). Ora, tali enigmi sono formulati e risolti naturalmente usando Prolog o i più recenti linguaggi di programmazione dei vincoli, e ci si chiede perché qualcuno dovrebbe usare Drools per questo scopo. Il valore aggiunto che Prolog e CPL danno in questo caso è la loro capacità di formulare naturalmente il puzzle come un insieme di predicati logici e di cercare automaticamente lo spazio delle soluzioni (con CPL più efficiente in questo senso). Ma qual è il valore aggiunto di un prodotto come Drools (intendo oltre alle campane e ai fischi di prendere, ad esempio, un file Excel e tradurlo in un insieme di regole)?

Più in particolare, Prolog implementa la ricerca di backtrack, CLP implementa la ricerca di backtrack con propagazione di vincoli e quindi invece di cercare, per così dire, l'intero prodotto cartesiano degli spazi per singole variabili, eliminano grandi porzioni di questo spazio prodotto. Questo è ciò che li rende efficaci e utili. Sia Prolog che CLP sono ampiamente discussi 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, rendendo quindi (a mio avviso) più efficace la valutazione dell'output se alcuni degli input sono cambiati, e dando mezzi per aggiornare efficacemente questa struttura di dati per cambiamenti incrementali, è 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 buoni riferimenti che vedano l'algoritmo di Rete in questo contesto più ampio.

La documentazione di Drools purtroppo non è molto istruttiva al riguardo. Il massimo che ho trovato è stato "L'algoritmo Rete, l'algoritmo Leaps e i suoi discendenti come Reteoo (e Leaps) di Drools, forniscono modi molto efficienti di abbinare modelli di regole ai dati degli oggetti del tuo dominio. Questi sono particolarmente efficienti quando hai set di dati che non cambiano del tutto (dato che il motore delle regole è in grado di ricordare le partite passate). Questi algoritmi sono testati in battaglia ". Molto efficiente - rispetto a cosa? Battaglia dimostrata: si potrebbe puntare ad applicazioni nel mondo reale?

Gradirei se si potesse gettare più luce su questo argomento o fornire un riferimento valido.


1
Questa domanda è un po 'ampia e in realtà non "appartiene" qui ...

3
Beh, temo che per cstheory.stackexchange.com sia troppo "orientato all'industria". Ciò che mi interessa davvero qual è il punto di base sui motori delle regole aziendali e perché utilizzarli è più avventuroso rispetto all'utilizzo di Prolog o CLP. Se hai un suggerimento su un posto migliore per pubblicarlo, sarò felice di ascoltarlo.

Risposte:


7

Penso che l'argomento di molti sistemi commerciali di regole commerciali che utilizzano motori di concatenamento in avanti (ad es. Drools) rispetto al concatenamento all'indietro (Prolog) è che molti "programmatori Joe" sono abituati a gestire la logica IF / THEN / ELSE - e questo lo rende un tutt'uno molto più facile da commercializzare alle masse. Non credo che il merito tecnico abbia nulla a che fare con questo.

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


4

Recupera di recente l'aggiunta di concatenamento all'indietro, senza soluzione di continuità nel linguaggio drl. Quindi ora ottieni i vantaggi di entrambe le parole.

Non ha ancora tutte le caratteristiche di Prolog, ad esempio nessun "taglio". Ma i risultati dell'albero di unificazione e derivazione funzioneranno come si aspettano i prolog, vale a dire il pieno supporto per le chiusure transitive. E le funzionalità continueranno a crescere, come il supporto per la presentazione, il taglio e l'unificazione delle espressioni.

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

Una cosa che abbiamo aggiunto è che le nostre query possono essere pienamente materializzate come una visione reattiva. Quindi puoi chiamare una query di chiusura transitiva e rimarrà aperta in modo reattivo e risponderà al cambiamento nei dati sottostanti, senza dover ripetere il polling della query.

Vedi le sezioni New & Noteworth per quando è stata aggiunta la "concatenazione a ritroso": http://blog.athico.com/2012/05/drools-540final-released.html

Quindi penso che la tua domanda sarebbe formulata meglio, perché dovresti voler usare qualcos'altro, quando hai un sistema di ragionamento ibrido come Drools? http://blog.athico.com/2012/05/drools-54-artificial-intelligence.html


3

Concordo con te sul fatto che Prolog è più potente di Drools. Ma penso che Drools sia attraente per i clienti aziendali a causa dei fantasiosi strumenti e integrazioni front-end che Drools ha con altre popolari applicazioni aziendali. Penso che queste regole vengano poi mantenute nel database in cui molti motori Drools possono usarle immediatamente.

La modifica delle 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 andrebbero queste regole o regole modificate? affermato nel db del programma? Al riavvio, queste regole andrebbero perse. Li porteremmo su un db condiviso e poi li inseriremo nel programma secondo necessità? Prolog potrebbe essere utilizzabile, ma Drools è già ben integrato nello stack di applicazioni aziendali, quindi perché impazzire (tranne che per divertimento)?


"Concordo con te sul fatto che Prolog è più potente di Drools. Ma penso che Drools sia attraente per i clienti aziendali a causa dei fantasiosi strumenti e integrazioni front-end che Drools ha con altre popolari applicazioni aziendali"

Secondo il mio commento sopra, Drools ora implementa alberi di derivazione basati sugli obiettivi allo stesso modo di Prolog. Inoltre, i droidi possono fare qualcosa con quell'albero della privazione che la maggior parte degli altri sistemi Prolog non può fare. I droidi possono materializzare l'albero di derivazione in una vista e ricevere aggiornamenti reattivi quando cambiano i termini grouond sottostanti.


2
@MarkProctor, in generale, le cose che sono obiezioni invece di correzioni dovrebbero generalmente essere fatte tramite commenti e (potenzialmente) downvoting, invece di modificare il contenuto della risposta di qualcun altro.
Charles Duffy,

2

I droidi sono iniziati basandosi su CLIPS . CLIPS era un vecchio " sistema di produzione ", e come tutti i sistemi di produzione è un sistema di concatenamento in avanti. Molte ricerche su Rete sono diventate "oscure" quando l'originatore ha finito per lavorare per aziende in cui gli algoritmi erano proprietà intellettuale. La versione 3 di Rete è di proprietà della gente che ottiene i punteggi FICO , quindi sì, è "provato in battaglia".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.