美文网首页
OptaPlanner终于支持多线程并行运行 - Multith

OptaPlanner终于支持多线程并行运行 - Multith

作者: KentZhang_APS | 来源:发表于2018-10-12 00:15 被阅读0次

   OptaPlanner 7.9.0.Final之前,启动引擎开始对一个Problem进行规划的时候,只能是单线程进行的。也就是说,当引擎对每一个possible solution进行分数计算的过程中,细化到每个步骤(Caculation),都只能排队在同一个线程中依次计算,不管你的问题是否存在并行计算的可能。很显示这种运算方式应用于一些可并行计划的场景下,是相当不利的。就算是一些在业务逻辑上无法实现并行运算的情况,若在引擎自行调用指定的算法进行寻优时,若可以将每个Step,甚至每个Move的运行操作,适当地分配到不同的线程中执行,那么在多核CPU的环境下,无疑能大大提升planning的性能,从而在规定的时间内行到更优的效果。毕竟对于NP-Hard/NP-Complete问题,除了比较算法优劣外,另一个维度对比的就是运算量。

       而在7.9.0.Final版本中,发布了并行计算功能 - Multithreaded incremental solving. 此功能只需要在配置文档中指定对应的并行线程数(可指定数量,也可由系统自行决定线程数),在启动Planning后,每一个Step中的各个Move即有可能被分配于不同的线程进行计算。我在我的项目中启用了此功能,试用过各种类型的项目,其性能的提升基本上在30% - 150%之间。对于运算量巨大的情况(约束多且复杂、问题规划大),确实能有不少的提升。

此功能在7.12.0. Final版本中,也有所优化,主要是针对Chained Throudth Time模式下的优化。

关于并行计算功能的更新信息如下:

New and noteworthy: Engine 7.9.0.Final

Multithreaded incremental solving

OptaPlanner can now solve one dataset (without partitioning) with multiple threads to take advantage of multiple CPU cores.

Even with just a few CPU cores, it triples the score calculation speed:

应用多线程特性后的运行对比

Multithreaded incremental solving is easy to activate. Just add a<moveThreadCount>line in your solver config:

<solver>

  <moveThreadCount>4</moveThreadCount>

  ...

</solver>

This basically donates 4 extra CPU cores to the solver. UseAUTOto have OptaPlanner deduce it automatically. Optionally, specify a<threadFactoryClass>for environments that don’t like arbitrary thread creation.

如需了解更多关于OptaPlanner的应用,请发电邮致:kentbill@gmail.com

或到讨论组发表你的意见:https://groups.google.com/forum/#!forum/optaplanner-cn

若有需要可添加本人微信(13631823503)或QQ(12977379)实时沟通,但因本人日常工作繁忙,通过微信,QQ等工具可能无法深入沟通,较复杂的问题,建议以邮件或讨论组方式提出。(讨论组属于google邮件列表,国内网络可能较难访问,需自行解决)

相关文章

  • OptaPlanner终于支持多线程并行运行 - Multith

    OptaPlanner7.9.0.Final之前,启动引擎开始对一个Problem进行规划的时候,只能是单线程进...

  • go 的并发机制

    并发与并行的概念 ① 多线程程序在单核cpu上运行就是并发;② 多线程程序在多核cpu上运行就是并行; gorou...

  • python线程的实现,线程池

    python通过标准库threading实现多线程的运行。程序的运行总要考虑并发,并行数。在多线程程序中为了确保程...

  • Java多线程知识点汇总

    Java 多线程 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程 并行与并发:并行:多个cpu实例或者...

  • C#—多线程的使用

    多线程 1.C#通过多线程支持并行执行的代码。一个线程是一个独立执行的路径,可以同时与其他线程一起运行。 2.一个...

  • StreamSets:多线程pipelines

    一.Overview 多线程pipeline是支持并行执行的origin的pipeline,支持一个pipe...

  • 待读博客集

    计划阅读:坂本一树splhack《Objective-C高级编程 iOS与OS X多线程和》Pro multith...

  • 多线程面试题高级

    1、首先认识清楚,多线程分为:并行和串行,,并行和串行又可以包括同步线程和异步线程。GCD仅仅支持FIFO(先入先...

  • Java 学习笔记(12)——多线程

    Java内部提供了针对多线程的支持,线程是CPU执行的最小单位,在多核CPU中使用多线程,能够做到多个任务并行执行...

  • Java8使用并行流(ParallelStream)注意事项

    Java8并行流ParallelStream和Stream的区别就是支持并行执行,提高程序运行效率。但是如果使用不...

网友评论

      本文标题:OptaPlanner终于支持多线程并行运行 - Multith

      本文链接:https://www.haomeiwen.com/subject/rtxwaftx.html