我目前正在一个Java项目中,该项目使用Optaplanner和Drools解决约束满意度问题。
解决效果很好。但是在solver给我一个解决方案之后,我想评估该解决方案:我想知道违反了哪些约束,即哪些规则已被触发以及执行了多少次。
这可能吗,我该如何开始呢?
最佳答案
请参阅文档Reusing the score calculation outside the Solver部分。这样就以简单的方式提供了您需要的所有数据。
for (ConstraintMatchTotal constraintMatchTotal : guiScoreDirector.getConstraintMatchTotals()) {
String constraintName = constraintMatchTotal.getConstraintName();
Number weightTotal = constraintMatchTotal.getWeightTotalAsNumber();
for (ConstraintMatch constraintMatch : constraintMatchTotal.getConstraintMatchSet()) {
List<Object> justificationList = constraintMatch.getJustificationList();
Number weight = constraintMatch.getWeightAsNumber();
...
}
}
请参阅劳恩(Laune)的答案,以获取更高级的流口水特定技术/技巧。