【问题标题】:Rules Engine in C or Python [closed]C或Python中的规则引擎[关闭]
【发布时间】:2009-12-17 23:39:14
【问题描述】:

我正在寻找用 C 或 Python 编写的规则引擎,但如果您知道用另一种语言实现的规则引擎,我会很高兴知道。

该引擎将用作使房屋自动化的方式,例如当有人离开房间时关灯等。因此,那里没有“办公室”规则(也就是您在 Excel 等中是否有规则)。

我研究了 Java 中的 Jess 和 Drools,它们做得很好。我想知道其他人,并且可能使用比 Java 更少的内存。 我听说过 Python 中的 RuleCore,但实际上找不到任何文档(SourceForge 提供 1.0 版,但看起来他们正在销售 2.0 版)。

编辑:规则引擎(推理引擎)是指 RETE 或等效的实现。

【问题讨论】:

标签: java python c rule-engine


【解决方案1】:

在 Python 中搜索基于 RETE 的规则引擎时,PykePyCLIPS 可能是您想要使用的。

PS:我对 S.Lott 关于 Pyke 的回答发表了评论。我根据他的建议发布了一个单独的答案,也让其他读者很容易知道,如果他们正在搜索这个答案中提到的规则引擎,他们可能是一个可能的选择。

【讨论】:

  • PyCLIPS 就是这样。将我的 Jess 规则转换为 CLIPS 真的很容易。
【解决方案2】:

您可以按照已经建议的方式查看CLIPS,或者,如果您想付钱或需要它Rete2。我过去在 Unix 上使用过 CLIPS,并成功地将其嵌入到其他应用程序中。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    ruleby 是一个用 ruby​​ 编写的规则引擎。它是 ruby​​hoedown 2008 的演讲主题:ruleby-the-rule-engine-for-ruby

    【讨论】:

      【解决方案4】:

      Pychinko 已经存在了一段时间。我从未在生产中使用过它,但不久前就可能的生产应用进行了调查。看起来它有很好的功能和一个体面的用户社区。​​p>

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

      【讨论】:

      • 谢谢。你知道社区的任何邮件列表或 irc 频道吗?它看起来不再被维护了。你听说过 pyCLIPS(我刚刚发现)吗?
      【解决方案5】:

      实际上,Python 一个规则引擎。

      “该引擎将被用作使房屋自动化的方式,例如当有人离开房间时关灯等。”

      您需要传感器和控制器。你把你的“规则”写成普通的 Python 对象。

      您的主“程序”从您的传感器收集事件并将事件发送到您的控制器。

      如果您可以通过普通 USB 从传感器读取数据,那就更好了。海事行业使用 NMEA 0183 和 NMEA 2000 等几个密切相关的标准来指定总线上从传感器到控制器的流量。

      您不需要另一种规则语言。你有 Python。

      【讨论】:

      • 我不确定你的意思,但我想你可以说任何图灵完备的语言实际上都是一个规则引擎。我可能应该提到 RETE 算法,它比根据每个规则检查事实要快得多。由于我不是 Python 专家,因此我不确定您将如何做到这一点。你有任何解释它的链接吗?
      • @Yanik:如果推理是问题空间的一部分,那么更新问题以包含这一事实。必须规则处理不涉及推理。如果您需要推理,请更新您的问题,请明确说明。
      • 如果您正在寻找对规则的推断,那么查看 Pyke [pyke.sourceforge.net] 会有所帮助
      • @ardsrk:请将您的评论作为单独的答案发表,以便我投票。
      【解决方案6】:

      Rulecore 确实部分是用 Python 编写的。但这并不重要。作为用户,您无论如何都不会看到任何这些实现​​细节。

      这些规则是纯声明性的,并使用 XML 定义。 XML 使用 Web 服务或 JMS 或其他协议作为事件发送到 ruleCore CEP 服务器。

      【讨论】:

        【解决方案7】:

        这里列出了 13 个 Java 开源规则引擎,Drools 可能是其中最好的。 http://java-sources.org/open-source/rule-engines

        【讨论】:

          【解决方案8】:

          我知道 ruleCore 有一些部分是用 Python 编写的。但 API 使用 XML 和 ActiveMQ 或 WebServices,因此处于更高的抽象级别。

          【讨论】:

            【解决方案9】:

            Nebri 是为家庭自动化和其他软件/机器编写规则的最简单方法。下面是一个完成关灯的例子:

            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")
            

            这是一个让你的房子自动化的完美工具,因为你可以 pip 安装现有的库以在你的脚本中使用。 Nest、SmartThings、Sense 等。这只是 Python!

            关于为什么 Python 本身不是规则引擎的更完整解释,请参阅this article。正因为 Python 本身可以执行规则,所以你手头没有规则引擎。事实上,这是一个巨大的架构转变。

            【讨论】:

              【解决方案10】:

              我用python写了一个简单的规则引擎。您可以将规则存储在 json 或 yaml 字符串中,并使用此规则引擎将规则与上下文匹配。

              https://github.com/tclh123/rule

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-04-24
                • 2016-03-04
                • 1970-01-01
                • 2011-12-01
                • 1970-01-01
                • 2010-10-11
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多