Pergunta

Estou procurando um mecanismo de regras em C ou Python, mas se você conhece um mecanismo de regras que é implementado em outro idioma, ficaria feliz em saber sobre isso.

O motor será usado como maneira de automatizar uma casa, como desligar a luz quando alguém sair de um quarto etc. para que nenhuma regra de "escritório" (também conhecida como você governa o Excel ou algo assim).

Eu olhei para Jess e baba que estão em Java e faço um trabalho perfeito. Eu gostaria de conhecer os outros e possivelmente usar menos memória do que Java. Ouvi falar de RulCore em Python, mas não consegui encontrar nenhuma documentação (a versão 1.0 está disponível no Sourceforge, mas parece que eles estão vendendo v. 2.0).

EDITAR: Por regras mecanismo (mecanismo de inferência), quero dizer uma implementação de RETE ou equivalente.

Foi útil?

Solução

Em sua busca por mecanismo de regras baseado em rete em python também Pyke ou Pyclips Pode ser o que você gostaria de usar.

PS: Eu havia deixado um comentário à resposta de S.Lott sobre Pyke. Publiquei uma resposta separada de acordo com sua sugestão e também para que outros leitores saibam prontamente que o mecanismo de regras mencionado nesta resposta pode ser uma opção provável se estiverem procurando um.

Outras dicas

Você poderia olhar para CLIPES como já sugerido ou, se você quiser pagar dinheiro ou precisar Rete2. Eu usei clipes no passado no Unix e o incorporei com sucesso em outros aplicativos.

Espero que isto ajude.

regime é um mecanismo de regra em escrito em Ruby. Foi objeto de uma apresentação em Rubyhoedown 2008: Regra por regra-motor-para-ruby

Pychinko já existe há algum tempo. Eu nunca o usei na produção, mas o investigei para uma possível aplicação de produção há algum tempo. Parece que tem recursos muito bons e uma comunidade decente de usuários.

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

Com efeito, Python é um mecanismo de regras.

"O motor será usado como forma de automatizar uma casa, como desligar a luz quando alguém sair de um quarto etc."

Você precisa de sensores e controladores. Você escreve suas "regras" como objetos comuns do Python.

Seu principal "programa" coleta eventos de seus sensores e envia eventos para seus controladores.

Se você pode ler seus sensores via USB comum, isso é ainda melhor. A indústria marinha usa alguns padrões intimamente relacionados, como o NMEA 0183 e o NMEA 2000, para especificar o tráfego no barramento do sensor para o controlador.

Você não precisa de mais uma linguagem de regras. Você tem python.

RulCore é realmente escrito em parte em Python. Mas isso realmente não importa. Você, como usuário, não veria nenhum desses detalhes da implementação de qualquer maneira.

As regras são puramente declarativas e definidas usando XML. O XML é enviado para o servidor RuleCore CEP como eventos usando um Serviços da Web ou JMS ou outros protocolos.

Aqui está uma lista de 13 motores de regras de código aberto em Java, o Drools é possivelmente o melhor deles. http://java-sources.org/open-source/Rule-Engines

Eu sei que RulCore tem algumas partes escritas em Python. Mas a API usa XML e ActiveMQ ou WebSerts, por isso está em um nível de abstração mais alto.

Nebri é a maneira mais fácil de escrever regras para automação residencial e outros softwares/máquinas. Aqui está um exemplo para realizar o fechamento da 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")

É uma ferramenta perfeita para automatizar sua casa, pois você pode instalar as bibliotecas existentes para uso no seu script. Ninho, smartthings, sen.se e assim por diante. É apenas Python!

E para uma explicação mais completa de por que Python não é um mecanismo de regras por si só, veja Este artigo. Só porque o próprio Python pode executar regras, você não tem um mecanismo de regras em suas mãos. É uma grande mudança arquitetônica de fato.

Escrevo um mecanismo de regra simples em Python. Você pode armazenar suas regras na String JSON ou YAML e usar este mecanismo de regra para corresponder à regra com o contexto.

https://github.com/tclh123/rule

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top