我们有一个拥有数万个单位的系统.每个单元将有5-10米,每个仪表将具有与之相关的值.这些仪表的值发生变化,我们需要我们的规则引擎才能实时响应这些变化.
我们将有这样的规则"如果#1单元的第一个仪表大于10,而单元#1的第二个仪表小于30则......",尽管规则可能比这长得多.每个单元的规则将是完全独立的,因此不会有来自两个不同单元的两个不同仪表的值的规则.
我们将为每个单元提供大约30条相同的规则,然后每个单元将有大约5-15个自定义规则.在规则引擎运行时,需要动态添加这些规则.一个单位可能会在注册时添加5-10个规则,然后添加或删除规则,例如每周一次.
我们决定使用Drools,我正在努力弄清楚如何最好地实现它.我对Drools很新,所以我有点困惑.每个单位都有自己的知识库是否合理?如果是这样,有没有办法分享每个单元相同的规则?
我担心我们可能没有足够的内存来存储所有这些规则,所以我想如果我们有每个单元的知识库,我们可以序列化所有知识库,将它们放在数据库中,并在我们检索时检索它们需要它们.那会合理吗?
我想为每个单元使用单独的知识库的另一个原因是因为每个单元的规则完全独立于其他单元的规则,所以将它们全部放入相同的知识库可能会有性能损失.这是正确的还是Rete算法足够智能来解决这个问题?
此外,是否可以在引擎运行时动态添加规则?是否必须重新编译所有规则?如果发动机仍需要实时响应仪表变化,需要多长时间才能实现?
多谢你们.
我正在尝试定义一个中缀运算符,但我一直在收到错误.我正在使用GNU Prolog 1.4.
我试过这个:[用户].op(35,xfx,=>). CTRL-d
但得到错误"本机代码过程op/3无法重新定义(忽略)"
我也试过op(35,xfx,'=>').并得到了相同的错误,并试图在不输入[user]的情况下进行.首先,但是当我尝试使用运算符时,我得到了一个exists_error.