前向链接 LIFO

问题描述 投票:0回答:1

对于前向链接(LIFO),有人提到

深度策略:新激活的规则放置在所有规则之上 相同的显着性:例如,如果事实 a 激活规则 1 和规则 2 并且事实 b 激活规则 3 和规则 4,然后如果事实 a 被断言 在事实b之前,规则3和规则4将高于规则1和规则2 议程。然而,规则 3 相对于规则 4 的位置将是 任意

所以如果我有以下事实和规则

(deffacts my_facts
(B)
(C))

(defrule r1
(B)(D)(E)=> (assert (F)))

(defrule r2
(C)(D) => (assert (A)))

(defrule r3
(C)(F)=>(assert (A)))

(defrule r4
(B) => (assert (X)))

(defrule r5
(D) => (assert (D)))

(defrule r6
(X)(A) => (assert(H))
(printout t 'H' is reached crlf)
(halt))

(defrule r7
(C)
=> (assert (D)))

(defrule r8
(X)
(C)
=> (assert (A)))

(defrule r9
(X)
(B)
=> (assert (D)))

然后

(reset)
(watch all)
(run)

这个想法是,似乎 r2 总是在 r5 之前被触发,但我认为:

规则 2 相对于规则 5 的位置是任意的,那么为什么我们每次都会在 R5 之前触发 R2 呢?

这是代表案例的图像:

clips expert-system
1个回答
0
投票

它是任意的,如“基于或由个人偏好或便利决定”,而不是“存在或看似随机出现”。在《基础编程指南》第 5.3 节“冲突解决策略”开头,提到所使用的任意并不意味着随机。

如果一条规则(以及其他几条规则)被相同的激活 断言或撤回事实,步骤 a 和 b 无法 指定一个顺序,则该规则是任意的(不是随机的) 相对于激活它的其他规则进行排序。 请注意,在这方面,定义规则的顺序有一个 对冲突解决的任意影响(高度依赖于 根据当前规则的基本实施)。不依赖 根据这个任意命令来正确执行您的规则。

© www.soinside.com 2019 - 2024. All rights reserved.