Domanda

In passato ho dovuto sviluppare un programma che fungesse da valutatore di regole.Avevi un antecedente e alcuni consecutivi (azioni), quindi se l'antecedente risultava vero le azioni venivano eseguite.

A quel tempo usavo una versione modificata del file Algoritmo RETE (ci sono tre versioni di RETE solo la prima è pubblica) per il patternmatching antecedente.Stiamo parlando di un grande sistema con milioni di operazioni per regola e alcuni operatori "ripetuti" in più regole.

È possibile che dovrò implementarlo di nuovo in un altro linguaggio e, anche se ho esperienza in RETE, qualcuno conosce altri algoritmi di corrispondenza dei modelli?Qualche suggerimento o dovrei continuare a utilizzare RETE?

È stato utile?

Soluzione

L'algoritmo TREAT è simile a RETE, ma non registra corrispondenze parziali.Di conseguenza, in determinate situazioni potrebbe utilizzare meno memoria di RETE.Inoltre, se modifichi un numero significativo di fatti noti, TREAT può essere molto più veloce perché non devi dedicare tempo alle ritrattazioni.

C'è anche RETE* che bilancia tra RETE e TREAT salvando alcuni stati del nodo di join a seconda della quantità di memoria che desideri utilizzare.In questo modo risparmi comunque un po' di tempo per l'asserzione, ma ottieni anche un risparmio di memoria e tempo di ritrazione a seconda di come ottimizzi il tuo sistema.

Potresti anche voler dare un'occhiata SALTI, che utilizza uno schema di valutazione pigro e incorpora elementi sia di RETE che di TREAT.

Ho solo esperienza personale con RETE, ma sembra che RETE* o LEAPS siano le scelte migliori e più flessibili.

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