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>
我必须制定规则,谁在其中 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>