2009-12-17 6 views
7

Ich suche nach einer Regel-Engine in C oder Python, aber wenn Sie eine Regel-Engine kennen, die in einer anderen Sprache implementiert ist, würde ich mich darüber freuen.Rules Engine in C oder Python

Der Motor wird verwendet, um ein Haus zu automatisieren, wie das Licht auszuschalten, wenn jemand einen Raum verlässt usw. Also gibt es dort kein "Büro" (auch in Excel oder ähnlichem).

Ich habe Jess und Drools untersucht, die in Java sind und einen perfekten Job machen. Ich möchte von anderen wissen und möglicherweise weniger Speicher verwenden als Java. Ich habe von RuleCore in Python gehört, konnte aber keine Dokumentation dazu finden (Version 1.0 ist bei SourceForge erhältlich, aber es sieht so aus, als verkauften sie v. 2.0).

EDIT: Von Rules Engine (Inferenz-Engine), meine ich eine Implementierung von RETE oder gleichwertig.

+0

http://stackoverflow.com/questions/467738/implementing-a-rules-engine-in-python http://www.google.com/search?client=safari&rls=en&q=python+rule+ engine & ie = UTF-8 & oe = UTF-8 –

+0

Danke, ich hatte diese Frage gesehen und suche keine neue Regel-Engine. Aber ich habe den Hinweis auf CLIPS beim ersten Mal nicht gesehen :) – Yanik

Antwort

5

Bei Ihrer Suche nach RETE-basierten Regel-Engine in Python könnte entweder Pyke oder PyCLIPS der sein, den Sie verwenden möchten.

PS: Ich hatte einen Kommentar zu S.Lott's Antwort über Pyke hinterlassen. Ich habe eine separate Antwort nach seinem Vorschlag gepostet und auch andere Leser wissen lassen, dass die Regel-Engine in dieser Antwort eine wahrscheinliche Wahl sein könnte, wenn sie nach einem suchen.

+0

PyCLIPS ist es. Und es ist wirklich einfach, meine Jess-Regeln in CLIPS zu übersetzen. – Yanik

1

Pychinko ist schon seit einiger Zeit. Ich habe es nie in der Produktion verwendet, sondern es vor einiger Zeit für eine mögliche Produktionsanwendung untersucht. Es sieht so aus, als ob es ziemlich gute Features und eine anständige Community von Benutzern hat.

http://www.mindswap.org/~katz/pychinko/

+1

Danke. Kennen Sie Mailinglisten oder IRC-Kanäle für die Community? Es sieht nicht so aus, als ob es mehr gepflegt wird. Und hast du von pyCLIPS gehört (ich habe gerade herausgefunden)? – Yanik

0

Tatsächlich Python ist eine Regel-Engine.

"Der Motor wird verwendet, um ein Haus zu automatisieren, wie das Licht auszuschalten, wenn jemand einen Raum verlässt usw."

Sie benötigen Sensoren und Controller. Sie schreiben Ihre "Regeln" als gewöhnliche Python-Objekte.

Ihr Hauptprogramm sammelt Ereignisse von Ihren Sensoren und sendet Ereignisse an Ihre Controller.

Wenn Sie von Ihren Sensoren über gewöhnlichen USB lesen können, ist das noch besser. Die Schifffahrtsindustrie verwendet einige eng verwandte Standards wie NMEA 0183 und NMEA 2000, um den Verkehr auf dem Bus von Sensor zu Controller zu spezifizieren.

Sie brauchen noch keine anderen Regeln Sprache. Du hast Python.

+2

Ich bin mir nicht sicher, was Sie meinen, aber ich denke, Sie könnten sagen, dass jede Turing-Sprache in Wirklichkeit eine Regel-Engine ist. Ich hätte wahrscheinlich den RETE-Algorithmus erwähnen sollen, der viel schneller funktioniert, als eine Tatsache gegen jede Regel zu prüfen. Da ich kein Python-Experte bin, bin ich mir nicht sicher, wie Sie das machen würden. Haben Sie einen Link, wo es erklärt wird? – Yanik

+0

@Yanik: Wenn Inferenz Teil des Problembereichs ist, aktualisieren Sie die Frage, um diese Tatsache einzuschließen. Die Verarbeitung der Most-Regel schließt keine Inferenz ein. Wenn Sie Rückschlüsse benötigen, aktualisieren Sie Ihre Frage, bitte geben Sie dies deutlich an. –

+1

Wenn Sie nach Rückschlüssen auf Ihre Regeln suchen, wäre ein Blick auf Pyke [http://pyke.sourceforge.net/] hilfreich. – ardsrk

2

Sie können sich CLIPS wie bereits vorgeschlagen anschauen, oder wenn Sie Geld bezahlen möchten oder es brauchen Rete2. Ich habe CLIPS in der Vergangenheit unter Unix verwendet und erfolgreich in andere Anwendungen eingebettet.

Hoffe, das hilft.

0

Rulecore ist tatsächlich teilweise in Python geschrieben. Aber es ist nicht wirklich wichtig. Sie als Benutzer würden sowieso keine dieser Implementierungsdetails sehen.

Die Regeln sind rein deklarativ und definiert mit XML. Der XML-Code wird als Ereignis unter Verwendung eines Web-Services oder JMS oder anderer Protokolle in den ruleCore CEP Server gesendet.

0

Ich weiß, dass RegelCore einige Teile in Python geschrieben hat. Aber die API verwendet XML und ActiveMQ oder WebServices, also auf einer höheren Abstraktionsebene.

0

Nebri ist der einfachste Weg, Regeln für Haustechnik UND andere Software/Maschinen zu schreiben. Hier ist ein Beispiel, das Licht Abschaltung zu erreichen:

class high_temp_shutdown(NebriOS): 
    listens_to == ['shared.pebble_location'] 


    def check(self): 
     # if pebble dongle is out or room, return true 
     return shared.pebble_location > 3 # in meters 

    def action(self): 
     smartthings.lights(2,"off") 

Es ist ein perfektes Werkzeug für die Automatisierung Ihres Hauses, da Sie für die Verwendung in Ihrem Skript vorhandene Bibliotheken installieren pip können. Nest, SmartThings, Sen.se und so weiter. Es ist nur Python!

Und für eine ausführlichere Erklärung, warum Python keine Regel-Engine ist, siehe this article. Nur weil Python selbst Regeln ausführen kann, haben Sie keine Regel-Engine in Ihren Händen. Es ist eine große architektonische Verschiebung in der Tat.