在Drools中调试Optaplanner规则

时间:2016-09-30 03:15:15

标签: drools optaplanner

在为我的项目实施一些规则之后,我做了一个"ScoreConsistencyCheck"以确保我自己正确实施了规则。

"ScoreConsistencyCheck"意味着实现我自己的Java方法,该方法将在我提前终止解决或通过配置终止后调用,这将输出预期得分。此方法的参数是Solution实例,基于解决方案的状态是计算的预期得分,然后将其与来自解决方案实例的“得分”变量的得分进行比较。

当我使用FULL_ASSERT时,它不会抛出ScoreCorruption异常,但是当我以这种方式尝试时,我有时会在构造启发式或本地特定步骤中获得分数差异搜索。我的猜测是因为OptaPlanner不知道基于解决方案的预期得分是什么,它在FULL_ASSERT中所关心的步骤得分与撤消移动完成后重新计算的得分相同。

因为"ScoreConsistencyCheck"仅在求解结束后被调用,我无法真正推断导致问题的情况(如果它导致任何问题),因为发生这种情况的移动和步骤是未知的。

因为这个我正在寻找一种方法,可以在每次移动后向我显示我的预期得分(来自“ScoreConsistencyCheck”),所以我可以将它与OptaPlanner比较,并找到错过了计算。要做到这一点,我需要一种方法来在每次移动后获得工作解决方案。

经过一番搜索,我找不到多少。然而,我确实发现在Optaplanner 7.0.0 Beta中有一个ScoreVerifier(使用Optaplanner 6.4.0),但案例是:

  • 我不知道这是否能达到我想要的目标,因为关于它的文档很少。
  • 我在实施它时遇到了麻烦。

我的问题是:

  1. 如何在每次移动后获取workingSolution,并将其用于检查?
  2. Optaplanner 6.4.0中是否有允许我这样做的功能?
  3. 如果没有功能,是否有可能的解决方法?
  4. 有没有更好的方法来检查规则的分数一致性?

1 个答案:

答案 0 :(得分:1)

  1. 是的,<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <body> <div class="any"> Any text </div> <div class="content"> Lorem ipsum porttitor malesuada fusce adipiscing gravida eu sit tellus nam justo sem metus, elementum lorem adipiscing. Enim commodo malesuada porttitor ultricies diam, auctor congue sodales eros sem quisque, risus magna donec integer, lorem donec diam magna vivamus. Adipiscing bibendum pellentesque curabitur orci proin tempus sapien amet: lorem tempus. Quam nam, ipsum magna justo nam lorem nam, eu a fusce donec sed eget metus mauris ligula sagittis rutrum ultricies non at. Sed quisque lectus duis, ut magna malesuada: vivamus — in sagittis porta tempus: curabitur odio — magna risus, sapien — elementum, maecenas porttitor risus integer. Urna amet orci auctor elementum, magna justo arcu a auctor bibendum sem proin auctor amet justo metus morbi odio maecenas porttitor. Porta magna integer porttitor tellus eros nec ultricies magna rutrum curabitur, porttitor integer nam, sem non orci non nulla. </div> </body>(参见文档)。将其与<assertionScoreDirectorFactory>结合使用,您可以更加独立地查看评分损坏最初开始的位置。