专家系统 - CLIPS学习(2)depth strategy 各种指令 变量与通配符
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 各种指令 变量与通配符相关推荐
- 设计模式学习笔记——策略(Strategy)模式
设计模式学习笔记--策略(Strategy)模式 @(设计模式)[设计模式, 策略模式, Stategy] 设计模式学习笔记策略Strategy模式 基本介绍 策略案例 类图 实现代码 Hand类 S ...
- iOS App Clips学习笔记
一.什么是App Clip? App Clip是一个App的轻量版,用来提供一些用户所需功能,我们可以把它看成苹果的小程序.它不需要下载就直接能打开.这样即可达到不下载完整版APP便可体验APP的部分 ...
- 学习Python语言 基础语法:变量的基本使用
Python变量 程序是用来处理数据的,变量就是用来保存数据的,通过给数据定义一个名称来保证方便记忆和识别.使用这个数据.变量可以保存所有类型的数据. Python变量的定义 在Python中,变量的 ...
- 学习日报 day03 实体与标识符 变量与数据类型
学习日报 day03 实体与标识符 变量与数据类型 https://cloud.189.cn/t/ryIZF3Rfqy2q 常见问题 导入外部java文件 如何把java源文件放入到myeclipse ...
- JavaScript学习(八十四)—变量
JavaScript学习(八十四)-变量 一.什么是变量? 白话: 变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器. 我们通过 变量名 获取数据,甚至数据可以修改. 二.变量在内存中的存储 ...
- Mysql学习总结十二:系统变量、用户变量、定义条件和处理程序
Mysql学习总结十二:系统变量.用户变量.定义条件和处理程序 1.变量 1.1 系统变量 1.1.1 系统变量的分类 1.1.2 查看系统变量 1.2 用户变量 1.2.1 用户变量的分类 1.2. ...
- LabView学习笔记(七):变量与移位寄存器
Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...
- 从入门到精通之专家系统CLIPS(一)CLIPS初识与概述
这几年,人工智能技术在国内越来越火,大部分都是神经网络算法一类的,其实人工智能技术还有一个重要分支---专家系统. 专家系统是一个智能计算机程序系统,其内部含有大量的某个领域专家水平的知识与经验,能够 ...
- Linux学习(六)---实用指令(只看这篇就能完成基础的学习)
文章目录 一.指定运行级别 二.切换到运行级别的指令 2.1 基本语法 2.2 应用实例 2.3 常问的面试题 三.帮助指令 3.1 基本介绍 3.2 man获得帮助信息 3.3 help 指令 3. ...
最新文章
- 根据鼠标点击位置获取DataGridView的选择行号。
- java数字转大写 其他报异常_【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常...
- 为什么1900年不是闰年
- linux curl命令验证服务器断点续传支持
- Docker精华问答 | 数据库为什么不适合放在 Docker 中运行?
- 编号001!华为超级旗舰入网:获中国首张5G手机“身份证”
- Continuous Laplacian, Functional Map, Spectral CNN
- bat脚本保存dir结果_MySQL备份脚本,应该这么写
- GitHub 一周热点速览:手撕 LeetCode 一日 Star 破两千
- Robot Framework怎么导入selenium2library类库
- 古剑奇谭3steam服务器稳定吗,国产游戏《古剑奇谭3》占据steam热销榜第一?这么好玩吗?...
- (最详细)Cloudera Manager安装部署
- Portraiture4.0最新免费磨皮美白滤镜修图插件
- 智能驾驶是什么意思_智能驾驶L1L2L3L4到底是什么意思,再不知道就OUT啦
- 微信小程序时间加法_微信小程序获取系统时间、时间戳、时间时间戳加减
- 通过Exchange Online(Office365)地址簿策略实现用户地址簿隔离
- Dirmap:一款高级Web目录文件扫描工具
- java 时间轮算法_时间轮算法解析(Netty HashedWheelTimer源码解读)
- 如何在OC类里 调用swift类
- Abaqus接触分析-- Tips
热门文章
- 20200812 java 笔记
- 条码标签打印机打印头金线包封封装用胶方案
- get和post请求区别,options预请求
- 微信小程序(env: Windows,mp,1.05.2108130; lib: 2.19.4)报错
- 使用Nginx在云服务器上搭建图床
- SSL、WSS和HTTPS之间的关系
- [Transformer]Segtran:Medical Image Segmentation Using Squeeze-and-Expansion Transformers
- 【HIT-OSLAB-实验中的碎碎念】
- 大象高端营销:家装电话营销细节和技巧
- iOS中“事件”的前因后果