Constraints optaplanner流口水得分腐败

Constraints optaplanner流口水得分腐败,constraints,drools,optaplanner,scoring,Constraints,Drools,Optaplanner,Scoring,我有一个简化的drools文件,对于过度约束的问题有一个硬约束;我将计划变量注释为nullable=true。在求解开始、本地搜索和求解结束时,最佳分数为0硬/0中/0软。但是,当我为最佳解决方案打印出规划实体及其值时,就会出现硬约束冲突。以下是我的硬约束(总结): 在更复杂的规则集中,我有中等约束,可以降低任何具有空间隔的任务的分数 我已经阅读了这里的一些分数腐败线程,并且相信这更可能是我的实现的问题,而不是optaplanner/drools错误。我试过: 将规则简化为一个硬约束 打开跟踪日

我有一个简化的drools文件,对于过度约束的问题有一个硬约束;我将计划变量注释为nullable=true。在求解开始、本地搜索和求解结束时,最佳分数为0硬/0中/0软。但是,当我为最佳解决方案打印出规划实体及其值时,就会出现硬约束冲突。以下是我的硬约束(总结):

在更复杂的规则集中,我有中等约束,可以降低任何具有空间隔的任务的分数

我已经阅读了这里的一些分数腐败线程,并且相信这更可能是我的实现的问题,而不是optaplanner/drools错误。我试过:

  • 将规则简化为一个硬约束
  • 打开跟踪日志记录
  • 启用完整的\u断言
  • 基准测试
  • 我正在寻找更多的故障排除方法

    问题2:我看到很多不可行的举措,如下所示。我没有任何自定义移动,也无法确定为什么这些移动不可行。文档中指出,不可行移动的两个原因是1)解决方案没有变化(显然不是每个对象ID的情况,我在toString()中打印的值)或2)不可能的移动——我没有自定义isDoable,所以我不知道情况会如何

    2015-11-11 22:48:42,143 [main] TRACE         Move index (0) not doable, ignoring move (...Task@26b1a589@ {132865 3754 3766 20724} <-> ...Task@7b7a17ed@ {44312 27525 27542 19090}).
    
    我只从plan solver配置中删除了_DOWN,这改变了评分,但我仍然看到硬约束为0,尽管在最佳解决方案中出现了一些硬约束。例如:

    2015-11-15 13:54:49,058 [main] INFO  Solving started: time spent (352), best score (uninitialized/0hard/-1095medium/0soft), environment mode (REPRODUCIBLE), random (WELL44497B with seed 4409383736).
    2015-11-15 13:55:07,634 [main] INFO  Construction Heuristic phase (0) ended: step total (219), time spent (18930), best score (0hard/0medium/-5052665soft).
    2015-11-15 13:55:18,704 [main] INFO  Local Search phase (1) ended: step total (5862), time spent (30000), best score (0hard/0medium/-4958070soft).
    2015-11-15 13:55:18,704 [main] INFO  Solving ended: time spent (30000), best score (0hard/0medium/-4958070soft), average calculate count per second (11905), environment mode (REPRODUCIBLE).
    

    也许这与以一种有用的方式回答这个问题无关,但是代码片段应该是一致的,即使简化了。
    $interval2
    绑定在哪里?
    interval.getOverlap(…)
    的结果不能同时是布尔值和数字,但可以同时使用这两种方式。什么类型的间隔?那个类型是可变的吗?输入错误,间隔2是在第二行绑定的,我只是在有问题的写作中意外地省略了。它应该看起来像:Task(interval!=null,id>$interval2:interval,$id,…,interval.getOverlap($interval1))interval是常规类的实例,是计划值。他们有setter和public-access成员,但我不会在解决开始后更改它们。任务的间隔成员是可变的,可以通过setInterval访问。我尝试过将其公开和私有。我尝试实施自定义移动,但这并没有改变每个阶段的0/0/0分数。
    2015-11-13 21:35:17,269 [main] INFO  Solving started: time spent (305), best score (uninitialized/0hard/-2795medium/0soft), environment mode (REPRODUCIBLE), random (WELL44497B with seed 4409383736).
    2015-11-13 21:35:21,458 [main] INFO  Construction Heuristic phase (0) ended: step total (559), time spent (4496), best score (0hard/0medium/0soft).
    2015-11-13 21:35:26,962 [main] INFO  Local Search phase (1) ended: step total (5106), time spent (10000), best score (0hard/0medium/0soft).
    2015-11-13 21:35:26,962 [main] INFO  Solving ended: time spent (10000), best score (0hard/0medium/0soft), average calculate count per second (3271), environment mode (REPRODUCIBLE).
    
    2015-11-15 13:54:49,058 [main] INFO  Solving started: time spent (352), best score (uninitialized/0hard/-1095medium/0soft), environment mode (REPRODUCIBLE), random (WELL44497B with seed 4409383736).
    2015-11-15 13:55:07,634 [main] INFO  Construction Heuristic phase (0) ended: step total (219), time spent (18930), best score (0hard/0medium/-5052665soft).
    2015-11-15 13:55:18,704 [main] INFO  Local Search phase (1) ended: step total (5862), time spent (30000), best score (0hard/0medium/-4958070soft).
    2015-11-15 13:55:18,704 [main] INFO  Solving ended: time spent (30000), best score (0hard/0medium/-4958070soft), average calculate count per second (11905), environment mode (REPRODUCIBLE).