解释optaplanner中的所有动作

yzckvree  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(388)

我正在使用 ObservabilityPhaseListener 加入优化运行。一个特定的用例是调试为什么某个组合/移动会导致较低的分数(因此没有被选中)。
目前, stepEnded 是我能走的最低点,但已经太晚了,因为“坏”的举动不会被选中,因此永远不会解释。
我也一直在使用黑客,来执行一个移动 stepEnded 并解释它,但有时是不可行的或只是太多的努力。
有没有人知道如何在优化过程中解释所有的动作(以及他们糟糕的分数)?
谢谢。
--编辑:我已经实现了一个自定义的 ScoreDirectoryFactory 但在配置中插入时遇到问题:

class MyScoreDirectorFactory<Solution_>(solutionDescriptor: SolutionDescriptor<Solution_>?, kieContainer: KieContainer?, ksessionName: String?) : DroolsScoreDirectorFactory<Solution_>(solutionDescriptor, kieContainer, ksessionName) {
    @Override
    override fun buildScoreDirector(lookUpEnabled: Boolean, constraintMatchEnabledPreference: Boolean): DroolsScoreDirector<Solution_> {
        return super.buildScoreDirector(lookUpEnabled, true)
    }
}

val config = SolverConfig().apply {
        environmentMode = REPRODUCIBLE
        solutionClass = XYZ::class.java
        entityClassList = listOf(...)

        scoreDirectorFactoryConfig = ScoreDirectorFactoryConfig().apply {
             ... // ?
        }
}
yqyhoc1h

yqyhoc1h1#

人类经常会问为什么某个组合会被拒绝,而这正是打破的约束可以派上用场的地方
让用户在ui中进行更改,并运行结果 ScoreManager.explain(Solution) 显示起诉书的分数和热度图。

jslywgbw

jslywgbw2#

为了它的价值(这里有龙!):
打开 TRACE 记录以确定该步骤中哪个步骤索引和哪个移动索引的行为与您期望的不同。在 LocalSearchDecider 条件是步骤索引和移动索引匹配(在到达断点之前跳过数千次移动求值)。在其中,使用 ScoreManager.explainScore() 移动完成之前和之后(撤消之前)。

相关问题