CLIPS程式技巧_第1页
CLIPS程式技巧_第2页
CLIPS程式技巧_第3页
CLIPS程式技巧_第4页
CLIPS程式技巧_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、clips程序技巧 练习一 (安装与设定)练习二 (简易程序)练习三 (数据定义与逻辑比较)练习四 (模块化)练习五 (读取数据)练习六 数据(知识)结构练习七 对象导向程序设计练习八 过程控制与平行处理撰写程序经常发现的问题实例讨论专家有何特殊不同之处?和用网页来表达有何不同?procedure/non-procedure languages哲学思考练习一 (安装与设定)l 下载程序及安装 ( l 请下载示范程序(.tw/webusers/ftlin/course/空间逻辑/ex 1-3 icstrategies.clp),供练习一、二、三使用。l 请

2、尝试交谈式操作n 窗口操作n load:加载纯文字文件(.txt)的应用程序 (*.clp)n reset:重置。不移除应用程序,但是所有参数均重设成原默认值。n clear:移除程序,必须重新加载(其它)程序,始能执行。l 交谈式简易操作n clips是类似lisp 的人工智能(ai)语言。n 所有的表达式均为函数(function),写在 ( ) 之内,运算子(operator)位于第一位,其余操作数(operand)跟随在后。运算子和各操作数之间均以空格隔开(不是逗号)。空格只要一格以上即可,多空无妨。n 请试 (+ 1 2) ,看会发生什么结果?n (+ 1 3 5) n 请自行试其它

3、的表达式。l 实务上,仍须写成应用程序。l 请注意:括号要双双对对! 请养成良好的程序格式习惯,会减少很多程序除错的时间和体力!练习二 (简易程序)l txt档案格式;扩展名: clpl 主要包括二部份: deffacts, defrule 【此二字均是保留字,视为operator】l deffacts 定义已知的事实, defrule 定义推理规则l ; 注记行l 事实以串行表示。如: (relation x y z)l ?x 代表变量。如: (relation ?x ?y ?z )l 英文字之大小写有别! 例如:(duck) 和 (duck) 是不同的fact。l 请注意双引号 之使用,不

4、能用words里的双引号。wordpad 或小作家的双引号才行。l 仅注记行及字符串得用中文。指令及变量均须英文字母(及合法之符号)。l 推理方法为型态比对(pattern matching),同位之常数要相同,变量可以对应变量或常数。元素个数要相同。=左(上)方之所有事实均比对成功后,该规则被启动(activate)并置入议程(agenda)之中。议程依一定之策略(strategy)次序执行(fire)已被启动之规则的=右(下)方各指令。l 各规则之启动,系因左(上)方事实成立。换言之,一旦事实有所增减,专家系统即会自动找寻有那些规则可被启动,或议程内原被启动之规则,不再可以启动,而自议程撤

5、下。l 以下是可执行的应用程序实例。;-; 例: 都市发展策略; 宣告基本信念;目标/策略关系 策略本身是一种次目标(deffacts goal-strategies(gs 都市发展策略 减少失业率) ; 都市发展策略: 减少失业率(gs 减少失业率 吸引厂商); 减少失业率策略: 吸引厂商(gs 吸引厂商 降低通信成本); 吸引厂商策略: 降低通信成本(gs 吸引厂商 充足的网络建设); 吸引厂商策略: 充足的网络建设(gs 降低通信成本 民营化);降低通信成本策略: 民营化);推理规则; 推出所有的 目标-策略 关系 (策略本身也是一种次目标)(defrule t-gs (gs ?x ?y

6、) (gs ?y ?z)=(assert (gs ?x ?z) ;已知之事实用 deffacts。后来推论所得者用assert。(printout t 欲达成 ?x 可采取 ?z 之策略 crlf);-;实例结束;-【作业】 l 会推导出欲达成减少失业率可采取民营化之策略,合理吗?l 请将城乡发展相关文献之知识改写成专家系统之形式,以clips推理,看结论是否合理?并讨论其问题出在何处?如何修正,可以使推理合理化?练习三 (数据定义与逻辑比较)l 用 deftemplate 定义某一数据型态之纲目(schema),再用描述该数据型态之实例。如下,我们先定义city数据型态,再描述glasgow

7、市之各属性值。; 定义city数据型态(deftemplate city(slot name)(slot area)(slot population)(slot popu-year)(slot popu-year-type)(slot rate-of-jobless)(slot rate-of-jobless-year)(slot rate-of-jobless-year-type); 描述glasgow市之各属性值(deffacts basic-data-of-glasgow(city (name glasgow) (population 600000) (popu-year 1980)(p

8、opu-year-type s)(rate-of-jobless 0.168)(rate-of-jobless-year 1996)(rate-of-jobless-year-type y)l 逻辑比较要放在rhs,用if-then-else,如下例:(defrule determine-the-degree-of-jobless (city (name ?x) (rate-of-jobless ?y) (slot rate-of-jobless-year ?z)=(if ( ?y 0.05)then (assert (status-of-jobless ?x serious)(printou

9、t t ?x 在 ?z 年的失业率十分严重 crlf) else(assert (status-of-jobless ?x no-problem)(printout t ?x 在 ?z 年没有失业问题 crlf) )【作业 新增数据及规则】(1) 自行以deffacts之指令,增加1-2个城市的数据。(2) 执行练习三之程序,看是否正确判断城市之失业问题。(3) 加入以下的规则:若x在z年的失业率十分严重,则x应找寻新的发展策略。练习四 (模块化)l 可以分别写在不同档案l 分别load各檔l 或者写成一批次档(如下,扩展名bat),再以 load batch指令一次加载,例如:n (load

10、 c:/documents and settings/ftlin/my documents/courses/空间逻辑/信息城市/模块化/ex4 - 变量中文意义.clp)n (load c:/documents and settings/ftlin/my documents/courses/空间逻辑/信息城市/模块化/ex4 - 目标策略关系.clp)练习五 读取数据l 用read读取一个字;用readline读取一个句子(数个字)。l 用bind 将读取的字(句),指派给某一变数l 请注意执行过程中,facts窗口内容的变化。(read 或readline所读入之数据会出现在facts窗口)

11、l 由键盘读取数据: l 相关指令: read(defrule test-read(initial-fact)=(printout t name a primary color crlf); 【printout 后面的 t 代表输出到屏幕 】(assert (color (read); 【单独的 read代表由键盘输入】)l 由键盘读取一行字,并存于某变量,以供后续使用。l 相关指令:(readline) 、(bind )(defrule test-readline(initial-fact)=(printout t enter input crlf) (bind ?string (readl

12、ine) ; 【bind 指令: 将由键盘读入之文字存于变量 ?string之中】(assert-string (str-cat ( ?string ); 【str-cat 指令:将数个字符串连成一个字符串】l 开启档案,并写入、读取、增加一行字。l 相关指令: open, close, printout, readline, read(defrule test-read(initial-fact)=(open test.dat rfile w); 【档案test.dat位于与程序相同之目录中】; 【可以加上路径,以存取位于其它目录之档案】; 【rfile为简称,尔后程序中均使用简称,不用(含

13、路径之)文件名称】 ; 【w表示本档案仅能从头写入,会覆盖原有文字;不能读取】(printout rfile this is the first test line. crlf); 【printout后加上档案简称,将字符串输出于该档案】(close); 【关闭档案,档案游标将回到档案开头】(open test.dat rfile r); 【r表示本档案仅能被读取,不能写入】(printout t (readline rfile) crlf); 【readline后加上档案简称,表示由该档案读取一行字符串】(close)(open test.dat rfile a);【a表示该档案仅能由文末写

14、入新字(串),不会覆盖原有数据】(printout rfile this is the 2nd test line. crlf)(close)【完整程序范例亲属】; 本程序可以推论亲属关系; 本程序使用了以下之述词(predicate); ( a x y) 代表: x 是 y 的 长辈; (deffacts names(a 甲 乙)(a 乙 丙)(a 乙 丁)(a 乙 戊)(a 丁 己)(defrule ancestor(a ?x ?y)(a ?y ?z)=(assert (a ?x ?z)(defrule ask=(printout t 请输入长辈的名字:)(bind ?x (read)(a

15、ssert (person ?x)(printout t crlf)(defrule answer(person ?x)(a ?x ?y)=(printout t ?y 是 ?x 的晚辈 crlf)【作业新增数据并存盘】增加上述亲属程序之功能:询问新的亲属关系,写入数据文件。下次执行时,先行读取该数据文件。练习六 数据(知识)结构一、指令练习l 复选及重置n .tw/webusers/ftlin/course/空间逻辑/复选.clpl global variablesn .tw/webusers/ftlin/cou

16、rse/空间逻辑/globalvar.clpn local variablesl 串行(list)n .tw/webusers/ftlin/course/空间逻辑/事实串行.clpn .tw/webusers/ftlin/course/空间逻辑/num-arguments.clpl while loopl 复合条件逻辑运算and, or, notl 检查某事实不存在: notn .tw/webusers/ftlin/course/空间逻辑/事实不存在的not.clp二、 基本

17、数据结构l 宗亲(质性关系)n .tw/webusers/ftlin/course/空间逻辑/宗亲.clp n 【作业兄弟姐妹】利用宗亲程序,推论出同父母之兄弟姐妹的关系。n 【作业同辈】改写(增修) 宗亲程序,推论出同辈的关系。(提示:记录辈份差)n 【作业亲等及辈份差计算】找出任二人之间的亲等及辈份差。l 决策树(质性因果推论)n .tw/webusers/ftlin/course/空间逻辑/决策树.doc n 【作业决策树】(1)撰写上述决策树之clips程序。(2)扩充决策树,继续判断不同物种。(3) 增加

18、quit 及 回到start的功能。l 水灾防治因果关联图n 决策时经常遇到左右为难,或者长、短期效益矛盾的困境。本例模拟研订治水政策所面对的问题。从知识结构的角度来说,本例的知识结构是比决策树还复杂的循环图。n .tw/webusers/ftlin/course/空间逻辑/水灾防治因果关联图(教学范例).clp l 联立方程式(量化预测)n .tw/webusers/ftlin/course/空间逻辑/联立方程式.clp n 【作业一元二次方程式】:可以求 ax2+bx+c=0 解的专家系统n 【作业汽机车数量预

19、测模型】.tw/webusers/ftlin/course/空间逻辑/汽机车数量预测.doc l 堆栈与队列n 利用defclassn 堆栈: .tw/webusers/ftlin/course/空间逻辑/stack.clp n 【作业队列】:改写stack.clp,使之成为具有队列(排队)行为的串行l 模糊推理 (fuzzy reasoning)n 模糊集合理论,请参见 .tw/webusers/ftlin/course/caad/模糊集合及逻辑.doc n 身高判断(物理

20、量心理量):输入一身高,回报其身高的心理量:高、很高、矮、很矮、不高也不矮。u 提示1.分别建立高、矮、.等概念(心理量)的membership function。2.进一步建立很高、不算高、不高也不矮.的membership function。3.输入一身高值后,分别计算它的各种degree of membership。4 .回报degree of membership最高值所对应的概念(心理量)。u 程序:.tw/webusers/ftlin/course/空间逻辑/模糊集合(身高).clp n 【作业】 请修正上列程序,加入很高、很矮、不高也不矮三

21、个membership functions。n 【作业】承上题,输入心理量之后,估计其可能的身高。l 阶乘 (deffunction之运用)n .tw/webusers/ftlin/course/空间逻辑/阶乘.clp l 树状结构n 读入一连串的数目,以左方小于等于根,右方大于根之规则,建成树状数据结构,并输出成一数据文件。n 程序1:.tw/webusers/ftlin/course/空间逻辑/tree-example1.clp n 程序2:.tw/webusers/ft

22、lin/course/空间逻辑/tree-example2.clp 三、拓朴算法 【注意:请在clips的执行环境下,将execution/options/strategy设定为breadth】1. 以clips练习拓朴学(topology) 或称图论(graph)之基本表示法。.tw/webusers/ftlin/course/空间逻辑/ex6-1 graph-basic.clp 2. 侦测循环之存在。.tw/webusers/ftlin/course/空间逻辑/ex6-2 loop.clp 3. 延伸树之演算。

23、.tw/webusers/ftlin/course/空间逻辑/ex6-3 spanning-tree.clp 4. 树状结构之广度优先搜寻法 (breadth first search).tw/webusers/ftlin/course/空间逻辑/bfs-tree.clp 【学习重点: (1) defclass 指令的用法。 详练习七! (2) 算法 (algorithm)】5. 树状结构之深度优先搜寻法 (depth first search).tw/webusers/ft

24、lin/course/空间逻辑/dfs-tree.clp【学习重点: stack, push, pop】【作业】(1) 修改上述程序,让操作者可以(1)自行增加节点及连结,如已经存在,应提醒已经存在,不必再加;(2)自行删减连结(不删节点,只删连结),若该连结本不存在,应提醒该连结本不存在,无法删去,(3)输入二个节点名称,系统告知二者之间是否存在路径?(2) 请自行建构一个具有多个循环,ex6-2 loop.clp程序能够找到多少循环?【讨论】图论之各种(程序性)算法,以规则式来撰写,有何其便利及困难之处?【作业中序】读入上一题所建之树的数据文件,依中序打印出其由小而大的顺序。提示:每一个n

25、ode要有一个编码(id),左右子点及父点均是指向其id,而不是指向数据内容本身。node的格式如:(node id value left-id right-id parent-id)【讨论divide, conquer and merge】如何将一个复杂的问题切割(divide)成小的子问题,分别解决(conquer)之后再加以合并(merge)?在上例,排序问题被切成建树及中序二个子问题,透过档案加以结合。子问题的程序可以分别独立撰写,互不影响其所设定的local variable的命名。如是,子问题如同软件零组件,可以交由不同国家/设计团队开发,运用其低廉的人力,但他们仅知其一,不知其二

26、,而由系统规划分析人员加以组装之。练习七 对象导向程序设计基本观念.tw/webusers/ftlin/course/gis/对象导向式数据库.doc .tw/webusers/ftlin/course/空间逻辑/ex7 对象导件基本技巧.clp【word 版:.tw/webusers/ftlin/course/空间逻辑/ex7 对象导件基本技巧(msword).doc】练习八 过程控制与平行处理.tw/webusers/ftlin/c

27、ourse/空间逻辑/ex8 过程控制及并行操作 - oo之现勘准备作业.clp 本练习模拟营建署审议开发案现勘筹备作业之流程【注】目前(2005)clips的oo仅能描述isa的关系,尚不能描述has或其它关系。但仍能用原来的 predicate来描述各种关系。撰写程序经常发现的问题:l (建议)步骤:n 以查询者之身分,设定问题情境。【谁问什么问题?】n 以领域专家之身分,回答问题,建构知识体系(决策树)。n 绘制事件图(决策树)n 以知识工程师之身分,撰写程序。n 找查询者及领域专家进行测试,修正程序。l 程序的正确性:只好多翻翻手册,问问有经验的人。l 逻辑流程n 问题的前后次序n 重

28、复问问题n 中文语意不清、不明确 【user interface】n 出现y/n 殊途同归。不须问该问题,因为y/n之结果一样。n 有不可能发生的路径?l 问题的本质:判断/决策树n 诊断:汽车、计算机n 分类:古迹、动物 (terminals 为 classes)n 指认:古迹、动物 (terminals 为 instances)n 简单的问题结构可以用decision tree来表达。复杂的问题便会需要graph。l 知识的体系化、结构化n 让领域专家成为知识工程师(合为一人)。u 领域专家与知识工程师之间的沟通十分困难,经常造成专家系统的失败。如今,我们让领域专家成为知识工程师(合为一人

29、)。希望能突破此一困境。n chunk:片断知识n 有效的将片断知识予以系统化,尤其当新的知识进来,或删去旧知识,而仍旧保持明晰的系统(仍维持是decision tree)n 尽量避免预设的问答次序。(宜采用switchcasedefault指令)n 可以将已知的资料(库)建立于deffacts/instances,让查询者有案例可参考。 l 化简(精致化)n 逻辑已经是正确n 如何缩短决策步骤? = 去除不必要之步骤n 如何设定default 值?(尤其是多选项)l 【user interface】n 如何让专家与一般使用者正确了解用词之语意?n 如何很快的了解到(感知到)使用者与专家之间的

30、知识差距?n 应请查询者做专家系统测试,以了解使用者之查询需求。n 应使用查询者可以理解或者回答之语句。n 如使用术语,应能让查询者进一步查询该术语之意义。n 应确认程序设计者与查询者的语意是否相同?(是否对问答之用词有相同之理解)。实例讨论【王文君:法律专家系统】n 可以纳入全部法条,变成一部电子书。n 可以加入案例(判例)及说明、参考。利用案例式推理的方法,撷取条件最近似之案件,提供查询者参考。【分类问题】l 鸟类辨识、计算机问题诊断、古迹分级、均是分类问题。l 分类有其目的。目的不同,分类的准则(属性)不同,其结果也不同。l 分类的述词: n 需要二种述词u is (x, a, v):

31、x的a属性值为vu class (x, y): x 的类别为yn x 为待分类之对象集合n a = a1, a2, a3, 【可以有不同的属性,如体积、重量、价格】n v = va1, va2, va3, 【不同属性,分别对应不同的值域】n y = y1, y2, y3, n 例: n x 为所有中国建筑之集合n a = 屋群型式,屋顶型式,楼层数,建材n v屋群型式= 独栋式,四合院,三合院,连栋式街屋n v屋顶型式= 歇山式、硬山式、悬山式、燕尾、平屋顶 n v 楼层数 = 自然数系n v建材 = power set of 木,石,砖,竹,水泥,钢骨 【容许多种建材混用】n y = 官式建

32、筑,民居,窑洞,吊脚楼,庙,家祠,规则n 某类建筑型式构成要素之规则u is(x, 屋群型式, 四合院) is(x, 歇山式) class(x, 官式建筑)n 类型及次类型之间的关系规则u class(x, 窑洞) class(x, 民居)l 以首阶逻辑描述之分类体系,即便是树状的,其层级顺序并非固定的。亦即,不一定要先就a1分类,再依a2, a3,依序分类。l 首阶逻辑描述之分类体系容许网络结构,让一个子类同时(可能)属于不同的父类。例如:歇山式的四合院建筑可能是官式建筑、宫殿,也可能是国家剧场(如中正纪念馆之国家剧院、音乐厅)l 上述首阶逻辑之分类体系,其基本事实之描述是表格式的。专家有何

33、特殊不同之处?和用网页来表达有何不同?l 语言的表述能力(expression power)。n 各种(计算机)语言的表述能力是否一样?n 某些概念或者问题,用某种语言比较容易表述。l 可以用网页来表达树状、网络的知识结构。l 祖先问题是一个树状结构问题。l 可否用网页来表述祖先问题?n 不能用网页,一次全部推论出所有的祖先或子孙。u 要加上以下之能力才行l 推论n 仍然要建立庞大的数据库。n 是否容许网页具有搜寻、网页编辑器(维基百科)的功能?n 功能程序一定要用es来写吗?l google可以不经首页,直接找到某页。l 网页:必须一页一页去找。l 也必须沿者决策树一层一层往下走。l 对使用

34、者而言,无差别。l strategy(过程控制策略):这是专家系统的特色之一。procedure/non-procedure languagesl 传统的程序语言(例如:fortran, c, vb)大多是程序性语言(procedural languages),程序指令的顺利相当重要。次序不同就会得到不同的结果。l 许多人工智能(ai)语言,是非程序语言。专家系统clips即是。数学的联立方程式也是。理论上(理想上),指令、规则的顺序无关紧要。l 程序性语言的重点是how to do, 要把演算程序步骤详细的写出来。l 非程序性语言的重点是 what to do, 只要把问题要素的关系、规则讲

35、清楚即可,不必考虑解决的步骤为何。(事实上,领域专家也经常说话顚三倒四,并不按一定的次序想起规则)l 联立方程式是一种non-procedure languagel 方程式的顺序不重要l 存在二种(以上)的解题程序。l 解题程序之控制,在程序执行时,才由使用者决定。(程序性语言必须于程序撰写时同时决定各模块之执行顺序)。l 概念的层级。高阶概念(专业术语)是从低阶概念建构上来的;例如,容积率是由土地面积、建筑面积、除法等基本概念所构成。使用高阶概念,会十分便利、迅捷。但是,必要时仍然可以用低阶概念来重述高阶概念。程序语言亦复如此。clip是一种相当高阶的语言,具有许多浮现出来的能力(例如过程控

36、制),但它仍然是可以用程序语言来表达(但就会十分繁琐费事)。l 这是一个专业化、模块(具)化的分工过程。信息系统因为如此分工,才使系统的发展变得相当有弹性、可以多样化的组合(重构),结果,成长相当快速。必须注意的是,分工只是一个面向;另一个面向是整合。信息系统因为有清楚定义的分工和整合界面,才能够多而不乱、快速累积知识,产生知识的综效力量。(知识分工反而造成零碎、片断化,这是各知识领域之间未能有效整合之故)。l 从知识论来说,我们企图建构一种知识整合平台,让不同的知识能够源源不断的新陈代谢,而不失其系统性、结构性。(如何整合不同专家的知识?)l 使用某一种语言,得到了某一种便利,但也必然会受到它所带来的限制。自然语言正如矿泉水,有许多杂质,也充满了养分;计算机程序语言就像蒸馏水,十分纯净,可以医疗使用,避免细菌感染,但是毫无养分。所以,就单一事件而言,有所取舍。但是,交替使用,则可兼得其利。正如,太阳之下,必有阴影,有白

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论