分数DRL:在OptaPlanner中更快,更轻松

对于OptaPlanner (= Drools Planner)6.0.0.Beta1,我已经用更优雅的ConstraintMatch系统替换了ConstraintOccurrence。 结果是您的DRL评分文件为:

  • 快多了
  • 更容易读写
  • 错误的发生率要低得多,因为它们使分数损坏变得更加困难

让我们先看一下结果,然后再看一下代码可读性的改进。

快点

“给我看基准!”

平均计算计数 (即OptaPlanner每秒计算的分数数)已急剧增加。

  • N个皇后:256个皇后的+ 39%计算数量
  • 云平衡:平均计算量为+ 27%
  • 车辆路线:平均+ 40%计算次数
  • 课程安排:平均+ 20%计算数量
  • 考试安排:平均+ 23%计算次数
  • 护士花名册:平均Calc计数+ 7%

但是,这不一定意味着结果会得到显着改善,尤其是如果旧结果已经(接近)最佳的话。 这意味着您可以在更少的时间内获得完全相同的结果 。 但是-与所有其他性能改进一样- 无法保证在同一时间显着改善结果。 向外扩展时确实有帮助。

  • 云平衡:5分钟内平均软得分+ 0.58%
  • 车辆路线:5分钟内平均+ 0.14%可行软评分
  • 课程安排:7分钟内平均+ 2.28%可行软评分
  • 考试安排:7分钟内平均考试软得分+ 0.53%

30分钟的车辆路线数据集中的几个已经在5分钟内得到了最佳求解,因此尽管车辆路线加快的速度很高,但它们拖累了平均值。 所有基准测试都使用完全相同的Drools和OptaPlanner版本,因此这些数字仅显示ConstraintMatch更改的改进。 6.0中还有其他一些改进。

平均值如何计算计数范围?

这是一些图表,将旧的ConstraintOccurrence与新的ConstraintMatch进行了比较。 新的ConstraintMatch的当前实现尚未完全优化,因此有时将其称为“慢速”模式(即使速度更快)。

CloudBalance:

车辆路线:

课程安排:

考试名册:

更轻松

“给我看代码!”

对于初学者,将删除accumulateHardScore和accumulateSoftScore规则。 更少的样板。 接下来,每个计分规则的RHS(= then side)都更简单:

之前:

rule "conflictingLecturesSameCourseInSamePeriod"when...theninsertLogical(new IntConstraintOccurrence("conflictingLecturesSameCourseInSamePeriod", ConstraintType.HARD,-1,$leftLecture, $rightLecture));end

后:

rule "conflictingLecturesSameCourseInSamePeriod"when...thenscoreHolder.addHardConstraintMatch(kcontext, -1);end

请注意,您不需要重复ruleName或原因(讲座)。 OptaPlanner通过kcontext变量自行计算。 Drools自动在RHS中公开kcontext变量,因此您不需要任何其他代码。 此外,受限的ConstraintType枚举已由特定于Score类型的方法代替,以允许OptaPlanner更好地支持多级得分类型,例如HardMediumSoftScore和BendableScore。 您也不再需要修改API来获取所有ConstraintOcurrence的列表:ConstraintMatch对象(及其每个约束的总数)可直接在ScoreDirector API上使用。

参考: DRL评分: Drools&jBPM博客上来自我们JCG合作伙伴 Geoffrey De-Smet的OptaPlanner更快,更轻松 。

翻译自: https://www.javacodegeeks.com/2013/04/score-drl-faster-and-easier-in-optaplanner.html

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

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

相关文章

STM32 环境搭建

从之前的51,到后来的AVR,再到现在的STM32,处理器的处理能力在不断的提高,我们也跟随着处理器一步一步的玩到了STM32 目前STM32的开发环境很多,常用的例如Keil,IAR等,但是这些软件都是收费的&…

mysql数据库工程师网易微专业_网易MySQL数据库工程师微专业学习笔记(五)

一、mysql数据库中的存储引擎mysql在创建数据表时可以通过engine关键字设置存储引擎的类型,也可以通过alter命令来修改表的存储引擎。可以通过show engines命令来查看当前mysql数据库支持的存储引擎的类型,一般场景的存储引擎有:InnoDB、MyIS…

Java并发编程笔记之ConcurrentLinkedQueue源码探究

JDK 中基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理剖析,ConcurrentLinkedQueue 内部是如何使用 CAS 非阻塞算法来保证多线程下入队出队操作的线程安全? ConcurrentLinkedQueue是线程安全的无界非阻塞队列,其底层数据结构是使用单向…

border三角形阴影(不规则图形阴影)和多重边框的制作

前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新! 1. border的组合写法 border:border-width border-style border-color; border-width:边框宽度&#xff0…

JDK 8 Javadoc调整了方法列表

自开始以来, Javadoc输出基本上是静态HTML,具有导航链接和外观的简单样式表样式。 Java SE 7很长时间以来就看到Javadoc输出默认外观的第一个重大变化 ,现在看来JDK 8将在生成的Javadoc输出上引入新的变化。 在本文中,我将通过JDK…

angularJS constant和value

angularJS可以通过constant(name,value)和value(name,value)对于创建服务也是很重要的。 相同点是:都可以接受两个参数,name和value。 区别: 1.constant(name,value)可以将一个已经存在的变量值注册为服务,并将其注入到应用的其他…

将JacpFX客户端与JSR 356 WebSockets一起使用

JSR 356 WebSockets是即将发布的JEE 7版本中令人兴奋的新功能之一,并且在其参考实现中包括Server-和Client API。 这使其非常适合在客户端与JavaFX集成。 JacpFX是JavaFX之上的RCP框架,它使用基于消息的方法与组件进行交互。 这种基于消息的方法使集成We…

《精通Spring4.X企业应用开发实战》读后感第七章(AOP概念)

转载于:https://www.cnblogs.com/Michael2397/p/8068486.html

Material使用04 MdCardModule和MdButtonModule综合运用

设计需求:设计一个登陆页面 1 模块导入 1.1 将MdCardModule和MdButtonModule模块导入到共享模块中 import { NgModule } from angular/core; import { CommonModule } from angular/common; import { MdSidenavModule, MdToolbarModule,MdIconModule,MdButtonModule…

python实现bp神经网络对csv文件进行数据预测

参考资源: sklearn库 bp神经网络[从原理到代码一篇搞定](2)_sklearn 神经网络-CSDN博客 十分钟上手sklearn:安装,获取数据,数据预处理 - 知乎 (zhihu.com) 一个实例讲解如何使用BP神经网络(附代码) - 知…

Spring MVC:表单处理卷。 4 –单选按钮

在软件开发领域,单选按钮是图形用户界面的重要组成部分。 Spring MVC标签库为此表单元素提供了特殊标签。 更确切地说,有两个标签用于此目的:单选按钮,单选按钮。 两者对于特定任务都是有用的。 如您所知,我将在帖子中…

点击时候确定某个元素 js_某空气质量监测平台 JS反爬

目标:中国空气质量在线监测分析平台|城市分析 参考CSDN中文章,记录一下学习过程通过切换城市,页面数据是通过 Ajax 加载的,数据接口:https://www.aqistudy.cn/apinew/aqistudyapi.php请求的POST Data、返回的数据都被加…

HTML 部分常用属性、组成属性|...超链接、路径、锚点、列表、滚动、URL编码、表格、表单、GET和POST

URL地址 就是我们所说的网址:www.jd.com 浏览器内核,渲染引擎 Ie内核:triteent 谷歌/欧鹏:blink 火狐:gecko 苹果:webkit 渲染引擎是出现兼容性的根本问题 -html概念:hyper Text Markup Languag…

Spring @Value取值为null或@Autowired注入失败

Value 用于注入.properties文件中定义的内容 Autowired 用于装配bean 用法都很简单,很直接,但是稍不注意就会出错。下面就来说说我遇到的问题。 前两天在项目中遇到了一个问题,大致描述就是我写了如下一个类(只列出关键代码&#…

mysql 部门表_MySQL高级

本文大纲环境win10-64MySQL Community Server 5.7.1mysqld –version可查看版本官方文档SQL执行顺序手写顺序我们可以将手写SQL时遵循的格式归结如下&#xff1a;select distinct from join on wheregroup byhavingorder bylimit <offset>,<rows>distinct&…

使用Apache Camel发布/订阅模式

发布/订阅是一种简单的消息传递模式&#xff0c;其中&#xff0c;发布者将消息发送到某个频道&#xff0c;而无需知道谁将接收消息。 然后&#xff0c;通道负责将消息的副本传递给每个订户。 此消息传递模型允许创建松耦合和可伸缩的系统。 这是一种非常常见的消息传递模式&am…

移动端(H5)弹框组件--简单--实用--不依赖jQuery

俗话说的好&#xff0c;框架是服务与大家的&#xff0c;包含的功能比较多&#xff0c;代码多。在现在追求速度的年代。应该根据自己的需求去封装自己所需要的组件。 下边就给大家介绍一下自己封装的一个小弹框组件&#xff0c;不依赖与jQuery&#xff0c;代码少&#xff0c;适…

c++ for循环 流程图_python 零基础必知--条件控制与循环语句

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理本文章来自腾讯云 作者&#xff1a;somenzz如果没有 if 语句和循环语句&#xff0c;请问你怎么编程&#xff1f;Python 中的条件控制和循环语句都非常简单&…

前端总结·基础篇·CSS(二)视觉

前端总结系列 前端总结基础篇CSS&#xff08;一&#xff09;布局前端总结基础篇CSS&#xff08;二&#xff09;视觉前端总结基础篇CSS&#xff08;三&#xff09;补充前端总结基础篇JS&#xff08;一&#xff09;原型、原型链、构造函数和字符串&#xff08;String&#xff09;…

【kindle笔记】之 《浪潮之巅》- 2018-1-

《浪潮之巅》 这本书推荐自最爱的政治课老师。 政治课老师张巍老师。我会一直记得你的。 以这样的身份来到这个学校&#xff0c;他人的质疑&#xff0c;自己的忐忑&#xff0c;老板的不公。犹犹豫豫谨小慎微地前进。 第一次听到这样的话是从您口中&#xff1a; 在座的诸位&…