多线程事务 解决方案
OptaPlanner最终支持多线程增量求解 。 加速是惊人的。 即使只有几个CPU内核,它也将得分计算速度提高了三倍。 请参阅下面的结果。 要激活它,只需在配置中添加一行即可。
最初的功能要求始于2007年。多年来,我们逐步为之准备了内部体系结构。 所以现在,十年后,我们从7.9.0.Final
开始完全支持它。
但是为什么要花这么长时间实施呢?
要求
让我们看一下多线程增量求解的要求:
- 在CPU上水平扩展算法。
- 不要破坏增量分数计算的速度。
- 运行必须是可重复的。
在CPU上水平扩展算法
有多种方法可以使用多个线程而不进行真正的多线程解决:
- 多租户 :解决多个数据集,每个线程一个。
- 从第一个OptaPlanner版本开始工作。
- 多重下注解决 :以多种方式完全独立地解决一个数据集。 取得最佳结果。
- 从第一个OptaPlanner版本开始工作。
- 分区搜索 :分解一个数据集并分别求解每个数据集。
- 自OptaPlanner 7.0起已完全受支持。
但是这些都不是真正的并行启发式,如下面右下角所示:
在实际的多线程解决方案中,我们通过将1种算法(可能是多种算法的组合)的繁重计算工作分流到单独CPU内核上的多个线程中而无需分区即可解决1个数据集。
在OptaPlanner的构造试探法和本地搜索中,最耗CPU的工作是计算移动分数。 例如,在禁忌搜索中,每个步骤(外部迭代)的计算结果约为1000个动作。 以此作为分数计算速度 。 通常,它在每秒1k个评估动作与每秒500k个评估动作之间变化。
多线程求解只是将步骤的运动评估分配到多