Optaplanner 7.9.0多线程-解决方案不可复制

时间:2018-08-06 14:02:25

标签: optaplanner

已更新至7.9.0,并且在出现最初问题后:https://stackoverflow.com/questions/51597744/optaplanner-7-9-0-and-adding-multithreading-same-planningid-exception我现在一直在尝试测试并与我的7.7.0版本进行比较。但是,即使在config xml中进行了显式设置,我也无法每次都能(显然仅使用相同的问题数据)重现相同的解决方案。此版本是否需要其他设置?

编辑:做了一些测试,发现切换到TABU(尚未全部通过)给了我预期的一致性:

额外核心数:1-默认值:

            Score (Hrd:Med:Sft) Time Taken (Minutes:Seconds)
Test1       0:0:-7609           0:08
Test2       0:-1:-7758          0:13
Test3       0:-1:-7705          0:14

额外核心数:1-TABU:

            Score (Hrd:Med:Sft) Time Taken (Minutes:Seconds)
Test1       0:0:-7763           1:29
Test2       0:0:-7763           1:29
Test3       0:0:-7763           1:28

在前两次运行之间,解决方案在LS步骤28处有所分歧:

LS step (25), time spent (1869), score (0hard/-3medium/-8155soft),
LS step (26), time spent (1890), score (0hard/-3medium/-8339soft),
LS step (27), time spent (1895), score (0hard/-3medium/-8126soft),
**LS step (28), time spent (1909), score (0hard/-3medium/-8256soft),
LS step (29), time spent (1915), score (0hard/-3medium/-8438soft),
LS step (30), time spent (1924), score (0hard/-3medium/-8620soft),
LS step (31), time spent (1952), score (0hard/-3medium/-8639soft),**

...和...

LS step (25), time spent (1385), score (0hard/-3medium/-8155soft),
LS step (26), time spent (1407), score (0hard/-3medium/-8339soft),
LS step (27), time spent (1412), score (0hard/-3medium/-8126soft),
**LS step (28), time spent (1422), score (0hard/-3medium/-8217soft),
LS step (29), time spent (1436), score (0hard/-3medium/-8336soft),
LS step (30), time spent (1442), score (0hard/-3medium/-8517soft),
LS step (31), time spent (1448), score (0hard/-3medium/-8571soft),**

不知道这一切是否会或多或少地导致问题/解决方案设置或其他问题。

1 个答案:

答案 0 :(得分:0)

首先,让我们定义可重复性:在相同的步骤迭代中获得相同的结果。如果CPU时间完全相同(从不),这也意味着在相同的时间量后获得相同的结果。因此,您可能需要运行更长的时间才能获得相同数量的步骤。

只有在使用相同的string时,多线程求解才可重现。 moveThreadCount不能重现使用<moveThreadCount>4</>的运行。即使使用<moveThreadCount>2</>进行的运行也无法通过使用<moveThreadCount>NONE</>进行的运行进行重现(除了QA btw,后者无用)。

看看您的分数计算速度。

  • 如果它更低,您可能忘了增加内存大小,并且GC流失会伤害您。
  • 如果该值较高,通常可以得到更好的结果。如果您仍然看到较差的结果,则可能是由于不移动线程而使配置过度拟合。在optaplanner基准中使用其他数据集来证明或反证。

此外,如果使用<moveThreadCount>1</>,则只能在同一台计算机上进行复制,因为AUTO会根据计算机中的CPU内核数来更改moveThreadCount。