Domanda

Sto cercando di costruire un sistema basato su regole per l'interpretazione dei dati. Tuttavia, sto riscontrando problemi nel decidere un modo per costruire la logica per la memorizzazione e l'interpretazione delle regole.

Attualmente, esiste una struttura di database piuttosto complessa, ma affronterà tutti gli aspetti della memorizzazione dei dati della regola. L'idea è che il sistema sarà in grado di imitare il modo in cui MS Outlook consente a un utente di aggiungere regole.

I miei problemi sono i seguenti:

  1. Quale modello dovrei usare per memorizzare queste regole all'interno degli oggetti?
  2. Dovrei usare eval () o l'orientamento corretto dell'oggetto per eseguire le regole?

E la regola di esempio potrebbe essere:

  

Il cane deve avere il collare nell'area park

Dove ogni elemento (cane, deve avere, collare, in area, parco) è un pezzo logico separato da interpretare.

Ogni consiglio generale alle domande precedenti è molto apprezzato!

È stato utile?

Soluzione

Non ho mai implementato un sistema come quello che descrivi in ??un "mondo reale" contesto, ma ho giocato con loro in maniera considerevole come progetti per hobby. Il mio approccio preferito è usare un qualche tipo di linguaggio logico come Prolog per fare affermazioni e controllarle. Avresti delle affermazioni su dove si trova il parco, cosa significhi avere qualcosa, cosa sia un cane, e poi faresti una regola praticamente esattamente come il tuo esempio tra parentesi nella parte inferiore del tuo post. Mi dispiace che il mio Prolog sia troppo arrugginito per darti un utile esempio ... Ho giocato con lingue di inferenza coltivate in casa troppo a lungo.

Ci sono interpreti Prolog disponibili per l'incorporamento nella maggior parte delle lingue, anche se non sono sicuro di PHP5. Potresti mettere insieme qualcosa di semplice che inferenza di forward-chaining sulle strutture di dati delle regole della tua creazione in un ordine abbastanza breve, se non riesci a trovare un interprete Prolog. Potresti essere interessato a queste note sull'inferenza automatizzata.

Altri suggerimenti

Probabilmente questa risposta è troppo banale / ovvia per te, ma ho solo pensato a come risolverei qualcosa del genere nel mio attuale progetto esistente che è un'applicazione Zend Framework. Ho pensato ai filtri e al validatorChains ZF. Presumo che tu abbia un numero limitato di possibili oggetti di input, un numero limitato di condizioni / vincoli e un numero limitato di azioni. In tal caso, dovresti prima creare un'istanza di un oggetto ed eseguirlo su una catena di condizioni (validatori), se tutte le condizioni sono soddisfatte esegui l'oggetto contro actionChain. Qui probabilmente dovrei implementare una sorta di sistema di priorità delle azioni poiché alcune azioni devono essere eseguite prima di altre. Come "inviare una notifica" e quindi "eliminare" l'oggetto in questione. Quindi in ZF creerei un validatore personalizzato per ogni condizione / vincolo. Non credo che il sistema Outlook sia molto intelligente, il che significa che non credo che i validatori siano molto generici.

Nel db potrebbe esserci una tabella per le regole effettive, una per le condizioni e una per le azioni. Quindi potrebbero esserci due tabelle molti-a-molti che collegano la regola a tutte le condizioni e azioni necessarie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top