我目前正在一个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)的答案,以获取更高级的流口水特定技术/技巧。

07-27 19:54