drools 规则流

传统上,要使用OptaPlanner进行扩展,您必须学习DRL。 不再。 借助受Java 8 Streams和SQL启发的新Constraints Streams API,您现在可以用Java (或Kotlin或Scala) 编写约束,并且仍然可以从增量计算中受益。

在下面,约束流(CS)仍使用强大的Drools引擎。 我们也仍然完全支持得分DRL。 它们被弃用。

让我们从一个例子开始。 在护士排班中,为了避免将班次分配给员工Ann ,您可以在DRL中编写以下约束:

 rule "Don't assign Ann" when Shift(getEmployee().getName() == "Ann" ) then scoreHolder.addSoftConstraintMatch(kcontext, - 1 );  end 

这在使用约束流的Java中是相同的约束:

 Constraint constraint = constraintFactory .from(Shift. class ) .filter(shift -> shift.getEmployee().getName().equals( "Ann" )) .penalize( "Don't assign Ann" , HardSoftScore.ONE_SOFT); 

如果您熟悉SQL或Java 8流,则应该看起来很熟悉。 给定一个可能的解决方案,该解决方案具有四个班次(其中两个班次分配给Ann ),这些班次流经约束流,如下所示:


这种写约束的新方法有几个好处:

增量计算

首先,与EasyScoreCalculator不同,约束流仍然像DRL一样应用增量分数计算来进行横向扩展。 例如,当一个移动将雇员换两班时,仅计算增量。 这是巨大的可扩展性收益:


索引编制

JOIN多个类型时,就像SQL JOIN运算符一样,约束流在索引上应用哈希查找以更好地扩展:


IDE支持

因为ConstraintsStreams是用Java语言编写的,所以它们背负着非常强大的工具支持。

代码突出显示,代码完成和调试工作正常:

代码突出显示

IntelliJ IDEA Ultimate中的DRL代码:


对于相同的约束,在IntelliJ IDEA Ultimate中使用约束流的Java代码:


代码完成

约束流的代码完成:


当然,所有API方法都具有Javadocs。

调试

在ConstraintStream的filter()添加一个断点:


在调试时诊断问题:


Java语法

用约束流用Java编写的约束,无论好坏,都遵循Java语言规范(JLS)。 当使用来自Kotlin或Scala的约束流时,适用类似的逻辑。

在DRL和约束流之间迁移时,请注意DRL和Java之间的一些区别:

  • DRL的==运算符在Java中转换为equals()
  • 除了getter,DRL还允许MVEL表达式转换为Java中的getter。

例如,此DRL的name ==

 rule "Don't assign Ann" when Employee(name == "Ann" ) then ...  end 

但是,对于完全相同的约束,Java变量具有getName()equals()

 constraintFactory.from(Employee. class ) .filter(employee -> employee.getName().equals( "Ann" )) .penalize( "Don't assign Ann" , ...); 

进阶功能

Constraint Streams API允许我们添加语法糖和强大的新概念,这些概念专门针对帮助您构建复杂的约束而量身定制。

为了突出其中之一,让我们看一下功能强大的groupBy方法:


与SQL GROUP BY运算符或Java 8 Stream Collector相似,它支持sum()count()countDistinct()min()max()toList()甚至自定义函数,同样也不会损失增量分数计算。

约束流的未来工作

首先,非常感谢LukášPetrovický在Constraints Streams上所做的所有工作!

但这仅仅是开始。 我们设想了更高级的功能,例如负载平衡/公平方法,以使此类约束更易于实现。

目前,我们的首要任务是简化对隔离的单元测试的单元。 考虑测试驱动设计。 敬请关注!

翻译自: https://www.javacodegeeks.com/2020/04/constraint-streams-modern-java-constraints-without-the-drools-rule-language.html

drools 规则流

drools 规则流_约束流–没有Drools规则语言的现代Java约束相关推荐

  1. 约束流–没有Drools规则语言的现代Java约束

    传统上,要使用OptaPlanner进行扩展,您必须学习DRL. 不再. 借助受Java 8 Streams和SQL启发的新Constraints Streams API,您现在可以用Java (或K ...

  2. javaio流_万字长文+思维导图帮你梳理 Java IO 流,还学不会你来打我(值得收藏)...

    前言 在上一篇的文章获取不错的浏览量后,继续加更的念头一直徘徊在心中,本来是想花段时间深入学习tomcat的,可是tomcat的源码中就有至关重要的NIO,于是得先整一下NIO,但是NIO的基础是BI ...

  3. drools动态配置规则_基于 Flink 和 Drools 的实时日志处理

    背景 日志系统接入的日志种类多.格式复杂多样,主流的有以下几种日志: filebeat采集到的文本日志,格式多样 winbeat采集到的操作系统日志 设备上报到logstash的syslog日志 接入 ...

  4. Drools如何使用规则流bpmn2

    最近项目用到了规则流踩了一些小坑,特以记录. 代码写好了再放到规则文件中,规则流最好一步一步画,因为错了就给你抛看不懂没意义的异常. 所有的包包括List这种都得引. 我自己也一知半解,本文都是一些小 ...

  5. SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

    本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...

  6. 【Drools一】值得打工人学习的规则引擎Drools

    本文主要对Drools的使用业务场景做简单介绍. 规则引擎 规则引擎:全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System).规则引擎的主要思想是 ...

  7. java drools5_Java Drools5.1 规则流基础【示例】

    一.问题描述 假设雇员 Employ 有: 学历信息 eduInfo , 简历信息 resume , 考核信息 annualExam 和奖惩信息  awardPunish : 要确定其: 基本工资 b ...

  8. adobe 书签怎么设置_让我们设置一些规则…没有Adobe Analytics处理规则

    adobe 书签怎么设置 Originally published at Analyst Admin. 最初发布于Analyst Admin . In my experience working wi ...

  9. java 规则引擎_【java规则引擎】java规则引擎搭建开发环境(示例代码)

    Drools and jBPM consist out of several projects:(Drools软件包提供的几个部分的功能) ------------------------------ ...

最新文章

  1. JavaScript获取浏览器、元素、屏幕的宽高尺寸
  2. C#字符格式化占位符
  3. PHP和MySQL处理树状、分级、无限分类、分层数据的方法
  4. Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
  5. office2010出现“此错误通常是由宏安全性设置造成的”的解决办法
  6. CMake笔记1 构建基本的项目
  7. sql server 约束 查找
  8. 人脸对齐(十五)--PIFA with a Single CNN
  9. 天正多条线段长度lisp下载_如何快速计算cad中多条多段线的总长
  10. Oracle之现有表上建新表、操作符、字符函数
  11. 如何处理条码打印机打出来是空白的故障
  12. Vue暴露的属性和方法
  13. 2018NOIp爆零记
  14. matlab中的灰色预测,灰色预测MATLAB程序
  15. 人类简史 十一章 帝国的愿景
  16. java换算当地时间_Java UTC时间与本地时间互相转换
  17. Web中html个人介绍代码,web开发工程师自我介绍示例
  18. 数据库操作(增删改查)sql语句
  19. 基于概率论的分类方法:朴素贝叶斯及CSDN_RSS源分析
  20. linux的内置的账户_Linux用户和用户配置文件(注意nobody用户)

热门文章

  1. CodeForces 1361E James and the Chase(dfs + 结论)
  2. P3100-[USACO14JAN]建造滑雪场【贪心,dp】
  3. P3435-[POI2006]OKR-Periods of Words【KMP】
  4. POJ3889-Fractal Streets【分形,递归,分治】
  5. 【数位DP】好数(jzoj 1521)
  6. 【动态规划】【递归】取数字问题 (ssl 1644)
  7. Codeforces 1005D Polycarp and Div 3
  8. 模拟退火求解TSP问题
  9. JS原型链与instanceof底层原理
  10. art-template入门(六)之解析规则