【问题标题】:rule that does not run不运行的规则
【发布时间】:2016-03-23 12:22:39
【问题描述】:

对不起,我是英语,我是西班牙人。 我在 CLIPS 中进行的专家系统计算机配置存在问题。

我的规则“preciogamingoc”没有运行,我尝试了上千种方法但没有奏效。

我把代码留在这里。

我不知道如何更好地表达,对不起。

;;****TEMPLATES*****

(deftemplate pc
(slot tipo)
(slot oc)
(multislot procesador)
(multislot ram)
(multislot placabase)
(multislot discoduro)
(multislot grafica)
(multislot fuente)
(slot precio))

;;****FUNCTIONS*****

(deffunction pregunta (?pregunta $?respuestas-posibles)
   (printout t ?pregunta)
   (bind ?respuesta (read))
   (if (lexemep ?respuesta) 
    then (bind ?respuesta (lowcase ?respuesta)))
   (while (not (member ?respuesta ?respuestas-posibles)) do
      (printout t ?pregunta)
      (bind ?respuesta (read))
      (if (lexemep ?respuesta) 
          then (bind ?respuesta (lowcase ?respuesta))))
   ?respuesta)

(deffunction sino (?pregunta)
   (bind ?respuesta (pregunta ?pregunta si no s n))
   (if (or (eq ?respuesta si) (eq ?respuesta s))
       then TRUE 
       else FALSE))

(deffunction tipo (?pregunta)
   (bind ?respuesta (pregunta ?pregunta g d o))
   (switch ?respuesta
        (case g then (return g))
        (case d then (return d))
        (case o then (return o))
        ))


;;******FACTS*******

(deffacts inicia
    (pc))


;;******RULES*******


(defrule tipopc
?A <- (pc (procesador)(ram)(placabase)(discoduro)(grafica)(fuente))
=>
(switch (tipo "Tipo (juegos:g/diseño:d/otros:o)? ")
    (case g then ( modify ?A (tipo g)(oc nose)(procesador "i5 4690_Intel")
    (ram "2x4GB 2133 cl9")
    (placabase "Gigabyte_H97M-HD3 ejemplo")
    (discoduro "1Tb")
    (grafica "GTX 960")
    (fuente "700W+ silver")
    (precio 550)))
    (case d then ( modify ?A (tipo d)(oc nose)(procesador "i7 4790_Intel")
    (ram "2x8GB 2133 cl9")
    (placabase "Gigabyte_H97M-HD3 ejemplo")
    (discoduro "1Tb HDD + 120gb SSD")
    (grafica "kuadro k620")
    (fuente "700W+ silver")
    (precio 700)))
    (case o then ( modify ?A (tipo o)(oc nose)(procesador "i3 6100_Intel")
    (ram "2x4GB 2400 cl12 DDR4")
    (placabase "Msi H110M PRO-VH")
    (discoduro "1Tb")
    (grafica "no incluida")
    (fuente "450W+ bronze")
    (precio 300)))))

(defrule oc
    ?A <- (pc(tipo g)(oc nose))
    =>
    (if (sino "Hará overclock al procesador (si/no)?: ")
    then ( modify ?A (oc si)))
)

(defrule preciogamingoc
?A <- (pc (tipo g) (oc si) (procesador) (ram) (placabase) (discoduro) (grafica) (fuente))
=>
    (printout t "Veo que su sistema será destinado a juegos y que además se le podrá hacer overclock." crlf
    "Ahora debe introducir el presupuesto medio para que podamos darle una configuración mas concreta." crlf
    "Introduzca su presupuesto de referencia(>= 750): ")
    (bind ?precio (read))
    (if (and(>= ?precio 750)(< ?precio 850))
    ;;then ((printout t "bien"crlf))
    then (modify ?A (procesador "i5 4690K_Intel")
    (ram "2x8GB 2133 cl9")
    (placabase "Gigabyte_Z97X gaming 3 ejemplo")
    (discoduro "1Tb")
    (grafica "GTX 970")
    (fuente "700W+ silver")
    (precio 750)))
    ;;(else (if (>= ?precio 850)
    ;;then (modify ?C (procesador "i7 4790K_Intel")
    ;;(ram "2x8GB 2133 cl9")
    ;;(placabase "Gigabyte_Z97X gaming 5 ejemplo")
    ;;(discoduro "1Tb HDD")
    ;;(grafica "GTX 970")
    ;;(fuente "700W+ silver")
    ;(precio 850))))
)


;;*******MAIN*******

(defrule inicio
  (declare (salience 1))
  =>
  (printout t crlf)
  (printout t "Sistema Experto de Configuracion de Ordenadores")
  (printout t crlf crlf))

  (defrule presupuesto
   (declare (salience -1))
   (pc (procesador ?A)(ram ?F)(placabase ?B)(discoduro ?M)(grafica ?G)(fuente ?P)(precio ?O))
   =>
   (printout t crlf crlf "-.PRESUPUESTO.-" crlf crlf)
   (printout t "PROCESADOR: " ?A crlf)
   (printout t "RAM: " ?F crlf)
   (printout t "PLACA BASE: " ?B crlf)
   (printout t "DISCO DURO:" ?M crlf)
   (printout t "GRAFICA: " ?G crlf)
   (printout t "FUENTE: " ?P crlf crlf)
   (printout t "PRECIO: " ?O crlf)
   )

【问题讨论】:

    标签: clips expert-system


    【解决方案1】:

    preciogamingoc 规则匹配 pc 事实,因此您可以运行程序,检查执行哪些规则,并检查 pc 事实以查看已分配给它的值:

    CLIPS> (reset)
    CLIPS> (watch rules)
    CLIPS> (run)
    FIRE    1 inicio: *
    
    Sistema Experto de Configuracion de Ordenadores
    
    FIRE    2 tipopc: f-1
    Tipo (juegos:g/diseño:d/otros:o)? g
    FIRE    3 oc: f-2
    Hará overclock al procesador (si/no)?: si
    FIRE    4 presupuesto: f-3
    
    
    -.PRESUPUESTO.-
    
    PROCESADOR: i5 4690_Intel
    RAM: 2x4GB 2133 cl9
    PLACA BASE: Gigabyte_H97M-HD3 ejemplo
    DISCO DURO:1Tb
    GRAFICA: GTX 960
    FUENTE: 700W+ silver
    
    PRECIO: 550
    CLIPS> (facts)
    f-0     (initial-fact)
    f-3     (pc (tipo g) (oc si) (procesador "i5 4690_Intel") (ram "2x4GB 2133 cl9") (placabase "Gigabyte_H97M-HD3 ejemplo") (discoduro "1Tb") (grafica "GTX 960") (fuente "700W+ silver") (precio 550))
    For a total of 2 facts.
    CLIPS> (ppfact 3)
    (pc 
       (tipo g) 
       (oc si) 
       (procesador "i5 4690_Intel") 
       (ram "2x4GB 2133 cl9") 
       (placabase "Gigabyte_H97M-HD3 ejemplo") 
       (discoduro "1Tb") 
       (grafica "GTX 960") 
       (fuente "700W+ silver") 
       (precio 550))
    CLIPS> 
    

    来自 preciogamingoc 规则的模式是:

    ?A <- (pc (tipo g) 
              (oc si) 
              (procesador) 
              (ram) 
              (placabase) 
              (discoduro) 
              (grafica) 
              (fuente))
    

    tipo 和 oc 插槽的事实值与模式匹配,但处理器、ram、placabase、discoduro、grafica 和 fuente 插槽的值不匹配。这些槽可以有零个或多个值。事实上,每个位置都有一个值,但您的模式指定这些插槽中的每一个都是空的,因此模式不匹配。

    您需要从模式中删除这些插槽或检查特定值。一旦在规则的操作中修改了 pc 事实,您还需要阻止规则再次执行(可能通过将 oc 的值更改为 si-actualizado 以指示已应用规则):

    (defrule preciogamingoc
       ?A <- (pc (tipo g) (oc si))
       =>
       (printout t "Veo que su sistema será destinado a juegos y que además se le podrá hacer overclock." crlf
                   "Ahora debe introducir el presupuesto medio para que podamos darle una configuración mas concreta." crlf
                   "Introduzca su presupuesto de referencia(>= 750): ")
       (bind ?precio (read))
       (if (and (>= ?precio 750)(< ?precio 850))
          then 
          (modify ?A (oc si-actualizado)
                     (procesador "i5 4690K_Intel")
                     (ram "2x8GB 2133 cl9")
                     (placabase "Gigabyte_Z97X gaming 3 ejemplo")
                     (discoduro "1Tb")
                     (grafica "GTX 970")
                     (fuente "700W+ silver")
                     (precio 750))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2016-12-27
      相关资源
      最近更新 更多