在Clips规则的RHS中统计已存在的事实

如何在Clips规则的RHS(规则右侧)中测试事实的存在性?我正在尝试设计一个规则,通过计算存在多少个目标事实来“评估”当前状态。很明显如何在LHS(规则左侧)中测试事实,但我找不到如何在RHS中进行等效操作。

我想做类似这样的事情,尽管这并非有效的Clips代码:

(defrule score-state ""    ?score <- (score (value ?value))    =>    (modify ?score (value (+ (exists (goal-1)) (exists (goal-2)) (exists (goal-3))))))

因此,如果没有任何目标状态存在,那么就会存在事实(score (value 0))。相反,如果所有目标状态都存在,那么就会存在事实(score (value 3))。

参考手册提到了函数fact-existp,但这似乎需要传递一个事实地址。我尝试像(fact-existp (goal-1))这样使用它,但是Clips给出了语法错误。


回答:

(deftemplate score   (slot value))(deftemplate goal-1)(deftemplate goal-2)(deftemplate goal-3)(deffacts start   (score (value undefined))   (goal-1)   (goal-3))(deffunction ecount (?g)   (if (any-factp ((?f ?g)) TRUE)      then (return 1)      else (return 0)))(defrule score-state ""    ?score <- (score (value undefined))    =>    (modify ?score (value (+ (ecount goal-1) (ecount goal-2) (ecount goal-3)))))

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注