我要建立一个专家系统,在紧急情况下,如果建筑物有几层楼(一层+三层),电梯应将人员带入地下。想法是首先从最高的一层(第三层)中拯救人们,然后从第二层中拯救人们,最后从第一层中拯救人们。我对规则的显着性有疑问(每个楼层都有单独的规则)。开始时,规则“ MoveFloor3”的最高显着性是-将电梯移至第三层(因为我首先要救掉最高层中的人)。当我从三楼救起所有人时,我想将此规则的显着性更改为0(或比第二层和一楼的显着性小的数字),因为在那之后,我要从第二层和一楼救出人们。下面是该规则的代码,
(defrule moveFloor3
(declare (salience 50))
?j<-(lastJob ?t&~moveFloor3)
?e<-(elevator ?peopleInElevator)
?f<-(floor3 ?peopleInFloor)
(capacityElevator ?capacityElevator)
=>
(bind ?newPeopleInElevator (+ ?peopleInElevator (min ?peopleInFloor (- ?capacityElevator ?peopleInElevator))))
(bind ?newPeopleInFloor (- ?peopleInFloor (min ?peopleInFloor (- ?capacityElevator ?peopleInElevator))))
(retract ?e ?f ?s ?j)
(assert (elevator ?newPeopleInElevator))
(assert (floor3 ?newPeopleInFloor))
(assert (lastJob moveFloor3))
(printout t "Elevator moved to third floor" crlf)
)
使用全局变量设置显着性,一旦触发该规则即可在规则的RHS中对其进行更改。另请参阅在规则定义中的显着性声明中使用变量
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句