分数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
            ...
        then
            insertLogical(new IntConstraintOccurrence("conflictingLecturesSameCourseInSamePeriod", ConstraintType.HARD,
                    -1,
                    $leftLecture, $rightLecture));
    end
后:
rule "conflictingLecturesSameCourseInSamePeriod"
        when
            ...
        then
            scoreHolder.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值