Part Three: Depth Strategy

首先,声明几个关键词:agenda, salience, conflict resolution,在规则的定义中,RHS(=>右侧的活动列)中可能有多个活动等待执行,可通过(agenda)命令查看活动议程,程序必须保证一次只执行一项活动,且最重要的先行,因此需要解决冲突(conflict resolution)。agenda将RHS的活动列表按照salience(优先级)从高到低排列,这体现了CLIPS的depth strategy(CLIPS的默认冲突解决模式)。

Part Four: 各种指令

(1)deffacts可批量定义fact;

(2)reset和clear的区别

相同点——清除fact-list中所有的fact以及defrule,同时清除agenda中所有已激活的rule;

不同点——reset会保留rule定义,且能从现有的deffacts中加载fact;

(3)undeffact/undefrule撤销相应定义

(4)(watch statistics)打印有关触发的规则数量、运行时、每秒规则、事实的平均数量、最大事实数量、激活的平均数量和最大激活数量的信息。统计信息可能有助于调整专家系统以优化其速度。

(5)dribble-on命令将在命令提示符中输入的所有输入和输出存储到磁盘文件中,直到输入dribble-off命令。

(6)断点由set-break命令设置。remove-break命令将删除已设置的断点。show-break将列出已设置断点的所有规则。

(7)matches可查看fact和LHS的匹配情况,特别是LHS中有多项时:

CLIPS> (watch facts)
CLIPS> (assert (work done))
==> f-1 (work done)
<Fact-1>
CLIPS> (matches take-a-vacation)
Matches for Pattern 1
f-1
Matches for Pattern 2None
Matches for Pattern 3None
; CE is conditional element
Partial matches for CEs 1 - 2None
Partial matches for CEs 1 - 3None
ActivationsNone
; The return value indicates the total patterns
; matched, the total partial matches, and the
; total activations
(1 0 0)
CLIPS>

只有满足LHS中所有的条件(或称patterns),才能激活rule

(8)其他函数及用法,直接放原文表意更直观

  • assert-string: Performs a string assertion by taking a string as argument and asserted as a non-string fact.
  • str-cat: Constructs a single-quoted string from individual items by string concatenation.
  • str-index: Returns a string index of the fifirst occurrence of a substring.
  • sub-string: Returns a substring from a string.
  • str-compare: Performs a string compare.
  • str-length: Returns the string length which is the length of a string.
  • sym-cat: Returns a concatenated symbol.

Part Five: 变量与通配符

CLIPS中的变量以?开头,如“ ?duck ”,在其被使用之前,必须被赋值,当LHS中有多个变量时,声明时必须按照逻辑顺序声明所有变量,否则rule将不被触发,以下为例:

CLIPS> (clear)
CLIPS>
(defrule whodunit(duckshoot ?hunter ?who)
=>(printout t ?hunter " shot "?who crlf))
CLIPS> (assert (duckshoot Brian duck))
<Fact-1>
; Duck dinner tonight!
CLIPS> (run)
Brian shot duck
CLIPS> (assert (duckshoot duck Brian))
<Fact-2>
; Brian dinner tonight!
CLIPS> (run)
duck shot Brian
; Missing third field
CLIPS> (assert (duckshoot duck))
<Fact-3>
; Rule doesn't fire,
; no output
CLIPS> (run)
CLIPS>

fact-address:当需要清除LHS中已经声明的条件fact,而不想改变defrule时,使用"<-"将fact的地址赋值给某一变量,然后retract这个变量

CLIPS> (clear)
CLIPS> (assert (bachelor Dopey))
<Fact-1>
CLIPS> (facts)
f-1 (bachelor Dopey)
For a total of 1 fact.
CLIPS>
(defrule get-married?duck <- (bachelor Dopey)                       ;将该fact的地址赋值给变量?duck
=>(printout t "Dopey is now happily married "?duck crlf)(retract ?duck))
CLIPS> (run)
Dopey is now happily married <Fact-1>            ;<Fact-1>就是已撤销的fact的地址
CLIPS> (facts)CLIPS> (clear)
CLIPS>
(defrule marriage?duck <- (bachelor ?name)
=>(printout t ?name " is now happily married"crlf)(retract ?duck))
CLIPS>
(deffacts good-prospects                          ;批量定义新的facts         (bachelor Dopey)(bachelor Dorky)(bachelor Dicky))
CLIPS> (reset)                                    ;将deffacts中的facts加载到rule中
CLIPS> (run)
Dicky is now happily married                      ;rule同样运行成功,三条fact对应三个
Dorky is now happily married                      ;不同结果的activations
Dopey is now happily married
CLIPS>

通配符Wildcard——用于pattern match

  • ?:单个字符
  • $?:0或多个字符,多字段通配符Muti-field wildcard
  • $?name:以变量作为通配符中的字段  多字段变量Muti-field variable
CLIPS>
(defrule dating-ducks(bachelor Dopey $?name)                        ;first name是Dopey的人,后面可有second or
=>                                              ;more(printout t "Date Dopey " ?name crlf))
CLIPS> (reset)                                  ;从之前定义的deffacts中加载facts及多个名字
CLIPS> (run)
Date Dopey (Dinky Mallard)                      ;打印符合条件的人名,返回多字段通配符用()包裹
Date Dopey (Mallard)
Date Dopey ()
CLIPS>

专家系统 - CLIPS学习(2)depth strategy 各种指令 变量与通配符相关推荐

  1. 设计模式学习笔记——策略(Strategy)模式

    设计模式学习笔记--策略(Strategy)模式 @(设计模式)[设计模式, 策略模式, Stategy] 设计模式学习笔记策略Strategy模式 基本介绍 策略案例 类图 实现代码 Hand类 S ...

  2. iOS App Clips学习笔记

    一.什么是App Clip? App Clip是一个App的轻量版,用来提供一些用户所需功能,我们可以把它看成苹果的小程序.它不需要下载就直接能打开.这样即可达到不下载完整版APP便可体验APP的部分 ...

  3. 学习Python语言 基础语法:变量的基本使用

    Python变量 程序是用来处理数据的,变量就是用来保存数据的,通过给数据定义一个名称来保证方便记忆和识别.使用这个数据.变量可以保存所有类型的数据. Python变量的定义 在Python中,变量的 ...

  4. 学习日报 day03 实体与标识符 变量与数据类型

    学习日报 day03 实体与标识符 变量与数据类型 https://cloud.189.cn/t/ryIZF3Rfqy2q 常见问题 导入外部java文件 如何把java源文件放入到myeclipse ...

  5. JavaScript学习(八十四)—变量

    JavaScript学习(八十四)-变量 一.什么是变量? 白话: 变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器. 我们通过 变量名 获取数据,甚至数据可以修改. 二.变量在内存中的存储 ...

  6. Mysql学习总结十二:系统变量、用户变量、定义条件和处理程序

    Mysql学习总结十二:系统变量.用户变量.定义条件和处理程序 1.变量 1.1 系统变量 1.1.1 系统变量的分类 1.1.2 查看系统变量 1.2 用户变量 1.2.1 用户变量的分类 1.2. ...

  7. LabView学习笔记(七):变量与移位寄存器

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  8. 从入门到精通之专家系统CLIPS(一)CLIPS初识与概述

    这几年,人工智能技术在国内越来越火,大部分都是神经网络算法一类的,其实人工智能技术还有一个重要分支---专家系统. 专家系统是一个智能计算机程序系统,其内部含有大量的某个领域专家水平的知识与经验,能够 ...

  9. Linux学习(六)---实用指令(只看这篇就能完成基础的学习)

    文章目录 一.指定运行级别 二.切换到运行级别的指令 2.1 基本语法 2.2 应用实例 2.3 常问的面试题 三.帮助指令 3.1 基本介绍 3.2 man获得帮助信息 3.3 help 指令 3. ...

最新文章

  1. 根据鼠标点击位置获取DataGridView的选择行号。
  2. java数字转大写 其他报异常_【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常...
  3. 为什么1900年不是闰年
  4. linux curl命令验证服务器断点续传支持
  5. Docker精华问答 | 数据库为什么不适合放在 Docker 中运行?
  6. 编号001!华为超级旗舰入网:获中国首张5G手机“身份证”
  7. Continuous Laplacian, Functional Map, Spectral CNN
  8. bat脚本保存dir结果_MySQL备份脚本,应该这么写
  9. GitHub 一周热点速览:手撕 LeetCode 一日 Star 破两千
  10. Robot Framework怎么导入selenium2library类库
  11. 古剑奇谭3steam服务器稳定吗,国产游戏《古剑奇谭3》占据steam热销榜第一?这么好玩吗?...
  12. (最详细)Cloudera Manager安装部署
  13. Portraiture4.0最新免费磨皮美白滤镜修图插件
  14. 智能驾驶是什么意思_智能驾驶L1L2L3L4到底是什么意思,再不知道就OUT啦
  15. 微信小程序时间加法_微信小程序获取系统时间、时间戳、时间时间戳加减
  16. 通过Exchange Online(Office365)地址簿策略实现用户地址簿隔离
  17. Dirmap:一款高级Web目录文件扫描工具
  18. java 时间轮算法_时间轮算法解析(Netty HashedWheelTimer源码解读)
  19. 如何在OC类里 调用swift类
  20. Abaqus接触分析-- Tips

热门文章

  1. 20200812 java 笔记
  2. 条码标签打印机打印头金线包封封装用胶方案
  3. get和post请求区别,options预请求
  4. 微信小程序(env: Windows,mp,1.05.2108130; lib: 2.19.4)报错
  5. 使用Nginx在云服务器上搭建图床
  6. SSL、WSS和HTTPS之间的关系
  7. [Transformer]Segtran:Medical Image Segmentation Using Squeeze-and-Expansion Transformers
  8. 【HIT-OSLAB-实验中的碎碎念】
  9. 大象高端营销:家装电话营销细节和技巧
  10. iOS中“事件”的前因后果