剪辑中不合逻辑的不匹配

时间:2015-12-12 17:51:22

标签: clips expert-system inference-engine

我在剪辑中遇到规则匹配问题,特别是我无法理解为什么此规则不活跃! 我有一个名为REASONING的模块,我用这个deftemplate定义了一个事实 (deftemplate planning (slot value (allowed-values start stop)))。 我第一次专注于这个模块,我用这个规则断言这个事实

(defrule start-reasoning
 (declare (salience 90))
 (not (planning))
 =>
 (assert (planning (value start)))
)

接下来,这个事实永远不会撤回,但只修改了它的插槽。 在我定义计划的同一模块中,我有另一条规则,它从开始到停止改变了值。

(defrule plan-done
    (declare (salience 60))
    ?<-(planning(value start)
    =>
    (modify ?p (value stop))
)

这是此模块激活的最后一条规则。之后,Clips执行pop-focus。现在,当轮到我再次关注这个模块时,我发现了 (planning (value stop))

(planning (value stop))

所以我希望写下的规则必须被激活,但它不会发生! 在模块PLAN_MANAGER中再次更改插槽值的条件,我可以在REASONING中激活其他规则,直到Clips不会专注于PLAN_MANAGER。

f-4839  (explore-memory (pos-r 2) (pos-c 5) (direction west)(action turnleft)
(param1 nil) (param2 nil) (param3 nil) (open-depth 0) (ident 0))
f-4843  (planning (value stop))
f-4845  (exec (step 0)(action turnleft)(param1 nil)(param2 nil) (param3 nil))
f-5029  (exec (step 1)(action turnright)(param1 nil)(param2 nil)(param3 nil))

奇怪的是,如果我调用匹配函数,我将获得此输出。

(defrule go-to-plan-manager
  (declare (salience 90))
  (planning (value stop))
  =>
  (focus PLAN_MANAGER)
) 

任何人都可以帮助我理解CLIPS为什么不进入议程 go-to-plan-manager ?我哪里错了?

1 个答案:

答案 0 :(得分:0)

鉴于缺乏可重复的示例来证明其他情况,最可能的解释是,在焦点最初弹出之前的某个时刻执行计划经理。重新关注模块只会更改激活撤销的议程,但不会重新激活先前已执行的规则。

我可以根据您包含的代码片段创建的最简单的示例表明,您的计划管理规则将在计划完成规则之后立即执行,除非有一些突出显示为90或更高的其他规则在执行计划经理规则之前弹出焦点。

CLIPS> (deftemplate planning (slot value (allowed-values start stop)))
CLIPS> 
(defrule start-reasoning
 (declare (salience 90))
 (not (planning))
 =>
 (assert (planning (value start))))
CLIPS> 
(defrule plan-done
    (declare (salience 60))
    ?p<-(planning(value start))
    =>
    (modify ?p (value stop)))
CLIPS> 
(defrule go-to-plan-manager
  (declare (salience 90))
  (planning (value stop))
  =>
  (printout t "go-to-plan-manager executed" crlf))
CLIPS> (reset)
CLIPS> (watch rules)
CLIPS> (run)
FIRE    1 start-reasoning: *
FIRE    2 plan-done: f-1
FIRE    3 go-to-plan-manager: f-2
go-to-plan-manager executed
CLIPS> (matches go-to-plan-manager)
Matches for Pattern 1
f-2
Activations
 None
(1 0 0)
CLIPS>