规则的哲学思考

来源:互联网 发布:知乎正义女神不睁眼 编辑:程序博客网 时间:2024/05/08 08:38

1       规则的哲学认识

1.1  什么是规则

“在线新华字典”中对规则的解释是“①规定出来供大家共同遵守的制度或章程:交通~丨借书~丨工厂管理~。②规律;法则:自然~丨造字~。③(在形状、结构或分布上)合乎一定的方式;”。

规则,是规定出来供大家共同遵守的制度或章程,一切体制,不论是政治体制、教育体制、宗教体制还是家庭体制,都被规则所统治。规则,是以一种可持续可预测的方式运用信息的系统性决策程序。规则是多种多样的,有规则是基本的:遵纪守法,优胜劣汰,引导竞争,多边对话,多劳多得等等,都是现在社会比较稳定的基础规则。但也有在变化的,从"建立小康社会""建设和谐社会","快速发展""可持续发展"等等,这些都是随着时代和文明的进步而对规则的更进.

事实上,规则乃是我们所掌握的一种手段,用以应对我们对特定行动之结果的无知;再者,我们赋予这些规则的重要性,不仅是以它们致力于防阻的那些可能会产生的危害的量为判断基础的,而且也是以(在规则被无视的情况下)危害产生的可能性程度为判断基础的。

在现实生活中,比如看奥运比赛,可以让人感到规则的魅力。这个大规则竞技场,之所以能掀起一阵阵欢腾的巨浪,在于规则。奥运文化之所以传遍世界,就是规则的魅力。不分贵贱,只讲规则。规则就是要打破一切权力定势和暗箱操作,运动员和裁判员都置于观众的眼睛之下,决不会出现既当运动员又当裁判员的权力游戏。

1.2  为什么需要规则

规则是约束人们的行为的,是社会对应然行为的抽象。抽象的行为规则很有一些符号特征,就如马路上的红绿灯。当规则适用于社会现实的时候,如果现实是虚假的或者扭曲的,规则的意义就不复存在了。

人类社会需要规则,因为规则是社会得以维持的必要条件。在一个特定的空间中,如果只有一个人,规则是不必要的。如果多了一个人,一些简单的规则就必需了。比如,两个人如何互不干扰,再进一步,如何互相协调。不幸的是,社会是由很多人组成的,他们不得不依照规则来分享自然、社会、政治和权利资源,因此,规则和人类社会共生,按照自然法学家的说法,是为了保证人类不在互相争夺中毁灭。国家产生以后,在社会中占支配地位的力量所制定的规则获得国家强力的支持,但是规则的遵守主要还是要依靠社会成员的内心对规则的尊重,前提是遵守规则给每个人带来好处。例如,西方社会近代以来法治架构的形成给个人提供了充分的自由和发展空间,人们遵守规则,同时也在法治的范围内获得个人的最大利益。

人为什么不遵守规则?或者说人在什么条件下不遵守规则?答案很简单,如果不遵守规则不会受到惩罚而且能够带来利益,那么人们一定不遵守规则。偷税漏税是典型的例子。买卖假学历也是典型的例子。一个社会最可怕的是形成一个破坏规则的链条,在这个链条的作用下,破坏规则的行为得到最大限度的承认和保护。例如,凭借假学历凑够升迁的条件,前提是负责升迁的部门认可假学历。遵守规则是利益驱动,不遵守规则也是利益驱动。因此,从制度设计来说,迫使人们遵守规则的最有效手段是运用利益机制,使其损失大于其对收益的期待。

然而,这么简单的问题在我们的社会中更复杂一点。中国是儒家思想的故乡。儒家文化,讲究的是礼。礼的核心是不同的社会阶级遵守不同的行为规范,所谓“君君、臣臣、父父、子子”,别亲疏,殊贵贱,每个人因为遵守不同的规则而获得自己的最大利益,社会也因而形成一个和谐的整体。个人的高贵与卑贱经常是和处在什么样的规则调整范围联系着的。故中国虽然是历史悠久的文明古国,也是世界上最早有成文法的国家,发达的规则曾为亚洲其他国家的楷模,但是不遵守规则,或者遵守与别人不同的规则是隐藏在国人心中的一种欲望,此欲望的实现,即使不能带来利益,也能带来与众不同的感受。即使到了今天,一旦能够通过不遵守规则或者破坏规则而获得利益,则不但窃喜于胸,而且溢于言表。

1.3  规则的作用

规则的作用,第一,社会生活中存在着这样一种结构,它所具有的可探知的组成部分并没有被人们理解成有意识的构造之物,甚或它们本身也没有呈现出可辨识的设计方案,而且就是在这种结构之中,我们也不知道有些特定的事情为什么会发生;因此,与那种刻意建构的组织相比较,上述那种结构应当是我们成功追求自己目的的一种更有效的基础。第二,有关任何人都不知道变化的原因(因为这些变化所记载的事实,从整体上来说乃是任何人都不知道的)这种现象,对我们来说也是极为有利的。伴随着进化论理性主义或批判理性主义(evolutionary or critical rationalism)的传播,上述观点才会得到普遍的接受,因为进化论理性主义或批判理性主义不仅意识到了理性所具有的力量,而且也意识到了理性所具有的限度,更是认识到了这种理性本身也是社会进化的一个产物。但是另一方面,人们对那种符合建构论唯理主义者之标准的简单明确之秩序的诉求,却必定会把那种更具包容性的秩序摧毁掉,因为这种秩序远不是我们的刻意建构能力所能及者。自由意味着我们在某种程度上已经把自己的命运托付给了我们无力控制的种种力量,而这似乎是那些建构论者所不能容忍的,因为他们相信人能够主宰自己的命运——就好像文明和理性本身都是人的造物似的。

1.4  制订规则的目的

没有规矩不成方圆。这是放之四海而皆准的真理。说的是在做任何事情的时候都要有规矩和行为制度。制度是共同遵守的办事的规程和行为准则。比如淘宝规则的目的是维护消费者和商家之间共同利益,就淘宝方来说做到尽量维护卖家和买家之间的相互利益以及保障交易安全,退换货物,售后服务,赔偿适宜等等,总得来说淘宝制定规则的目的是维护互联网交易的信任度和安全性!

1.5  规则的要素

规则是由判断和处理行为两个要素组成。判断在上一篇已经讲过是由主项(S)、谓项(P)、联项(是/不是)、量项(全部、部分、某个)四部分组成。但在判断行为完成后,需要给出是将采用什么行为,不是将采用什么行为,来确保这一规则的长期性。举例说明。法律规则的三要素:假定条件、行为模式、法律后果。假定条件是法律规则中有关适用该规则的条件和情况的部分,包括适用条件和主体行为条件;行为模式即法律规则中规定人们如何具体行为之方式的部分,包括可为(授权)模式、应为(义务)模式和勿为模式;法律后果是法律规则中规定人们在作出符合或不符合行为模式的要求时应承担相应的结果部分,包括肯定的后果和否定的后果。

2       程序中规则的认识

2.1  规则引擎的认识

什么是业务规则?在需求里面我们往往把约束,完整性,校验,分支流等都可以算到业务规则里面。在规则引擎里面谈的业务规则重点是谈当满足什么样的条件的时候,需要执行什么样的操作。因此一个完整的业务规则包括了条件和触发操作两部分内容。而引擎是事物内部的重要的运行机制,规则引擎即重点是解决规则如何描述,如何执行,如何监控等一系列问题。

对于快速软件开发平台往往会包括两个方面的内容,一个是可重用性,一个是可配置性。对于公用组件,公用基础类库,公用算法等往往是增加了可重用性;而对于对象模型,权限模型,工作流模型,规则引擎则是解决平台的高可配置性。

(1)     权限模型实现了用户岗位,角色和权限调整可配置。

(2)     工作流引擎实现了在流程出现变化的时候可以灵活配置。

(3)     规则引擎将业务决策也从程序代码从抽离出来,实现规则变化也可以灵活配置。

在有了元数据模型,对象模型,工作流,权限,界面模型后。剩余的两个重点就是事件和规则,如果事件和规则能够灵活配置和修改,规则本身又能够很好的复用,则可实现一个较为完整的快速开发平台。

2.2  规则的定义和访问

过去大部分的规则引擎开发并没有规范化,有其自有的API,这使得其与外部程序交互集成不够灵活。转而使用另外一种产品时往往意味需要重写应用程序逻辑和 API调用,代价较大。规则引擎工业中标准的缺乏成为令人关注的重要方面。200311月定稿并于20048月最终发布的JSR 94Java规则引擎API)使得Java规则引擎的实现得以标准化。

JSR 94中没有涉及用来创建规则和动作的语言.规则语言是规则引擎应用程序的重要组成部分,所有的业务规则都必须用某种语言定义并且存储于规则执行集中,从而规则引擎可以装载和处理他们。规则语言的详情这里不作详细介绍,名称及其网址列出如下:

rule Markup language (RuleML)                       

Simple Rule Markup Language (SRML)                   

Business Rules Markup Language (BRML)                   

SWRL: A Semantic Web Rule Language Combining OWL and RuleML  

多种规则语言的使用使得不同规则引擎实现之间的兼容性成为问题.通用的规则引擎API或许可以减轻不同厂家API之间的问题,但公用规则语言的缺乏将仍然阻碍不同规则引擎实现之间的互操作性。尽管业界在提出公用规则语言上做出了一些努力,比如说RuleML,SRML的出现,但距离获得绝大部分规则引擎厂商同意的公用标准还有很长的路要走。

2.3  规则的执行

在规则的定义阶段,会根据业务情况定义相应的规则,规则用规则语言描述。多个规则可以形成一组规则集合。而规则引擎的执行首先就是装载一个规则集,对规则进行解析。同时根据规则推理引擎,将这些解析完成的规则执行到具体输入的数据对象上。

当引擎执行时,会根据规则执行队列中的优先顺序逐条执行规则执行实例,由于规则的执行部分可能会改变工作区的数据对象,从而会使队列中的某些规则执行实例因为条件改变而失效,必须从队列中撤销,也可能会激活原来不满足条件的规则,生成新的规则执行实例进入队列。于是就产生了一种“动态”的规则执行链,形成规则的推理机制。这种规则的“链式”反应完全是由工作区中的数据驱动的。

规则条件匹配的效率决定了引擎的性能,引擎需要迅速测试工作区中的数据对象,从加载的规则集中发现符合条件的规则,生成规则执行实例。1982年美国卡耐基•梅隆大学的Charles L. Forgy发明了一种叫Rete的算法,很好地解决了这方面的问题。目前世界顶尖的商用业务规则引擎产品基本上都使用Rete算法。

2.4  开源规则引擎产品

(1)     Drools - Drools规则引擎应用Rete算法的改进形式Rete-II算法。从内部机制上讲,它使用了和Forgy的算法相同的概念和方法,但是增加了可与面向对象语言无缝连接的节点类型。

(2)     Mandarax 基于反向推理(归纳法)。能够较容易地实现多个数据源的集成。例如,数据库记录能方便地集成为事实集(facts sets)reflection用来集成对象模型中的功能。目前不支持JSR 94

(3)     OFBiz Rule Engine - 支持归纳法(Backward chaining).最初代码基于Steven John Metsker"Building Parsers in Java",不支持JSR 94

(4)     JLisa - JLisa是用来构建业务规则的强大框架,它有着扩展了LISP优秀特色的优点,Clips还要强大.这些特色对于多范例软件的开发是至关重要的.支持JSR 94

 

 

 

 

 

原创粉丝点击