决策树与规则引擎

人们对决策树的使用

决策树常常被应用于数据挖掘之中,是最基础的算法之一,几乎每一个学习过数据挖掘的朋友都知道决策树。但还原决策树本来的用途,它被用于一些决策或决定时,还是比较实用和直观的。其树型结构指导人们进行在面对某个决策时,先关注其中几个最重要的方向,这几方向定下来后,再细分下去。近年来泳道路,思维导向图之类的图形/办公自动化工具慢慢兴起,得到大家的广泛好评,也就是决策树的一个很好的实现。

不过在各企业的应用系统中,又决策树又不是很常用,归根到底,决策树是思维导向的内容,是飘忽不定的东西,要形成结构化的内容非常困难。而且市面上大多数的业务系统都是使用关系型数据库,在处理格式数据时非常的方法,但处理树形数据就不一定性。所以也慢慢有部分技术公司开始使用对象型数据库。另一方面,决策树中的决策和判断都比较不规则,很多内容更像是程序员在编程,是一些规则,不是信息,这导致了传统的业务系统处理困难。

决策树的组成与程序表现

决策树使用一个树型结构来表达业务规则。如下图所示。

每一个非叶子结点都代码一个决策/决定,而叶子结点执行动作。而每一条边表达决策的可选定值,可以理解为判断。

如下图,A=red或=blue是可选值,而B属于决策结点。

但在程序实现中,就不一定是这样的组织方式,一般而言,结点的文字会比线上的文字更容易看清楚,加上各种编程语言都基于上有树型控件的处理,都是以结点的形式表达,很少使用连接线来表来。所以上图在程序中,最常见的表示方法,是把大量信息都集中在结果中。如A=red的结点,就直接写A=red,而不是另外命名,而对于叶子结点,则需要有更详细的地方显示其执行的动作(Action),实现的效果可能如下

部分决策表的数据,其实也可以组织为决策树,或使用决策树来表达更加的合适。决策树可以快捷有效地关联多个相关的规则,通过树型的关系,可能非常清晰地查看各个层级的决策逻辑。运算执行时,可以快速遍历各个决策结点,检查是否符合条件,如果符合条件再往下遍历。最终找到适用的条件和适用的操作动作。

停车场收费例子使用决策树

业务系统的调用方不用填空任何代码,所有的计算都在CKRule中进行了。CKRule中的设置正如上图。

ParkFee _pf = new ParkFee();

_pf.ParkType = cmbParkType.Text;

_pf.DistType = cmbDistType.Text;

_pf.CardType = cmbCardType.Text;

_pf.PartTime = Convert.ToDouble(numericUpDown1.Value);

_pf = new RuleFacade().Exec("费用-停车费计算-决策树", _pf);

txtFee.Text = _pf.Fee + "";

要查看规则的设置内容,请使用CKRule编辑器,打开“费用-停车费计算-决策树.ckp”文件,找到决策树和主规则进行查看。

相关源代码,Demo下载: http://www.ckrule.com/cn/demo.html

决策树与规则引擎,布布扣,bubuko.com

时间: 2024-07-30 13:40:55

决策树与规则引擎的相关文章

Drools规则引擎初窥---drl和决策表实现[实例]

因项目需要,看了下drools规则引擎.写了一个比较简单的drools的drl规则和决策表实现的例子. 规则说明: 网络商城要举办活动(奖励额外积分), 订单原价金额在 100以下, 不加分 100-500 加100分 500-1000 加500分 1000 以上 加1000分 1.建立最基本的Drools项目结构并引入必须的类库.(这里采用junit来执行单元测试).创建一个Java Project,建立maven形式的源码包. 2.定义实体类Order.java 1 import java.

浅尝CKRule规则引擎

最近在参与一家材料公司的ERP系统开发,主要负责仓储系统.由于该公司的业务流程相对复杂且多变,做得那是万般痛苦,成天沉浸在业务变更代码大改的死循环里,久而久之,有种遥遥无期的绝望. 怎样才能很好或者说比较轻松的去适应这样的复杂业务变化?最近真没少在园里看大神们的贴子,但是收获甚微,也许是我个人理解的深度不够.前两天无聊的时候,把心里的唠叨在圈子里发了下,后来有人给我推荐了个叫“CKRule”的规则引擎.规则引擎?小弟孤陋寡闻还是第一次听,一番百度后找到了CKRule的官网,果断下载了试用版.文件

规则引擎入门

什么是规则引擎? 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策. 参考: http://baike.baidu.com/link?url=BfAR-sxz1ryvOZ4uSVCqn9Csy51U5qCUaIomAQBogPE7FOxbbDB-2iXWR6N8FReIkoNNdc-Hk4y0sxKWpknWd_ 规则引擎和工作流引擎有什么区别? 工作流引

.Net规则引擎介绍 - REngine

规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策. 个人理解 变化点过于集中在一点,为了适应变化,而给各种场景分别写了各自关于那点的代码逻辑,尽管主要的业务逻辑相同. 适用点举例 计算折扣,需要根据客户的积分决定打折点 工作流具体节点的路由控制 其他(希望大家补充下,想象力有限...) 用法 以计算客户打折点为例: 我们首先得新建一个规则文件,用

规则引擎

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策. 应用背景: 企业级管理者对企业IT系统的开发有着如下的要求: 1.为提高效率,管理流程必须自动化,即使现代商业规则异常复杂. 2.市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速.低成本的更新. 3.为了快速.低成本的更新,业务人员应能直接管理IT系统中的规则,不需要程序开发人员参与. 使用规

规则引擎设计概况

在一个系统中业务规则占据了相当大的比例,而且是变动最为频繁的,我们总是希望把容易变动的和不容易变动的分离开来,这样就不至于因为修改易变的部分影响不需变的部分,从而简化系统修改的复杂性,也提高系统的灵活性. 在一个系统中我们把组成部分拆分为数据,逻辑,界面等几个部分,其中数据又可以进一步拆分为水平和垂直部分,对于逻辑绝大部分是”如果-那么”这种形式,对于界面部分可拆分为页面,控件(文本框,下拉框,日期,文件,图片,单选框,多选框等)和展示权限(可看,可编辑). 业务逻辑从本质上来讲就是一种规则的集

使用规则引擎Drools计算圆周率PI

实际上是使用规则引擎能够更新工作内存区重新匹配规则实现迭代功能. 使用了策略模式实现. <规则引擎与RETE算法介绍> PPT : http://files.cnblogs.com/lovesqcc/%E8%A7%84%E5%88%99%E5%BC%95%E6%93%8E%E4%B8%8ERETE%E7%AE%97%E6%B3%95.pptx 1.  CalcPI.java package sample; import java.util.ArrayList; import java.util

IBM规则引擎(ODM)入门系列二:Rule Execution Server(RES)服务安装

今天开始了ODM入门系列之二,在这个系列中我会讲讲规则执行服务的搭建安装,规则集的打包发布以及如何将部署之后的规则集发布为web服务,供其他服务或应用使用. 首先,我们先看一幅图: 这是我画的一张ODM各组件之间关系,其中WEB APP是我们自己的项目或应用,可以通过web服务的形式来调用RES上已经部署的RuleApp包来执行规则. 再来看一张图: (截屏自IBM官网) 这是IBM官网上的一张介绍ODM不同组件如何交互的一张图. 从这两张图都可以看出RES在ODM整个产品中都起着一个非常重要的

SNF快速开发平台--规则引擎介绍和使用文档

设计目标: a) 规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b) 能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c) 运算速度快 d) 有良好的展现效果,能够在售前阶段帮助销售 e) 提供良好的调试和诊断手段,便于配置规则 可以把以前固定写的业务逻辑,特别不确定的那种和变化比较多的写到规则中去.这样在实施时不同客户有各种各样的需求,可以按需配置,并不能修改程序代码,这样就更灵活. 并且我们实现的日志跟踪调试,运算符.条件语