java - 解释 Optaplanner 中的所有动作
问题描述
我目前正在使用ObservabilityPhaseListener
挂钩到优化运行。一个特定的用例是调试为什么某个组合/移动会导致较低的分数(因此没有被选中)。
目前,stepEnded
这是我能走的最低点,但已经太晚了,因为不会选择“坏”的举动,因此从未解释过。
我也一直在使用 hack 来执行移动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 {
... // ?
}
}
解决方案
人类经常会问为什么某个组合被拒绝,而这正是打破约束可以派上用场的地方
让用户在 UI 中进行更改并运行结果ScoreManager.explain(Solution)
以显示分数和起诉书的热图。
推荐阅读
- python-3.x - Python xlsx 和网页抓取
- ios - iOS 自动布局最大宽度
- android - 即使应用程序关闭,我如何发送通知?
- java - @SpringBootApplication 和 @ComponentScan 不能一起工作(bean 配置)
- javascript - 淡入或淡出取决于活动课程,淡入作品,淡出不
- python - Python 等效于 c++ find_if
- c# - 如何开始编写 C# 客户端以将文件上传到 WeTransfer?
- node.js - Web3.js sendSignedTransaction 给出“错误:无法检查交易收据”
- apache-kafka - kafka 中到不同主题的多个连接器将连接到同一个节点
- javascript - Javascript用方括号替换字符串点表示法