python3 规则引擎_几个常见规则引擎的简单介绍和演示

Ilog JRules 是最有名的商用BRMS;

Drools 是最活跃的开源规则引擎;

Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表;

Visual Rules(旗正规则引擎)国内商业规则引擎品牌。

今天对比了一下这四个颇有代表性的规则引擎的规则语言。其中Ilog和visual rules是商业产品,没有机会实战。

1.一样的If--Then 句式与Rete引擎

四者都邑把原本杂乱不勘的if---else---elseif----else,拆成N条带优先级的

"If  前提语句  then  实施语句" 的句式。

四者都主要使用foreward-chaining的Rete引擎,按优先级匹配条件语句,实施规则语句。

规则实施后会激发事实的变化,引擎又会重新进行条件匹配,直到不能再匹配为止,Rete的算法保证了服从的最高。

2.开辟人员操纵的规则语言

2.1 Drools的XML框架+Java/Groovy/Python嵌入语言

Drools的用XML的、 节点表达If--Then句式,而里面可以嵌入上述语言的代码作为判断语句和实施语句。

其中Java代码会操纵Antlr进行解释,而Groovy和Python自己即是脚本语言,可以直接调用。

Drools的聪明之处在于,用XML节点来典型If--Then句式和事实定义,使引擎干起活来很舒服。

而操纵Java,Groovy等原生语言来做判断和执行语句,让程序员很轻易过渡、移植,学习曲线很低。

hello.equals("Hello")

helloWorld( hello );

2.2 ILog的IRL(ILog Rule Language)

IRL用When{}Then{}表达

If--Then句式

When

{

?customer:

Customer(totalTime >=1000);

}

Then

{

execute

{?customer.setAmount(getAmount()-20.00);

}

文档称IRL的语法是Java Syntax-like的,但我怎么也看不出两者是类似的。不过他因为是商业产品,有很强大的编辑器和管理工具,编写规则的速度应该有一定效率。

2.3 Jess的CLIPS

jess用  =>  表达 If-Then句式。 这CLIPS是真正的程序员专用语言,而且还若是很专业的程序员才习惯的工具。但这种原本即是用来做专家系统的AI语言,对规则的表达本事也应该是最强的。

教学一下下面这段代码,airplane有一个属性--name,有两个子类--喷气式和螺旋桨飞机,其中螺旋桨飞机可以适用任意跑道,而喷气式飞机不能使用Grass跑道。

; Fact templates

(deftemplate airplane (slot name))

(deftemplate jet extends airplane)

(deftemplate prop extends airplane) ;

Rules

(defrule can-use-grass-runway

(prop (name ?n))

=>

(printout t "Aircraft can use grass - " ?n

crlf))

(defrule can-use-asphalt-runway

(airplane (name ?n))

=>

(printout t "Aircraft can use asphalt - " ?n

crlf))

3.客户使用的规则语言

若是客户可以自己尽情编写规则,无疑是产品一个很大的卖点。大部分客户都爱这样的东西。而且也只有把规则编写交给客户,才达到了规则引擎的全数意义。

3.1 Drools的 DSL

Drools的最新版Drools2.0Rc2里,House和Conways

game of Live两个例子有DSL的版本

对比一下Java版本,功效如下:

20

vs

room.getName( ).equals( "calvin" )

convertToCelsius( room.getTemperature() ) > 20

但这种XML Base的DSL语法实在好不了多少,而且实现的代价一点不少,要自己实现Conditons和Consequence Factory类,自行解释那段XML,根柢上没有什么便利的底层支持。

实在,一不做二不竭,爽性用Antlr来界说真正的DSL,同样是实现Conditons和Consequence

Factory类概略更好。只不外解释XML谁都会,Antlr就没什么人用而已。

3.2 ILog的BAL(Business Action

Language)-已改名ODM,最强王者

从文档来看,配合Ilog的编纂器,简直即是很完美的规则语言了,价格贵了点。

If

the call destination number is the preferred number

Then

apply the preferred number rate

3.3 Visual Rules(旗正规则引擎)--国内商业规则引擎代表:

完全本土化的国内规则引擎,有自主知识产权,全中文操作,比较适合国人习惯,在处理速度、内存占用方面都拥有一定的优势,感觉有些ILOG的翻译版本的意思,算是良心之作了。看看表现形式:

如果

用户名 = "admin"

那么

显示 = "你好," + 用户名

全中文操作界面,看起来比较亲切,规则表现形式也更为简洁。因为收费,所以没有太多资料展示,希望商家能提供基础功能版本供大家免费使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片识别不了小程序怎么办_图片转文字【微信小程序】

文字识别小程序在文章的底部直接拉到文章底部就可使用↓↓↓↓↓↓工作中,很多时间需要把纸质文稿上的大段文字变成可编辑文字,有时我们会一个一个文字录入,有时我们可以采用扫描仪,我们也用过扫描全能王APP。这里给大家介绍一种方…

pg与oracle区别,PostgresQL 学习记录之与oracle区别(一)

与oracle的区别1、数据类型区别OraclePostgresQL注释VARCHAR2VARCHAR(charactervarying)Long、CLOBTEXTDATEDATE/TIME/TIMESTAMPDATE仅包含日期、TIME仅包含时间、TIMESTAMP均包含,通常使用DATENUMBERSMALLINT/INTEGER/BIGINT/NUMERIC/REAL/DOUBLEPRECISION通常可用NUMERICBLOB…

python 数据分析排名_2018年上半年热门编程语言排行榜

2018上半年热门编程语言有哪些?新手怎么选择合适的编程语言,以及我们这些老鸟们,怎么规划自身的职业发展,拓展编程技能,接下来为大家提供参考建议!1PythonPython的历史可以追溯到1989年,因其高度…

oracle 双引号替换,oracle - Oracle SQL-Loader在值中有效地处理内部双引号 - SO中文参考 - www.soinside.com...

如果您在封闭的字段中没有管道,则可以从控制文件中执行此操作。如果你可以在一个字段中同时拥有管道和双引号,那么我认为你别无选择,只能对这些文件进行预处理。你的解决方案[1],取代双引号with an SQL operator,发生得…

切片器可以设置日期格式?_Power BI 中的切片器

何时使用切片器在要完成以下操作时,切片器非常有用:在报表画布上显示常用或重要的筛选器,用以简化访问。更轻松地查看当前筛选的状态,而无需打开下拉列表。按数据表中不需要的和隐藏的列进行筛选。通过将切片器放置在重要的视觉对…

linux打印jvm内存堆栈_5款强大的JVM 性能调优监控工具

原文链接:www.iteye.com/blog/josh-persistence-2161848现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock Contention)Java进程消耗CPU过高......这些问题在日…

oracle命令行查看编码,Oracle数据库查看编码和修改编码

首先查看oracle数据库的编码SQL> select * from nls_database_parameters where parameter NLS_CHARACTERSET;PARAMETER--------------------VALUE--------------------NLS_CHARACTERSETAL32UTF8这其来源于props$,这是表示数据库的字符集。oracle客户端编码SQL&g…

eclipse的tomcat如何运行自动弹网页_4个国外网页设计网站案例欣赏

原标题:4个国外网页设计网站案例欣赏要想把自己的网站制作得更加美观、吸引人,你需要多参考一些高质量的网站设计案例。今天就给大家看几个比较好的国外网页设计网站,你可以从中学习这些国外网页设计的思路。1.礼盒电商网站如何让自己的网站更…

参数调优为什么要采样_3年Java外包,内推阿里过关斩将,最后却倒在调优经验上! - Java架构师追风...

前言在当下的时代,懂高并发性能调优,一定是你在技术进阶赛道变得牛逼的加分项。不论,你是开发,架构还是管理岗,亦或者是其他互联网相关岗位。 因为毫不夸张的说,在现在动辄过千万级的并发流量环境下&#x…

ai算子是什么_隐私AI框架中的数据流动与工程实现

在上一篇文章中,我们介绍了,对于安全技术开发者,如何快速的基于 Rosetta 等隐私 AI 框架所提供的一系列接口,将自己的安全协议集成落地到上层的 AI 应用中来。在这一篇文章中,我们将介绍为了保护用户的隐私数据&#x…

oracle存储过程 ppt,oracle_存储过程培训(动画版本)详解.ppt

存储过程 ORACLE 和informix 存储过程区别 10.赋值 Oracle: v_1 : 100; Informix: let v_1 100; 2009/07/09 尚洋信德 存储过程 练习 创建一个存储过程, 使用游标从dept表中取BID为’010’开头的记录信息, 把它往表t01_psn中插入一条记录,并且循环打印插入的数据记录. 2009/07…

从零开始学电脑_带你从零开始学装机 打造自己的专属电脑之固态和机械硬盘搭配篇...

前几天我们分别讲了自己装配一台电脑,如何选择CPU、主板、内存和显卡。电脑的硬盘是安装操作系统和存储数据的地方,就好像我们现实中的仓库。一般电脑磁盘常见的组合方式有以下三种:1.纯机械硬盘(一般是1T或者2T)2.双硬盘(固态机械&#xff0…

java程序里繁体字显示为方块_网页 俄罗斯方块

游戏地址:俄罗斯方块 | Tetris​zhangxiaoleiwk.gitee.io看着眼熟?没错,UI 模仿了tetr.js,但代码是自己写的。只支持电脑端,不知道键位可以点击设置查看。游戏用纯 JavaScript、HTML、CSS 实现,图形用 canv…

oracle 日期6,EF 6与Oracle - 如何加入日期字段?

我正在使用EF 6与Oracle,我正在尝试使用员工编号和日期字段进行多列连接。我无法让LEFT OUTER JOIN正常工作,我很确定这是因为日期。我知道Oracle中的日期可能会非常棘手,我通常必须使用“TO_DATE”函数去掉HH:mm:ss&a…

windows分辨率修改工具_Windows 字体优化,这几个办法能帮你解决

如何改善 Windows 的字体渲染是一个亘古不变的话题,长期以来大家都有这样的一个印象:Windows 上面的字体渲染相比 macOS 没有那么细腻清晰。实际上,也确实是这个样子,由于 Windows 世界中参差不齐的硬件和向前兼容的「历史包袱」&…

fc安卓模拟器_RA替代计划(上)—3DS的全能模拟器太难用?推荐几个替代品给你...

玩模拟器的各位同好几乎没有没听过“全能模拟器”(中文译名,英文叫做Retroarch,简称RA,官网www.retroarch.com)的大名的,它的优点可以用一个字来概括,就是“全”。全能模拟器就是“全”第一,全模拟器支持。…

linux 命令 记忆方法,linux 记忆命令心得

新开始学linux,要记住很多的命令,毕竟这是linux的根本,没有这些命令,连操作都没办法进行。所以我写这个的目的是我自己记忆,也是想帮助一下一同学习linux的同学们,提供自己记忆这些的方法,抛砖引…

.net pdf转图片_图片转PDF怎么转?推荐两种图片转PDF方法

在我们的工作和学习中,我们有时候需要将图片转换为PDF格式的文件。因为PDF格式的文件查看起来很不容易,所以它可以确保图片文件中的信息不被泄露。那么图片转PDF怎么转呢?大家可以参考下面这两种方法,一起来看看到底是怎么转换的吧…

vue axios 发送get请求传递参数给后端失败_Java之Vue插件之Axios

Java之Vue插件之Axios,环境安装:npm install --save axios vue-axios //安装axiosNpm install //安装依赖在main.js中注册import axios from axiosimport VueAxios from vue-axiosVue.use(VueAxios, axios)在对应组件的方法中,发送axios请求&…

linux c 服务程序,Linux C 后台服务程序单进程控制

介绍通常后台服务器程序都必须有且只有一个进程,那么如何单进程呢?本例子是通过flock函数对/var/run/myserver.pid记录pid文件的进行加锁若加锁不正常,说明后台服务进程已经在运行了,这时则直接报错退出若加锁成功,说明…