Optaplanner终于支持多线程并行运行 - Multithreaded incremental solving

  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. Use AUTO to have OptaPlanner deduce it automatically. Optionally, specify a <threadFactoryClass> for environments that don’t like arbitrary thread creation.

对于Optaplanner有任何疑问,可以通过邮件将问题发到我邮件,我将及时处理。通过即时通讯工具,我确实没办法即时处理,导致无意忽略了不少信息。

[email protected] 或 [email protected]

原文地址:https://www.cnblogs.com/kentzhang/p/9775876.html

时间: 2024-08-02 07:09:35

Optaplanner终于支持多线程并行运行 - Multithreaded incremental solving的相关文章

C++ boost库无锁队列多线程并行测试与编译方法

阅读了网络中关于Boost库无锁队列的源代码,但却缺少编译方法.经过测试,确定了ubuntu 14.04中编译boost库的方法,特做记录. 无锁(free-lock)是实现高性能多线程并发编程的重要技术. 作为C++11 STL参考实现的boost库,不仅支持11标准,而且做了许多扩展,掌握其使用方法,对于提高代码质量,尤其重要. 以其多线程并行无锁队列为例,结合代码和说明,演示了无锁boost库的使用和编译方法. 代码及说明如下: //source: boost_queue.cpp //目的

发布支持多线程的PowerShell模块 &mdash;&mdash; MultiThreadTaskRunner

应用场景 多线程在需要批量处理一些任务的时候相当有用,也更加有利于充分利用现有计算机的能力.所有主流的开发语言都支持多线程. 默认情况下,PowerShell作为一个脚本语言,是不支持多线程操作的,虽然有所谓的后台任务,但实际上控制起来相当麻烦. 解决方案 我很喜欢PowerShell,所以为此专门写了一个自定义的模块,来实现多线程的功能.该模块使用C#编写,源代码可以在下面的地址访问到 https://github.com/chenxizhang/MultiThreadTaskRunner 与

php不支持多线程怎么办

PHP 默认并不支持多线程,要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编译 PHP 时使用线程安全方式. 线程安全 多线程是让程序变得不安分的一个因素,在使用多线程之前,首先要考虑线程安全问题: 线程安全:线程安全是编程中的术语,指某个函数.函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成. 在传统多线程中,由于多个线程共享变量,所

监控之cacti的安装部署(监控本机及其他主机+支持多线程+命令行监控)

主机环境   redhat6.5 64位 实验环境   服务端1 ip 172.25.25.1            服务端2 ip 172.25.25.2 安装包     cacti-0.8.8h.tar.gz      php-snmp-5.3.3-26.el6.x86_64.rpm cacti-spine-0.8.8g.tar.gz 防火墙状态:关闭 Selinux状态:Disabled 1.配置安装cacti及测试 A)配置安装cacti [[email protected] Asia]

ThreadSafeClientConnManager用来支持多线程的使用http client

ThreadSafeClientConnManager用来支持多线程的使用http client import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.Defau

java8新特性(六):Stream多线程并行数据处理

转:http://blog.csdn.net/sunjin9418/article/details/53143588 将一个顺序执行的流转变成一个并发的流只要调用 parallel()方法 public static long parallelSum(long n){    return Stream.iterate(1L, i -> i +1).limit(n).parallel().reduce(0L,Long::sum); } 并行流就是一个把内容分成多个数据块,并用不不同的线程分别处理每

微信公众平台改版 终于支持图文消息链接了

微信公众平台发布更新了,终于允许在图文消息中加入跳转链接,但仅针对开通了微信支付的公众号,开通微信支付应该不算难,大伙赶紧去开通吧.本次微信公众平台改版升级还新增开发者中心.界面扁平化.改善用户体验等,以下是微信团队的公告: 微信公众平台改版说明 1. 允许在图文消息中加入跳转链接 对开通了微信支付的公众号,允许在图文消息中加入跳转链接 2. 将服务中心升级为功能插件 每个公众号都可以在添加功能插件页面,看到该帐号能申请的所有功能. 3. 商户功能改名为微信支付 为便于企业或商家认知及申请微信支

新版微信终于支持消息撤回了 微信零钱也能转账了[微信5.3.1.16更新]

新版微信5.3.1.16于22日正式上线,支持用户撤回两分钟内发出的最后一条消息,这次总算实现了,以后打错字不用拍大腿了:同时“我的钱包”功能开始支持用户支付和转账.其他更新包括给朋友添加标签方便分类和查找.聊天收到的图片在wifi下自动下载等功能. 在消息撤回方面,用户长按发出的消息(包括图片),在多选中选择撤回,则能撤回两分钟内发送的消息,超过两分钟提示不能撤销:在“我的钱包”功能中,用户可以管理钱包中的微信零钱,进行直接支付和向朋友转账,类似于支付宝的功能.不过,消息撤回只支持手机端,PC

Azure终于支持大容量虚拟机了-最高32核,448G内存

Azure终于支持大容量虚拟机了-最高32核,448G内存 最近微软Azure虚拟机旗下的大容量G系列虚拟机通用版本正式上线.G系列虚拟机方案提供公有云领域最大的内存容量.最强处理能力以及空间可观的本地SSD存储资源. G系列虚拟机采用由最新英特尔至强E5 v3系列处理器提供的最高32个虚拟CPU.448 GB内存以及6.59 TB本地SSD存储空间.如此庞大的内存容量将大大加快关键性业务应用的部署速度,其中包括以SQL Server.MySQL与大型NoSQL为代表的大规模关系型数据库,以及以