Select 不同事实之间的偏好

Select preference between different facts

我必须制定规则,谁在其中 3 个中选择最佳 phone 线路速率。费率有不同的套餐,例如有电视或更好的互联网连接。 当客户想要升级它时,它会启动一个请愿书,提供它想要的互联网连接以及它是否想要电视。 系统必须选择最低的申请费率,即如果有较低的费率满足条件,系统将无法选择更高的费率。

是否可以仅使用一条规则来完成?我现在拥有的总是选择最高的价格,因为出于某种原因它总是有更高的偏好。

(defrule cambio-tarifa

    ?dirPeticion <- ( peticion ( id_cliente ?id_cliente ) ( fibra ?fibra_minima ) ( TV ?TV_Peticion ) )
    ?dirCliente <- ( cliente ( id ?id_cliente ) ( plan ?plan_actual ) )

    ( plan ( nombre ?plan_nuevo ) ( precio ?precio_plan ) ( fibra ?fibra ) ( TV ?TV_Plan ) )
    ( plan ( nombre ?plan_actual ) ( precio ?precio_actual ) )

    ( test ( > ?precio_plan ?precio_actual ) )
    ( test ( >= ?fibra ?fibra_minima ) )  

    =>

    ( modify ?dirCliente ( plan ?plan_nuevo ) )
    ( retract ?dirPeticion )

)

这是选择 lowest/highest 值的规则的一般模式:

CLIPS> 
(deftemplate plan 
   (slot id)
   (slot price))
CLIPS> 
(deffacts plans
   (plan (id A) (price 100))
   (plan (id B) (price 90))
   (plan (id C) (price 200))
   (plan (id D) (price 150)))
CLIPS> 
(defrule lowest
   (plan (id ?id) (price ?price))
   (not (plan (price ?price2&:(< ?price2 ?price))))
   =>
   (printout t "Plan " ?id " has the lowest price: " ?price crlf))
CLIPS> (reset)
CLIPS> (run)
Plan B has the lowest price: 90
CLIPS>