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:

searchTableOfContents

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有任何疑问,可以通过邮件将问题发到我邮件,我将及时处理。通过即时通讯工具,我确实没办法即时处理,导致无意忽略了不少信息。

12977379@qq.com 或 kentbill@gmail.com

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python棋盘格_干货必看 | Python的turtle库之经典棋盘格

国际棋盘格是一个由9横9纵的线组成的格子正方形&#xff0c;用Python的turtle库进行绘制的时候&#xff0c;先做9横9纵的线&#xff0c;再填上灰色小正方形&#xff0c;这就可以完成一个棋盘格了&#xff0c;下面是具体的操作步骤。(一)整体代码1、import turtleimport turtle2…

ResourceManager中的Resource Estimator框架介绍与算法剖析

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由宋超发表于云社区专栏 本文首先介绍了Hadoop中的ResourceManager中的estimator service的框架与运行流程&#xff0c;然后对其中用到的资源估算算法进行了原理剖析。 一. Resource Estimator Service…

几十款 WPF 控件 - UI 库,总有一款适合你

几十款 WPF 控件 - UI 库&#xff0c;总有一款适合你独立观察员 2022 年 10 月 16 日引言众所周知&#xff0c;使用 WPF 框架能够开发出功能强大、界面美观的桌面端应用。能够达到这个效果&#xff0c;各种 WPF 的控件库、UI 库功不可没。所以&#xff0c;想着能不能收集一下目…

Android Studio导出jar包

Eclipse直接有个Export&#xff0c;可以直接导出jar包。AS相对Eclipse变化很大&#xff0c;编译脚本变成了Gradle&#xff0c;各种导包操作都有差异。 下面是AS导出jar的过程: 第一步&#xff0c;修改app下的build.grade。 apply plugin: com.android.application修改为 apply …

GitHub Actions构建镜像并部署服务

目的通过GitHub的Actions来(白嫖)部署.Net服务到阿里云服务器。环境准备需要一个阿里云服务器并且该服务器还安装了docker环境&#xff0c;如果环境安装不清楚可以查看之前的文章。创建镜像仓库在阿里云的容器镜像服务中&#xff0c;创建一个镜像仓库用来存储我们测试的镜像&am…

20165232 缓冲区溢出漏洞实验

缓冲区溢出漏洞实验 实验准备 实验环境需要32位的Linux系统&#xff0c;需要下载安装一些用于编译 32 位 C 程序的软件包&#xff0c;代码如下&#xff1a; $ sudo apt-get update$ sudo apt-get install -y lib32z1 libc6-dev-i386$ sudo apt-get install -y lib32readline-gp…

Atcoder 084D - Small Multiple(最短路径+思维)

分析&#xff1a;这题脑洞新奇...居然是最短路...将0到k-1看做k个点&#xff0c;第t个点向(10*t0,1,2...,9)%k连一条长度为0,,1,2,..,9的边&#xff0c;然后枚举s1,2,...,9,算出所有从s到0的最短路&#xff0c;答案就是最短路s的最小值。 1 #include<iostream>2 #include…

Blazor学习之旅(5)数据绑定

【Blazor】| 总结/Edison Zhou大家好&#xff0c;我是Edison。最近在学习Blazor做全栈开发&#xff0c;因此根据老习惯&#xff0c;我会将我的学习过程记录下来&#xff0c;一来体系化整理&#xff0c;二来作为笔记供将来翻看。本篇&#xff0c;我们来了解下在Blazor中数据是如…

chrome开启touch屏幕点击事件

2019独角兽企业重金招聘Python工程师标准>>> 在chrome浏览器输入 chrome://flags/#top-chrome-md 找到属性 UI Layout for the browsers top chrome 选择Hybrid&#xff0c;重启chrome&#xff0c;如下图&#xff1a; 转载于:https://my.oschina.net/swingcoder/blo…

Linux服务器重启后crs_stat -t 命令无法正常使用以及解决思路

前提&#xff1a;在Linux系统中安装ASM&#xff0c;安装完ASM和Oracle数据库时都是正常使用的&#xff0c;但在重启服务器后Oracle相关命令不识别。1、[gridudevasm:/home/grid]$crsctl status res -t -bash: crsctl: command not found2、查看环境变量是否正常&#xff0c;命令…

python 打开某个exe_python定时检查启动某个exe程序(如果exe挂了)

详见代码如下&#xff1a;import threadingimport timeimport osimport subprocessdef get_process_count(imagename):p os.popen(tasklist /FI "IMAGENAME eq %s" % imagename)return p.read().count(imagename)def timer_start():t threading.Timer(120,watch_fu…

Google发布了Tensorflow Lite,用于移动电话的神经网络库

Google的工程副总Dave Burke宣布了一个专门针对移动电话而优化的Tensorflow新版本。\\这一新的软件库称为Tensorflow Lite&#xff0c;允许开发人员在用户的移动电话上实时地运行人工智能应用。据Burke介绍&#xff0c;该库在设计上力求更快和更小的同时&#xff0c;依然支持最…

4. ZooKeeper 基本操作

ZooKeeper的数据模型及其API支持以下九个基本操作&#xff1a; 操作描述create在ZooKeeper命名空间的指定路径中创建一个znodedelete从ZooKeeper命名空间的指定路径中删除一个znodeexists检查路径中是否存在znodegetChildren获取znode的子节点列表getData获取与znode相关的数据…

微软正式发布Azure Functions 2.0

微软正式发布Azure Functions的第二个版本&#xff0c;这是一个事件驱动的、按需计算的Azure平台服务。与版本1相比&#xff0c;新版本的Azure Functions包含的多项特性使开发人员可以更轻松地构建可伸缩的无服务器应用程序。2016年初&#xff0c;微软首次推出Azure Functions预…

CSS-下拉导航条

Web网站中很多时候都会出现下拉导航条&#xff0c;有的是通过CSS实现&#xff0c;有的通过JavaScript插件实现&#xff0c;其实CSS实现起来比较简单,先来看一个简版的下拉菜单: Html代码通过ul列表实现: 123456789101112131415161718<ul class"nav"> <li>…

#UnityTips# 2017.11.14

hi&#xff0c;all。最近比较忙&#xff0c;所以更新也比较慢了。 今天就来和大家分享一个小Tip&#xff0c;它是关于UGUI的坑的。 使用过UGUI的朋友们都知道&#xff0c;Canvas的渲染方式有三种&#xff1a; Screen Space OverlayScreen Space CameraWorld Space其中后两者都需…

java 复制excel_Java 复制Excel工作表

本文归纳了关于Java如何复制Excel工作表的方法&#xff0c;按不同复制需求&#xff0c;可分为&#xff1a;1. 复制工作表1.1 在同一个工作簿内复制工作表1.2 在不同工作簿间复制工作表2. 复制指定单元格数据对于复制方法copy()&#xff0c;这里简单整理了一个表格&#xff0c;其…

Blazor学习之旅(4)数据共享

【Blazor】| 总结/Edison Zhou大家好&#xff0c;我是Edison。前几天没有发布本篇就发布了第五篇&#xff0c;属于操作失误哈&#xff0c;这次把第四篇补上&#xff01;本篇&#xff0c;我们来了解下在Blazor中数据是如何共享的&#xff0c;组件之间又该如何传递参数。关于Blaz…

# 20172307 2018-2019-1 《程序设计与数据结构》第5周学习总结

20172307 2018-2019-1 《程序设计与数据结构》第5周学习总结 教材学习内容总结 查找 1.线性查找&#xff1a;从该列表头开始依次比较每一个值&#xff0c;直至找到该目标元素。2.二分查找法&#xff1a;二分查找是从排序列表的中间开始查找&#xff0c;如果没有在那个中间元素则…

IBM 的大型机 z Systems 引入 Go 语言

据 cbronline 报道&#xff0c;IBM 正把 Go 语言运用到旗下的大型机上。 IBM 将开源的 Go 语言引入到 z Systems 大型机后&#xff0c;可以给用户多一个的选择&#xff0c;即在大型机上使用 Linux 或基于 Go 的应用&#xff0c;同时也使大型机更加灵活。Go 语言在高并发的网络应…