You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正向链LIFO策略下r2始终先于r5触发的原因问询

CLIPS中r2始终先于r5触发的原因解析

背景说明

Forward chaining(LIFO)深度策略的核心规则:

  • 新激活的规则会被置于所有相同salience值的规则之上
  • 由同一事实激活的规则,理论上相互位置随机

给定的CLIPS事实与规则

(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触发,但按策略二者位置应随机,请问该现象的原因是什么?

原因分析

CLIPS的官方实现中,对于同salience值的规则,当它们由同一事实(或同一组事实变化)激活时,议程中的排序并非真正随机,而是默认遵循规则的定义顺序。你提到的“由同一事实激活的规则相互位置随机”属于理论层面的策略描述,但CLIPS实际并未实现随机化逻辑,而是以规则编写的先后顺序作为议程排序的依据。

由于r2在代码中早于r5定义,因此每次(D)事实被断言激活这两个规则时,r2都会被排在议程中r5的前面,最终导致r2始终先于r5触发。


内容的提问来源于stack exchange,提问作者YAMI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:06:24