我正在使用CLIPS进行大学项目,这是一个问题驱动的专家系统,我需要随机提出几个初始问题,所以我写了这组规则,并且(设置策略随机):
(defrule ask-age
(not (age ?))
=>
(bind ?answer (question “What’s your age?”))
(assert (age ?answer)))
(defrule ask-gender
(not (age ?))
=>
(bind ?answer (question “What’s your gender?”))
(assert (gender ?answer)))
(defrule ask-main-symptom
(not (main-symptom ? TRUE))
=>
(bind ?answer (question “What’s the main symptom?”))
(assert (main-symptom ?answer TRUE)))
根据有关主要症状的知识,另一组规则被激活,我需要更改冲突解决策略。 在(断言(主要症状?回答为真))之后,将(设定策略复杂性)置于ask-main-symptom规则中是否正确?有更好的方法吗?
(defrule ask-main-symptom
(not (main-symptom ? TRUE))
=>
(bind ?answer (question “What’s the main symptom?”))
(assert (main-symptom ?answer TRUE))
(set-strategy complexity))
答案 0 :(得分:0)
本身并没有什么问题,但除了使用随机策略检查潜在冲突的规则和lex / mea以运行最初用OPS5编写的程序之外,我从未遇到过这种情况。我使用的策略不是深度,更不用说在执行过程中使用两种不同的策略了。如果改变策略是项目要求之一,那么我是从规则中做到的,而不是从ask-main-symptom规则中执行它,该规则将随机触发其他问题规则,创建一个在所有问题规则都有机会执行之后改变策略的较低显着性规则。