如何在CLIPS中进行事实的组合和排列

马可·卡尔德拉

在我的程序中,我有以下情况:

模板:

(deftemplate MAIN::travel-banchmark
    (slot name)
    (slot value)
)

事实:

(travel-banchmark (name location) (value torino))
(travel-banchmark (name location) (value roma))
(travel-banchmark (name location) (value milano))
(travel-banchmark (name location) (value venezia))

我必须创建(使用规则)所有可能的子集,例如,k=3(nb,k是一个变量)位置(k 组合),并且对于每个子集,我必须排列其中的元素(以及assert每个排列)。

示例组合:

torino roma milano
torino roma venezia
roma milano venezia
venezia milano torino

示例排列:

torino roma milano -> roma torino milano -> torino milano roma ...

我想知道是否可以在规则的 LHS 中做一些事情以避免在 RHS 中写入所有逻辑?

我可以使用任何有用的语法建议吗?

加里·莱利

这是使用规则的一种方法:

         CLIPS (6.31 6/12/19)
CLIPS> 
(deftemplate travel-banchmark
   (slot name)
   (slot value))
CLIPS>    
(deftemplate permutation
   (multislot values))
CLIPS>    
(deffacts initial
   (k-combination 3)
   (travel-banchmark (name location) (value torino))
   (travel-banchmark (name location) (value roma))
   (travel-banchmark (name location) (value milano))
   (travel-banchmark (name location) (value venezia)))
CLIPS>    
(defrule first-in-permutation
   (k-combination ~0)
   (travel-banchmark (name location) (value ?city))
   =>
   (assert (permutation (values ?city))))
CLIPS>    
(defrule next-in-permutation
   (k-combination ?k)
   ?p <- (permutation (values $?cities))
   (test (< (length$ ?cities) ?k))
   (travel-banchmark (name location) (value ?city))
   (test (not (member$ ?city ?cities)))
   =>
   (assert (permutation (values ?cities ?city))))
CLIPS>    
(defrule cleanup
   (declare (salience -5))
   (k-combination ?k)
   ?p <- (permutation (values $?cities))
   (test (< (length$ ?cities) ?k))
   =>
   (retract ?p))   
CLIPS> (reset)
CLIPS> (run)
CLIPS> (facts)
f-0     (initial-fact)
f-1     (k-combination 3)
f-2     (travel-banchmark (name location) (value torino))
f-3     (travel-banchmark (name location) (value roma))
f-4     (travel-banchmark (name location) (value milano))
f-5     (travel-banchmark (name location) (value venezia))
f-8     (permutation (values venezia milano roma))
f-9     (permutation (values venezia milano torino))
f-11    (permutation (values venezia roma milano))
f-12    (permutation (values venezia roma torino))
f-14    (permutation (values venezia torino milano))
f-15    (permutation (values venezia torino roma))
f-18    (permutation (values milano venezia roma))
f-19    (permutation (values milano venezia torino))
f-21    (permutation (values milano roma venezia))
f-22    (permutation (values milano roma torino))
f-24    (permutation (values milano torino venezia))
f-25    (permutation (values milano torino roma))
f-28    (permutation (values roma venezia milano))
f-29    (permutation (values roma venezia torino))
f-31    (permutation (values roma milano venezia))
f-32    (permutation (values roma milano torino))
f-34    (permutation (values roma torino venezia))
f-35    (permutation (values roma torino milano))
f-38    (permutation (values torino venezia milano))
f-39    (permutation (values torino venezia roma))
f-41    (permutation (values torino milano venezia))
f-42    (permutation (values torino milano roma))
f-44    (permutation (values torino roma venezia))
f-45    (permutation (values torino roma milano))
For a total of 30 facts.
CLIPS> 

为了进行比较,使用函数生成排列:

CLIPS> (clear)
CLIPS> 
(deftemplate travel-banchmark
   (slot name)
   (slot value))
CLIPS>    
(deftemplate permutation
   (multislot values))
CLIPS>    
(deffacts initial
   (k-combination 3)
   (travel-banchmark (name location) (value torino))
   (travel-banchmark (name location) (value roma))
   (travel-banchmark (name location) (value milano))
   (travel-banchmark (name location) (value venezia)))
CLIPS> 
(deffunction gen-permutation (?k ?cities $?result)
   (if (= ?k 0)
      then
      (assert (permutation (values ?result)))
      (return))
   (foreach ?c ?cities
      (gen-permutation (- ?k 1) (delete-member$ ?cities ?c) ?result ?c)))
CLIPS>       
(defrule generate
   (k-combination ?k)
   =>
   (bind ?cities (create$))
   (do-for-all-facts ((?tb travel-banchmark)) (eq ?tb:name location)
      (bind ?cities (create$ ?cities ?tb:value)))
   (gen-permutation ?k ?cities))
CLIPS> (reset)
CLIPS> (run)
CLIPS> (facts)
f-0     (initial-fact)
f-1     (k-combination 3)
f-2     (travel-banchmark (name location) (value torino))
f-3     (travel-banchmark (name location) (value roma))
f-4     (travel-banchmark (name location) (value milano))
f-5     (travel-banchmark (name location) (value venezia))
f-6     (permutation (values torino roma milano))
f-7     (permutation (values torino roma venezia))
f-8     (permutation (values torino milano roma))
f-9     (permutation (values torino milano venezia))
f-10    (permutation (values torino venezia roma))
f-11    (permutation (values torino venezia milano))
f-12    (permutation (values roma torino milano))
f-13    (permutation (values roma torino venezia))
f-14    (permutation (values roma milano torino))
f-15    (permutation (values roma milano venezia))
f-16    (permutation (values roma venezia torino))
f-17    (permutation (values roma venezia milano))
f-18    (permutation (values milano torino roma))
f-19    (permutation (values milano torino venezia))
f-20    (permutation (values milano roma torino))
f-21    (permutation (values milano roma venezia))
f-22    (permutation (values milano venezia torino))
f-23    (permutation (values milano venezia roma))
f-24    (permutation (values venezia torino roma))
f-25    (permutation (values venezia torino milano))
f-26    (permutation (values venezia roma torino))
f-27    (permutation (values venezia roma milano))
f-28    (permutation (values venezia milano torino))
f-29    (permutation (values venezia milano roma))
For a total of 30 facts.
CLIPS>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Angular 中进行事件冒泡?

来自分类Dev

如何在Javascript中进行排列?

来自分类Dev

如何在Sympy中进行功能组合?

来自分类Dev

如何在python中进行especific组合?

来自分类Dev

如何在组合组件的反应中进行条件渲染

来自分类Dev

如何在导入时进行事务回滚和提交

来自分类Dev

多设备混合应用程序:如何在发行和发行构建过程中进行组合,最小化和混淆?

来自分类Dev

如何在textview / webview中进行左对齐和对齐

来自分类Dev

如何在Python套接字中进行发送和接收?

来自分类Dev

如何在序言中进行算术和或运算?

来自分类Dev

如何在Zend Framework中进行绑定和喜欢

来自分类Dev

如何在dplyr r中进行条件分组和汇总

来自分类Dev

如何在pygame中进行平滑移动和旋转?

来自分类Dev

如何在React和Node中进行测试?

来自分类Dev

如何在ack和grep中进行最大深度搜索?

来自分类Dev

如何在Python套接字中进行发送和接收?

来自分类Dev

如何在Sparql中进行计数和选择变量

来自分类Dev

如何在uiview中进行西装搭配和排名?

来自分类Dev

如何在Python中进行PCA和SVM分类

来自分类Dev

如何在Broadleaf REST中进行过滤和排序?

来自分类Dev

JOOQ如何在UNION和WHERE中进行操作

来自分类Dev

如何在大熊猫中进行分组和变形

来自分类Dev

如何在CLIPS中优化不同模板事实之间的模式匹配

来自分类Dev

使用CLIPS时,如何在不重置事实的情况下运行剪辑

来自分类Dev

如何在CLIPS解除功能中断言一个事实?

来自分类Dev

如何在Firebase上进行事件驱动

来自分类Dev

如何在NetLogo行为空间中进行场景的受限组合?

来自分类Dev

如何在python中进行许多功能的所有组合?

来自分类Dev

如何用N在bash中进行排列!输入?

Related 相关文章

  1. 1

    如何在 Angular 中进行事件冒泡?

  2. 2

    如何在Javascript中进行排列?

  3. 3

    如何在Sympy中进行功能组合?

  4. 4

    如何在python中进行especific组合?

  5. 5

    如何在组合组件的反应中进行条件渲染

  6. 6

    如何在导入时进行事务回滚和提交

  7. 7

    多设备混合应用程序:如何在发行和发行构建过程中进行组合,最小化和混淆?

  8. 8

    如何在textview / webview中进行左对齐和对齐

  9. 9

    如何在Python套接字中进行发送和接收?

  10. 10

    如何在序言中进行算术和或运算?

  11. 11

    如何在Zend Framework中进行绑定和喜欢

  12. 12

    如何在dplyr r中进行条件分组和汇总

  13. 13

    如何在pygame中进行平滑移动和旋转?

  14. 14

    如何在React和Node中进行测试?

  15. 15

    如何在ack和grep中进行最大深度搜索?

  16. 16

    如何在Python套接字中进行发送和接收?

  17. 17

    如何在Sparql中进行计数和选择变量

  18. 18

    如何在uiview中进行西装搭配和排名?

  19. 19

    如何在Python中进行PCA和SVM分类

  20. 20

    如何在Broadleaf REST中进行过滤和排序?

  21. 21

    JOOQ如何在UNION和WHERE中进行操作

  22. 22

    如何在大熊猫中进行分组和变形

  23. 23

    如何在CLIPS中优化不同模板事实之间的模式匹配

  24. 24

    使用CLIPS时,如何在不重置事实的情况下运行剪辑

  25. 25

    如何在CLIPS解除功能中断言一个事实?

  26. 26

    如何在Firebase上进行事件驱动

  27. 27

    如何在NetLogo行为空间中进行场景的受限组合?

  28. 28

    如何在python中进行许多功能的所有组合?

  29. 29

    如何用N在bash中进行排列!输入?

热门标签

归档