在 CLIPS 中找到有条件的最低值
Find lowest value with conditions in CLIPS
我正在制作一个 CLIPS 程序,我有:
酒店概况:(酒店 hotelname 城市星级)
国家事实,其中出现属于一个国家的所有城市:(pais countryname city1 city2....)
价格事实: (precio hotelname kindofroom price availablerooms)
问题是,我需要根据某些特征找到最便宜的旅馆,例如,假设我有以下初始事实:
(deffacts condiciones-iniciales
(hotel RiuTaino PuntaCana 5 )
(hotel RiuFelicidad PuntaCana 4)
(hotel RiuMaracana PuntaCana 4 )
(hotel RiuMaracana2 Baradero 4 )
(hotel RiuRon Baradero 4 )
(hotel RiuMaya RivieraMaya 4 )
(hotel RiuMojito RivieraMaya 4 )
(hotel RiuTequila RivieraMaya 5 )
(hotel RiuSalvaje ElCarmen 4 )
(hotel RiuMontana ElCarmen 4 )
(hotel RiuSantuario ElCarmen 5 )
(pais Rep_Dominicana PuntaCana Baradero SantoDomingo )
(pais Mejico ELCarmen RivieraMaya Cancun)
(precio RiuTaino suite 500 3)
(precio RiuTaino standar 200 20)
(precio RiuFelicidad suite 400 2)
(precio RiuFelicidad standar 100 0)
(precio RiuMaracana suite 600 0)
(precio RiuMaracana standar 300 22)
(precio RiuMaracana2 suite 650 1)
(precio RiuMaracana2 standar 350 2)
(precio RiuRon suite 900 6)
(precio RiuRon standar 700 18)
(precio RiuMaya suite 900 16)
(precio RiuMaya standar 700 88)
(precio RiuMojito suite 550 7)
(precio RiuMojito standar 170 0)
(precio RiuTequila suite 400 3)
(precio RiuTequila standar 350 2)
)
例如,我想找到Rep_Dominicana(任何城市)最便宜的四星级酒店,有标准间和可用房间。为了找到符合这些特征的酒店,我做了:
(defrule busca-hoteles
(hotel ?hotel ?ciudad ?estrellas)
(pais Rep_Dominicana $? ?ciudad $?)
(test (= ?estrellas 4))
(precio ?hotel standar ? ?habitaciones)
(test (> ?habitaciones 0))
=>
(printout t ?hotel crlf)
)
但是,我怎样才能在满足这些要求的产品中找到最便宜的产品呢?我完全迷路了。在此先感谢您的帮助:)
您可以通过以下方式修改规则以找到最便宜的房间:
(defrule busca-hoteles
;; The city is in the dominica republic
(pais Rep_Dominicana $? ?ciudad $?)
;; The hotel is in the city and 4 stars
(hotel ?hotel ?ciudad 4)
;; There are available standard rooms in the hotel
(precio ?hotel standar ?price ?habitaciones)
(test (> ?habitaciones 0))
;; There are no other 4 star hotel in the same
;; city with available standard rooms and a
;; lower price
(not (and (hotel ?hotel2 ?ciudad 4)
(precio ?hotel2 standar ?price2 ?habitaciones2)
(test (> ?habitaciones2 0))
(test (< ?price2 ?price))))
=>
(printout t "Cheapest 4 star hotel in " ?ciudad " is "
?hotel " at " ?price crlf))
我正在制作一个 CLIPS 程序,我有:
酒店概况:(酒店 hotelname 城市星级)
国家事实,其中出现属于一个国家的所有城市:(pais countryname city1 city2....)
价格事实: (precio hotelname kindofroom price availablerooms)
问题是,我需要根据某些特征找到最便宜的旅馆,例如,假设我有以下初始事实:
(deffacts condiciones-iniciales
(hotel RiuTaino PuntaCana 5 )
(hotel RiuFelicidad PuntaCana 4)
(hotel RiuMaracana PuntaCana 4 )
(hotel RiuMaracana2 Baradero 4 )
(hotel RiuRon Baradero 4 )
(hotel RiuMaya RivieraMaya 4 )
(hotel RiuMojito RivieraMaya 4 )
(hotel RiuTequila RivieraMaya 5 )
(hotel RiuSalvaje ElCarmen 4 )
(hotel RiuMontana ElCarmen 4 )
(hotel RiuSantuario ElCarmen 5 )
(pais Rep_Dominicana PuntaCana Baradero SantoDomingo )
(pais Mejico ELCarmen RivieraMaya Cancun)
(precio RiuTaino suite 500 3)
(precio RiuTaino standar 200 20)
(precio RiuFelicidad suite 400 2)
(precio RiuFelicidad standar 100 0)
(precio RiuMaracana suite 600 0)
(precio RiuMaracana standar 300 22)
(precio RiuMaracana2 suite 650 1)
(precio RiuMaracana2 standar 350 2)
(precio RiuRon suite 900 6)
(precio RiuRon standar 700 18)
(precio RiuMaya suite 900 16)
(precio RiuMaya standar 700 88)
(precio RiuMojito suite 550 7)
(precio RiuMojito standar 170 0)
(precio RiuTequila suite 400 3)
(precio RiuTequila standar 350 2)
)
例如,我想找到Rep_Dominicana(任何城市)最便宜的四星级酒店,有标准间和可用房间。为了找到符合这些特征的酒店,我做了:
(defrule busca-hoteles
(hotel ?hotel ?ciudad ?estrellas)
(pais Rep_Dominicana $? ?ciudad $?)
(test (= ?estrellas 4))
(precio ?hotel standar ? ?habitaciones)
(test (> ?habitaciones 0))
=>
(printout t ?hotel crlf)
)
但是,我怎样才能在满足这些要求的产品中找到最便宜的产品呢?我完全迷路了。在此先感谢您的帮助:)
您可以通过以下方式修改规则以找到最便宜的房间:
(defrule busca-hoteles
;; The city is in the dominica republic
(pais Rep_Dominicana $? ?ciudad $?)
;; The hotel is in the city and 4 stars
(hotel ?hotel ?ciudad 4)
;; There are available standard rooms in the hotel
(precio ?hotel standar ?price ?habitaciones)
(test (> ?habitaciones 0))
;; There are no other 4 star hotel in the same
;; city with available standard rooms and a
;; lower price
(not (and (hotel ?hotel2 ?ciudad 4)
(precio ?hotel2 standar ?price2 ?habitaciones2)
(test (> ?habitaciones2 0))
(test (< ?price2 ?price))))
=>
(printout t "Cheapest 4 star hotel in " ?ciudad " is "
?hotel " at " ?price crlf))