<solver>
<moveThreadCount>4</moveThreadCount> ... </solver>
Optaplanner 7.9.0.Final以前,启动引擎开始对一个Problem进行规划的时候,只能是单线程进行的。也就是说,当引擎对每个possible solution进行分数计算的过程当中,细化到每一个步骤(Caculation),都只能排队在同一个线程中依次计算,无论你的问题是否存在并行计算的可能。很显示这种运算方式应用于一些可并行计划的场景下,是至关不利的。就算是一些在业务逻辑上没法实现并行运算的状况,若在引擎自行调用指定的算法进行寻优时,若能够将每一个Step,甚至每一个Move的运行操做,适当地分配到不一样的线程中执行,那么在多核CPU的环境下,无疑能大大提高planning的性能,从而在规定的时间内行到更优的效果。毕竟对于NP-Hard/NP-Complete问题,除了比较算法优劣外,另外一个维度对比的就是运算量。html
而在7.9.0.Final版本中,发布了并行计算功能 - Multithreaded incremental solving. 此功能只须要在配置文档中指定对应的并行线程数(可指定数量,也可由系统自行决定线程数),在启动Planning后,每个Step中的各个Move即有可能被分配于不一样的线程进行计算。我在个人项目中启用了此功能,试用过各类类型的项目,其性能的提高基本上在30% - 150%之间。对于运算量巨大的状况(约束多且复杂、问题规划大),确实能有很多的提高。java
此功能在7.12.0. Final版本中,也有所优化,主要是针对Chained Throudth Time模式下的优化。算法
关于并行计算功能的更新信息以下:微信
New and noteworthy: Engine 7.9.0.Final网络
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. Use AUTO
to have OptaPlanner deduce it automatically. Optionally, specify a <threadFactoryClass>
for environments that don’t like arbitrary thread creation.google
本系列文章在公众号不定时连载,请关注公众号(让APS成为可能)及时接收,二维码:spa
如需了解更多关于Optaplanner的应用,请发电邮致:kentbill@gmail.com
或到讨论组发表你的意见:https://groups.google.com/forum/#!forum/optaplanner-cn
如有须要可添加本人微信(13631823503)或QQ(12977379)实时沟通,但因本人平常工做繁忙,经过微信,QQ等工具可能没法深刻沟通,较复杂的问题,建议以邮件或讨论组方式提出。(讨论组属于google邮件列表,国内网络可能较难访问,需自行解决)