为什么 Construction Heuristics 的分数计算速度比 Local Search 快?
Why is score calculation speed faster for Construction Heuristics than Local Search?
开始使用 OptaPlanner (v.23.0.Final),我正在试验 CloudBalancing 示例。使用 IncrementalScoreCalculator Java class,我注意到构建阶段(>1M/秒)的分数计算速度比本地搜索阶段(~50k/秒)高得多。这怎么会发生?是否包括分数计算之外的算法?这可以解释差异,因为局部搜索算法将比构造算法在分数计算器之外花费更多的时间。
两个原因:
1) 构造启发式开始时没有分配给计算机的进程,因此所有 Process.getComputer() 都是空的。大多数约束匹配 computer != null
的进程,因此它们短路并且不执行任何昂贵的连接、groupBy、累积等。因此空的或部分初始化的解决方案的计算速度比完全初始化的解决方案快得多(这本地搜索使用)。
2) CH 只做 ChangeMove。 LS 执行更昂贵的移动,包括交换移动(两倍大)和支柱移动(n 倍大)。因此,LS 中每次移动计算的增量影响量也更大。
开始使用 OptaPlanner (v.23.0.Final),我正在试验 CloudBalancing 示例。使用 IncrementalScoreCalculator Java class,我注意到构建阶段(>1M/秒)的分数计算速度比本地搜索阶段(~50k/秒)高得多。这怎么会发生?是否包括分数计算之外的算法?这可以解释差异,因为局部搜索算法将比构造算法在分数计算器之外花费更多的时间。
两个原因:
1) 构造启发式开始时没有分配给计算机的进程,因此所有 Process.getComputer() 都是空的。大多数约束匹配 computer != null
的进程,因此它们短路并且不执行任何昂贵的连接、groupBy、累积等。因此空的或部分初始化的解决方案的计算速度比完全初始化的解决方案快得多(这本地搜索使用)。
2) CH 只做 ChangeMove。 LS 执行更昂贵的移动,包括交换移动(两倍大)和支柱移动(n 倍大)。因此,LS 中每次移动计算的增量影响量也更大。