【教程13】OptaPlaner Partitioned Search

OptaPlanner的Partitioned Search适用于大型数据集,通过多线程提高在多核机器上的性能。该算法将解决方案分割为部分,分别解决以加速初始解决方案的寻找,但可能导致次优解。配置包括@PlanningId注解、Runnable part thread limit等。SolutionPartitioner接口允许自定义分区策略。runnablePartThreadLimit参数控制并发线程数,以防止CPU资源过度消耗。
摘要由CSDN通过智能技术生成

【教程13】OptaPlaner Partitioned Search

1. 算法描述

在处理大型数据集(通常超过5000个规划实体)时,将其分割成较小的部分并分别解决往往更加高效。Partitioned Search是多线程的,因此在多核机器上可以提供性能提升,因为CPU利用率更高。此外,即使只使用一个CPU,它也可以更快地找到初始解决方案,因为分区构建启发式算法的搜索空间远远小于非分区的变体。

然而,分区确实会导致次优的结果,即使分块被优化求解,如下所示:

mapReduceIsTerribleForTsp
它实际上是以短期解决方案质量的损失来换取长期的损失。补偿此损失的一种方法是在分区搜索阶段之后运行非分区的局部搜索。

并非所有的用例都可以进行分区分区仅适用于规划实体和值范围可以在n个分区中分割,而且没有约束条件跨越分区边界的用例

2. 配置

最简单的配置:

<partitionedSearch>
    <solutionPartitionerClass>org.optaplanner.examples.cloudbalancing.optional.partitioner.CloudBalancePartitioner</solutionPartitionerClass>
</partitionedSearch>

在每个规划实体类和规划值类上添加@PlanningId注解。有几种方法可以对解决方案进行分区。

高级配置:

<partitionedSearch>
    ...
    <solutionPartitionerClass>org.optaplanner.examples.cloudbalancing.optional.partitioner.CloudBalancePartitioner</solutionPartitionerClass>
    <runnablePartThreadLimit>4</runnablePartThreadLimit>

    <constructionHeuristic>...</constructionHeuristic>
    <localSearch>...</localSearch>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值