2009-12-17 76 views
7

Estoy buscando un motor de reglas en C o Python, pero si conoce un motor de reglas que se implementa en otro idioma, me gustaría saberlo.Motor de reglas en C o Python

El motor se usará para automatizar una casa, como apagar la luz cuando alguien se va de la habitación, etc. Por lo tanto, no hay reglas de oficina allí (también se gobiernan en Excel o similares).

He examinado Jess y Drools que están en Java y hacen un trabajo perfecto. Me gustaría saber de otros y posiblemente usar menos memoria que Java. He oído hablar de RuleCore en Python pero no pude encontrar ninguna documentación sobre él (la versión 1.0 está disponible en SourceForge pero parece que están vendiendo v. 2.0).

EDIT: Por motor de reglas (motor de inferencia), me refiero a una implementación de RETE o equivalente.

+0

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

+0

Gracias, había visto esta pregunta y no estoy buscando la implementación de un nuevo motor de reglas. Pero no vi la referencia a CLIPS la primera vez :) – Yanik

Respuesta

5

En su búsqueda de motor de reglas basado en RETE en Python Pyke o PyCLIPS podría ser el que desee utilizar.

PD: He dejado un comentario a la respuesta de S.Lott sobre Pyke. He publicado una respuesta por separado según su sugerencia y también para que otros lectores sepan fácilmente que el motor de reglas mencionado en esta respuesta podría ser una opción probable si están buscando uno.

+0

PyCLIPS es. Y es realmente fácil traducir mis reglas de Jess a CLIPS. – Yanik

1

Pychinko ha estado presente por un tiempo. Nunca lo he usado en producción, pero lo investigué para una posible aplicación de producción hace un tiempo. Parece que tiene características bastante buenas y una comunidad de usuarios decente.

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

+1

Gracias. ¿Conoces alguna lista de correo o canales IRC para la comunidad? Parece que ya no se mantiene ... ¿Y ha oído hablar de pyCLIPS (me acabo de enterar)? – Yanik

0

En efecto, Python es un motor de reglas.

"El motor se utilizará para automatizar una casa, como apagar la luz cuando alguien se va de la habitación, etc."

Necesita sensores y controladores. Usted escribe sus "reglas" como objetos ordinarios de Python.

Su "programa" principal recopila eventos de sus sensores y envía eventos a sus controladores.

Si puede leer sus sensores a través de un USB común, eso es aún mejor. La industria marítima usa un par de estándares estrechamente relacionados como NMEA 0183 y NMEA 2000 para especificar el tráfico en el autobús del sensor al controlador.

No necesita otro idioma de reglas. Tienes Python.

+2

No estoy seguro de lo que quiere decir, pero creo que podría decir que cualquier lenguaje completo de Turing es, de hecho, un motor de reglas. Probablemente debería haber mencionado el algoritmo RETE que funciona mucho más rápido que verificar un hecho en contra de todas las reglas. Como no soy un experto en Python, no estoy seguro de cómo lo haría. ¿Tienes algún enlace donde se explique? – Yanik

+0

@Yanik: si la inferencia es parte del espacio del problema, actualice la pregunta para incluir este hecho. Debe reglamentar el procesamiento no implica inferencia. Si requiere inferencia, actualice su pregunta, por favor, indique esto claramente. –

+1

Si busca inferencia sobre sus reglas, entonces sería útil mirar Pyke [http://pyke.sourceforge.net/] – ardsrk

2

Puede consultar CLIPS como ya se ha sugerido o, si desea pagar dinero o lo necesita Rete2. He utilizado CLIPS en el pasado en Unix y lo he incorporado correctamente a otras aplicaciones.

Espero que esto ayude.

0

Rulecore está escrito en parte en Python. Pero en realidad no importa. Como usuario, usted no vería ninguno de estos detalles de implementación de todos modos.

Las reglas son puramente declarativas y se definen mediante XML. El XML se envía al servidor de RuleCore CEP como eventos utilizando servicios web o JMS u otros protocolos.

0

Sé que ruleCore tiene algunas partes escritas en Python. Pero la API usa XML y ActiveMQ o WebServices por lo que está en un nivel de abstracción más alto.

0

Nebri es la forma más fácil de escribir reglas para domótica Y otros software/máquinas. He aquí un ejemplo para llevar a cabo el cierre de la luz:

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 una herramienta perfecta para la automatización de su casa ya que se puede instalar pip bibliotecas existentes para su uso en el script. Nest, SmartThings, Sen.se, etc. ¡Es solo Python!

Y para una explicación más completa de por qué Python no es un motor de reglas en sí mismo, vea this article. Solo porque Python pueda ejecutar reglas, no tiene un motor de reglas en sus manos. Es un gran cambio arquitectónico, de hecho.

Cuestiones relacionadas