标签: rule-engine

天基架构?

Pragmatic Programmer的一章建议将黑板/基于空间的架构+规则引擎视为传统工作流系统的更灵活的替代方案.

我正在研究的项目目前使用工作流引擎,但我想评估替代方案.我真的觉得SBA可以更好地解决我们的业务问题,但我担心完全缺乏社区支持/用户群/供应商/选项.

JavaSpaces已经死了,JINI剥离Apache River似乎是生命支持.SemiSpace看起来很完美,但它是一个单人秀.唯一可行的解​​决方案似乎是GigaSpaces.

我想听听您对基于空间的体系结构的看法以及您在实际实现中所拥有的任何经验.

java architecture workflow rule-engine java-ee

14
推荐指数
1
解决办法
2454
查看次数

规则引擎可以实现什么?

使用规则引擎可以实现哪些目标?

rule-engine

14
推荐指数
1
解决办法
1万
查看次数

存储逻辑规则的适当数据结构和数据库模式是什么?

前言:我没有规则引擎,构建规则,建模规则,实现规则的数据结构等等方面的经验.因此,我不知道我在做什么,或者我在下面尝试的是什么.

我正在试图弄清楚如何存储和处理以下假设情景.为了简化我的问题,假设我有一种用户购买对象的游戏类型,其中可能有1000个可能的对象,并且必须按指定的顺序购买对象,并且只能在特定的组中购买.例如,假设我是用户并且我想购买对象F.在我购买对象F之前,我必须先前购买了对象A OR(B和C).我不能同时购买F和A,也不能购买F和B. 它们必须符合规则指定的顺序.先是,然后是F.或者,首先是B,C,然后是F. 我现在并不关心购买之间的时间跨度,或用户的任何其他特征,只是它们是现在的正确顺序.

为潜在的数千个对象存储此信息的最佳方法是什么,这些对象允许我读取所购买对象的规则,然后根据用户以前的购买历史记录进行检查?

我试过这个,但我一直试图实现A OR(B和C)这样的分组.我想将规则存储在我拥有这些表的数据库中:

 Objects
    (ID(int),Description(char)) 

ObjectPurchRules
    (ObjectID(int),ReqirementObjectID(int),OperatorRule(char),Sequence(int)) 
Run Code Online (Sandbox Code Playgroud)

但显然,当您处理结果时,如果没有分组,您将得到错误的答案.如果可能,我想避免过多的字符串解析:).一个对象可能具有未知数量的先前所需购买.用于处理规则的SQL或伪代码片段将不胜感激.:)

database boolean-logic rule-engine

14
推荐指数
1
解决办法
8473
查看次数

实体与用户定义的查询/过滤器/规则匹配时执行操作

通常,您编写查询并获取与其匹配的所有记录(实体).我需要做相反的事情.

假设我有1M个客户,有十几个非规范化属性:

public class Customer {
  public string Name {get;set;}
  public string Email {get;set;}
  public string Phone {get;set;}
  public DateTime Birthday {get;set;}
  public DateTime LastEmailed {get;set;}
  public DateTime LastCalled {get;set;}
  public int AgeInYears {get { return DateTime.UtcNow.Year - birthdate.Year;}}
  public int SalesTerritoryId {get;set;}
  // etc.

}
Run Code Online (Sandbox Code Playgroud)

我有10k用户想要设置自定义过滤器,并在任何新客户符合他们定义的规则时收到通知.

在创建/更新客户时评估其中一些规则(例如)

  • 拥有电话号码且在我的销售区域内的客户.
  • 电子邮件和LastEmailed的客户为NULL且销售区域为IN(1,7,11)

其他规则将定期运行(例如)

  • 客户今天过生日.

每天将为客户提供数百万次保存,并针对每个新客户/更新客户检查5-10k个自定义过滤器.

我意识到我可以将表达式树用于用户的过滤器,但最终会做到这样的事情:

public class CustomerRule : IRule {

  public bool IsMatch() {
    // Expression Tree Stuff
  }

  public bool DoAction() {
    // Notification Stuff
  }
} …
Run Code Online (Sandbox Code Playgroud)

.net c# notifications rule-engine

14
推荐指数
2
解决办法
883
查看次数

专家/规则引擎以原子方式更新事实?

原子上可能不是正确的词.在对细胞自动机或神经网络进行建模时,通常会有两个系统状态副本.一个是当前状态,一个是您正在更新的下一步的状态.这确保了在运行所有规则以确定下一步骤时系统整体状态保持不变的一致性.例如,如果您运行一个单元格/神经元的规则以确定下一步的状态,则运行下一个单元格的规则,它的邻居,您要将这些规则用作当前状态的输入相邻单元格,而不是其更新状态.

这可能看起来效率低,因为每个步骤都要求您在更新它们之前将所有当前步骤状态复制到下一步状态,但重要的是要这样做以准确模拟系统,就好像所有细胞/神经元实际上都是同时处理,因此规则/触发功能的所有输入都是当前状态.

在为专家系统设计规则时困扰我的是一个规则如何运行,更新一些应该触发其他规则运行的事实,并且你可能有100个排队等待运行的规则作为响应,但显着性被用作脆弱的确保真正重要的人先行的方法.随着这些规则的运行,系统会发生更多变化.事实的状态一直在变化,因此当您处理第100条规则时,系统的状态自从它真正响应第一个事实更改时添加到队列的时间以来发生了显着变化.它可能已经发生了巨大的变化,以至于规则没有机会对系统的原始状态作出反应.通常作为一种解决方法,你仔细调整它的显着性,然后将其他规则移到列表中,你会遇到鸡或蛋的问题.其他解决方法涉及添加"处理标志"事实,这些事实充当锁定机制以抑制某些规则,直到其他规则处理.这些都感觉像黑客,并导致规则包括超出核心域模型的标准.

如果您构建了一个真正复杂的系统来准确地建模问题,那么您真的希望将对事实的更改分段到一个单独的"更新"队列,该队列在规则队列为空之前不会影响当前事实.因此,假设您做了一个事实更改,填充规则队列以运行100个规则.所有这些规则都会运行,但它们都不会更新当前事实列表中的事实,它们所做的任何更改都会排队到更改列表,并确保在当前批处理时不会激活其他规则.处理完所有规则后,事实更改将立即应用于当前事实列表,然后触发更多要激活的规则.冲洗重复.因此它变得非常像神经网络或细胞自动机的处理方式. 针对不变的当前状态运行所有规则,队列更改,在运行所有规则后将更改应用于当前状态.

这种操作模式是否存在于专家系统的学术界?我想知道是否有一个术语.

Drools是否具有以允许所有规则运行而不影响当前事实的方式运行的能力,并且在所有规则运行之前单独排队事实更改?如果是这样,怎么样? 我不希望你为我编写代码,只是在API中调用它的一些关键字或关键字,一些起点可以帮助我搜索.

是否有其他专家/规则引擎具备此功能?

请注意,在这种情况下,订单规则运行不再重要,因为排队运行的所有规则都将只看到当前状态.因此,当运行和清除规则队列时,没有规则看到其他规则正在进行的任何更改,因为它们都是针对当前事实集运行的. 因此,顺序变得无关紧要,管理规则执行顺序的复杂性就消失了. 在从队列中清除所有规则之前,所有事实更改都将处于暂挂状态并且不会应用于当前状态.然后立即应用所有这些更改,从而导致相关规则再次排队.因此,我的目标不是更多地控制规则运行的顺序,而是通过使用模拟同时执行规则的引擎来完全避免规则执行顺序的问题.

rule-engine drools expert-system

13
推荐指数
1
解决办法
1270
查看次数

基于开源的规则引擎Java或Python

我正在寻找一个用Java或Python编写的规则引擎,它支持以下功能:

  1. 决策表
  2. 轻松创建简单的业务规则(最好由非技术人员)
  3. SOAP/REST支持

已经排除了Drools(非常笨重,对非技术用户不友好).

到目前为止候选人是:

  1. Nebri OS(Python/Django)
  2. 简易规则(Java)
  3. n-cube(基于Groovy)

阅读Easy Rules不支持前向和后向链接,以及广度优先和深度优先搜索策略.

它只执行一次所有规则.

任何人都可以建议一个基于开源的规则引擎,用Java或Python编写?

感谢您抽时间阅读.

python java rule-engine business-rules

13
推荐指数
2
解决办法
3万
查看次数

开源规则引擎,具有良好的编写规则界面

我正在尝试找到一个开源业务规则引擎,它具有构建规则的良好界面.

或者至少有一个在.Net平台上运行良好并且在过去12个月的某个时间更新过.

谢谢,

.net rule-engine

12
推荐指数
1
解决办法
8308
查看次数

C#:语法规则英语引擎?

我正在寻找可能存在或不存在的东西.Windows平台上是否有"英语语法规则引擎"(特别是.NET或C#)?

具体来说,我正在寻找能够在"将来时"中判断并将其改为"过去时"的内容(基于英语语法规则) ......如:

处理小部件软件,然后与里卡多会面

对此:

从事小部件软件工作,然后与里卡多会面

是否有规则引擎已经这样做了?

c# rule-engine

12
推荐指数
2
解决办法
5679
查看次数

何时使用业务规则引擎

何时使用业务规则引擎?

业务规则引擎和脚本/配置/自定义之间有什么区别

customization enterprise rule-engine business-rules

12
推荐指数
3
解决办法
1941
查看次数

基于c ++的大决策树设计模式

我正在为一个用c ++编写的游戏编写AI.AI在概念上相当简单,它只是通过决策树运行并选择适当的操作.我以前使用prolog作为决策引擎,但是由于其他开发人员使用c ++以及集成prolog代码的一些问题,我现在正尝试将其移植到c ++.

目前我在prolog(100+)中有一堆事实和规则.许多表达形式的东西,如果game_state然后做动作xyz.大多数规则都相当简单,有些规则相当复杂.我看了一个有限的状态机方法,但这似乎并没有如此好地扩展到更大的情况.我在c ++中编写这个代码的第一次尝试是一个巨大的噩梦,如果是其他案例陈述.我把这种代码随处可见:

    if( this->current_game_state->some_condition == true ){
        if( this->current_game_state->some_other_condition == false ){      
                //some code
        }else{
            return do_default_action();
        }
    }else if( this->current_game->another_condition ){
        //more code
    }
Run Code Online (Sandbox Code Playgroud)

复杂性很快变得难以管理.

如果有一个很好的方法来编写c ++中的这类问题?有没有好的设计模式来处理这种情况?不要求逻辑必须包含在源代码中,只需要从c ++访问即可.唯一真正的要求是它速度相当快.

我还查看了规则引擎,如果速度足够快,它们可能是合适的.你知道是否有适合的开源c ++规则引擎?

c++ design-patterns rule-engine

12
推荐指数
2
解决办法
3581
查看次数