Java Drools 6.0.3规则-为什么此代码在无限循环中运行?
当一个病人得到诊断时,我试图展示一些信息。显示这一点的规则是“即时诊断” 这里的问题是,此代码不显示任何打印消息。。。在无限循环中运行Java Drools 6.0.3规则-为什么此代码在无限循环中运行?,java,eclipse,drools,rules,expert-system,Java,Eclipse,Drools,Rules,Expert System,当一个病人得到诊断时,我试图展示一些信息。显示这一点的规则是“即时诊断” 这里的问题是,此代码不显示任何打印消息。。。在无限循环中运行 package com.sample rule "sem sintomas 1" salience 100 when $p : Paciente() forall($s : Sintomas(idPessoa != $p.getId())) then $p.setDiagnostico("sem sintomas definidos")
package com.sample
rule "sem sintomas 1"
salience 100
when
$p : Paciente()
forall($s : Sintomas(idPessoa != $p.getId()))
then
$p.setDiagnostico("sem sintomas definidos");
update($p);
end
rule "sem sintomas 2"
salience 90
when
$s1 : Sintomas(sintoma == "dores")
$s2 : Sintomas(sintoma == "manchas")
$p : Paciente(id == $s1.getIdPessoa(), id == $s2.getIdPessoa(), diagnostico == "")
then
$p.setDiagnostico("sem sintomas definidos");
update($p);
end
rule "gripe"
salience 60
when
$s1 : Sintomas(sintoma == "febre")
$s2 : Sintomas(sintoma == "dores")
$p : Paciente(id == $s1.getIdPessoa(), id == $s2.getIdPessoa(), diagnostico == "")
then
$p.setDiagnostico("gripe");
update($p);
end
rule "enxatema 1"
salience 80
when
$s1 : Sintomas(sintoma == "febre")
$s2 : Sintomas(sintoma == "dores")
$s3 : Sintomas(sintoma == "manchas")
$p : Paciente(id == $s1.getIdPessoa(), id == $s2.getIdPessoa(), id == $s3.getIdPessoa(), diagnostico == "", idade >= 15)
then
$p.setDiagnostico("enxatema");
update($p);
end
rule "enxatema 2"
salience 70
when
$s1 : Sintomas(sintoma == "febre")
$s2 : Sintomas(sintoma == "manchas")
$p : Paciente(id == $s1.getIdPessoa(), id == $s2.getIdPessoa(), diagnostico == "", idade < 15)
then
$p.setDiagnostico("enxatema");
update($p);
end
rule "resfriado"
salience 50
when
$s1 : Sintomas(sintoma == "febre")
$p : Paciente(id == $s1.getIdPessoa(), diagnostico == "")
then
$p.setDiagnostico("resfriado");
update($p);
end
rule "Imprime diagnosticos"
salience 40
when
$s : Sintomas()
$p : Paciente(id == $s.getIdPessoa(), diagnostico != "")
then
System.out.println("Paciente " + $p.getNome() + " com diagnóstico: " + $p.getDiagnostico());
end
感谢所有的帮助,您必须使用约束来避免循环
$p : Paciente(diagnostico == "")
在规则“sem sintomas 1”中也是如此
建议:您应该使用
modify( $p ){ setDiagnostico("...") }
而不是更新
这些id值(“001”,…)很奇怪:它们不识别症状,也不识别患者,因为这样它们就不会与症状一起存储。通常情况下,一个人用一个键(如ICD-10)识别症状,患者会有一个症状键列表。然后,一条规则可以根据症状的存在与否来确定疾病
我不知道你的身份证是什么意思。自始至终大量使用显著性表明有些事情不对劲。只有在最后一条规则中,您才能使用(低)显著性来打印每个患者的结果 欢迎来到SO。请看这篇关于如何提出一个相对容易帮助的问题的有用文章。不要使用到pastebin&Co.的链接。它们迟早会消失,然后问题就没用了。
modify( $p ){ setDiagnostico("...") }