我们假设有一个交易系统,客户提出要买的东西,卖家提供要买的东西,如果有符合的,就成交。这是一个很简单的系统,用一般程序语言也可以实现,但是我们看看专家系统开发更简单的方法。
1第一条规则
如果来了新的客户,取得这个客户所有需要的商品,并产生新的事实。
(defrule query-buyer
?fact <- (new-buyer ?buyer) ; if there is a new a buyer...
=>
(retract ?fact)
(foreach ?i (nth$ 2 (send ?buyer "GetProducts"))
(assert (requires ?buyer ?i)) ; get the products the buyer requires
; and for each one create a fact
; associating the buyer and the product
)
)
例如,来了一个客户Danny,我们先assert(new-buyer danny) ,jess发现了这条事实后,触发query-buyer这个规则,注意所有的规则之间没有顺序性。query-buyer这条规则先撤销刚才的事实,避免死循环,然后调用一个函数取得用户所有需要的商品Send ?buyer "GetProducts".例如得到的结果是(Computer Keyboard Mouse),然后规则遍历这个结果集,每一个商品都产生一个新的事实,例如assert requires Danny Computer等等。
2 第二个规则,出现一个新卖家,原理和刚才一样
(defrule query-seller
?fact <- (new-seller ?seller) ; if there is a new seller...
=>
(retract ?fact)
(foreach ?i (nth$ 2 (send ?seller "GetProducts"))
(assert (provides ?seller ?i)) ; get the products the seller provides
; and for each one create a fact
; associating the seller and the product
)
)
3 最后一个是交易的规则
当有买家购买一个商品,卖家卖一个商品,并且两者相同的事实时候,告诉卖家有人要买该物品,同时也告诉买家有卖家投递该物品
(defrule match-buyer-and-seller
(requires ?buyer ?product1) ; the buyer requires product1
(provides ?seller ?product2) ; the seller provides product2
(test (eq ?product1 ?product2)) ; product1 and product2 are the same
=>
(send ?seller "Order" ?product2) ; order from the seller
(send ?buyer "Delivery" ?product1) ; deliver to the buyer
)
从这个规则中,我们看到,实现这样一个交易市场的系统,没有任何遍历所有买家和卖家进行比较的操作。这些匹配是JESS自动模式匹配完成的,大大简化了开发。
使用专家系统,我们可以通过定义规则的方式来积累经验,而不是通过If else这样的代码来积累经验。
分享到:
相关推荐
### JESS简介与实例教程 #### 一、JESS概述 **JESS**(Java Expert System Shell)是一款基于Java平台的规则引擎,它为开发者提供了强大的逻辑编程能力,尤其适用于构建专家系统。作为CLIPS(C Language ...
Jess7.1是一款基于Java语言的传统专家系统开发工具包,专为构建和运行知识型应用程序而设计。专家系统是一种人工智能应用,它模仿人类专家的决策过程来解决复杂问题。这个工具包提供了丰富的功能,使开发者能够高效...
Jess是其中的佼佼者,尤其在领域驱动设计和专家系统中应用广泛。 首先,我们来看"Action"标签,它可能指的是AJAX(Asynchronous JavaScript and XML)。AJAX技术允许网页在不刷新整个页面的情况下与服务器交换数据...
1727008980062_36899042-cccb-455e-a366-ade300382e2a.mp3
本项目是基于Java和Lua开发的美食社交APP,包含92个文件,其中包括80个Java源代码文件、4个XML配置文件、2个PNG图像文件、2个Lua脚本文件、1个LICENSE文件、1个Markdown文档文件和1个YAML配置文件。此外,还有1个SQL文件。该项目旨在为用户提供一个便捷、高效的美食社交平台,支持美食分享、社交互动、活动组织等功能,以提升用户体验和社区活跃度。
内容概要:本文全面介绍了模数转换器(ADC)的相关知识和技术,包括ADC的基本原理、关键技术参数、不同类型ADC的工作方式及其应用领域。并通过生动的比喻解释ADC的概念,强调其在日常生活中的实际应用,并提供了选型指南以及对未来发展方向进行了预测。 适用人群:具备一定模拟电子基础知识的研发人员及电子工程专业师生。 使用场景及目标:指导相关人员正确理解和选用ADC,并提升对最新发展的认知。适用于工业、消费电子、汽车电子、通讯和医疗器械等行业。 阅读建议:读者应重点学习ADC的关键指标及各参数间的关联性,并尝试联系具体的应用场景来加深理解。此外还推荐读者扩展学习相关设计实例和技术文章,以更好地吸收和运用知识内容。
基于微信小程序的碎片化驾考论文
R语言入门指南_r-book
小程序&模版&租赁行业&电器租赁小程序(源码+截图+源码导入教程和视频).zip
R语言相关资料_R
本项目是基于Javascript开发的程序员工具大全,包含159个文件,其中包括69个PNG图像文件、47个Markdown文档文件、20个JavaScript脚本文件、11个JPG图像文件、3个CSS样式表文件、1个gitattributes文件、1个gitignore文件、1个LICENSE文件和1个ICO图标文件。此外,还有1个SVG矢量图文件。该项目旨在为程序员提供一个便捷、高效的工具集合,包括代码片段管理、在线调试、文档查询等功能,以提升开发效率和编程体验。
主要实现功能: 1.系统的基本功能,要求能够对指纹进行录入、识别和删除,能够实现指纹识别成功开锁功能。并设有4*4按键键盘,实现指纹录入、密码修改和特殊功能。 2. 根据功能要求及性价比,选择STM32F103C8T6单片机。 3.合理选择元器件,完成功能按键键盘模块、时钟模块、指纹识别模块,LCD12864显示电路的设计。 4.设计出硬件电路原理图。搭建硬件电路,编写程序,进行系统调试。 资料包包含: 1-程序 2-原理图 3-原理图讲解视频 4-相关软件下载和教程 6-制作详解 7-焊接过程照片 8-芯片资料 9-实物操作说明 10-实物照片 11-元件清单 12-开题报告 13-任务书 14-参考论文 15-STM32视频教程 16-毕设管辩技巧 【必读】论文音重原理与规避高重复率方法,doc 常见问题解答,doc 常用小知识.doc 答辩常见问题合集,txt 打开原理图的方法,txt
【作品名称】:基于JAVA+SqlServer 实现的图书馆书库管理系统【毕业设计】(论文+源代码) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: (1)本产品是一套图书馆管理系统,是管理书库的软件。这个系统给管理员带来了极大的方便,它能实现对书库的一些增加、删除等功能,同是能很好地完成借书、还书等一些操作。 (2)本产品开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。前端程序主要是用JAVA进行开发,后台数据库主要是用SQL SERVER 2000。 (1)这是专为管理图书馆来做的软件,所以本产品的客户主要是从事图书馆管理工作的人员。本软件界面友好,操作简单容易,用户不需要很高的知识水平就能够完成操作。 (2)本产品具有良好的操作性,运作简单,功能完善,这样大大提高了工作效率,且节省成本。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。
wireshark抓包不如用cookiejar管理_cookiejar
kail虚拟机的共享文件夹安装失败,所以通过git仓库来share_share-the-file-to-the-linux
变压器变频器配电柜电路控制原理图CAD施工图纸设备控制图集尘系统电气原理图
类似wireshark抓包简单界面_myzuoye
R语言计算耐药率和数据分析_SPN
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
一个R语言的数据分析及可视化_R_Language_analysis_visualization