我目前正在开发一个使用Optaplanner和drools的Java项目来解决Constraint Satisfaction问题.
解决方案很好.但是在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的答案,了解更高级的drools特定技巧/技巧.