【问题标题】:CLIPS LHS binding variablesCLIPS LHS 绑定变量
【发布时间】:2018-12-21 17:39:32
【问题描述】:

我正在尝试编写一个使用迭代深化算法来解决规划问题的 CLIPS 程序。出于同样的原因,我想保持较低的分支因子。

在下面的代码中?s是代表树层级的变量;我想使用一个规则来进行不同的检查。这是我试图做的:

(defrule EXPAND::action
(declare (salience ?*load*))
(or
    (and ?f1_a <- (status ?s transport ?c1&:(> ?c1 0) ?id1)
         ?f1_b <- (status ?s city      ?q1&:(> ?q1 0) ))

    (and ?f2_a <- (status ?s transport ?c2 ?id2)
         ?f2_b <- (status ?s city      ?q2_a  ?obj2)
         ?f2_c <- (status ?s carries   ?id2 ?q2_b ?obj2))

    (and ?f3_a <- (status ?s transport    ?c3 ?id3)
         ?f3_b <- (status ?s city         ?l3_a $?x3)
         ?f3_c <- (status ?s city         ?l3_b $?y3)
         ?f3_d <- (distance  ?l3_a ?d3    ?l3_b ?t3))
         (test (neq (str-compare ?l3_a ?l3_b) 0))
)

=>

(if  (and (fact-existp ?f1_a) (fact-existp ?f1_b))
then (assert bla1))

(if (and ?f2_a ?f2_b ?f2_c)
then (assert bla2))

(if (and ?f3_a ?f3_b ?f3_c ?f3_d)
then (assert bla3)
))

显然它不起作用。我想使用 LHS 中单个 and 的布尔值将一些事实断言到规则的 RHS 中。

我该怎么做?有什么想法吗?

【问题讨论】:

    标签: clips planning iterative-deepening


    【解决方案1】:

    or 条件元素的工作原理是为规则条件中的每个排列创建单独的规则。每个排列都使用原始规则的动作,因此在规则动作中找到的每个变量都必须存在于每个排列中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 2011-08-08
      • 1970-01-01
      • 2015-07-26
      • 2013-05-18
      相关资源
      最近更新 更多