drools 规则流_约束流–没有Drools规则语言的现代Java约束
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约束相关推荐
- 约束流–没有Drools规则语言的现代Java约束
传统上,要使用OptaPlanner进行扩展,您必须学习DRL. 不再. 借助受Java 8 Streams和SQL启发的新Constraints Streams API,您现在可以用Java (或K ...
- javaio流_万字长文+思维导图帮你梳理 Java IO 流,还学不会你来打我(值得收藏)...
前言 在上一篇的文章获取不错的浏览量后,继续加更的念头一直徘徊在心中,本来是想花段时间深入学习tomcat的,可是tomcat的源码中就有至关重要的NIO,于是得先整一下NIO,但是NIO的基础是BI ...
- drools动态配置规则_基于 Flink 和 Drools 的实时日志处理
背景 日志系统接入的日志种类多.格式复杂多样,主流的有以下几种日志: filebeat采集到的文本日志,格式多样 winbeat采集到的操作系统日志 设备上报到logstash的syslog日志 接入 ...
- Drools如何使用规则流bpmn2
最近项目用到了规则流踩了一些小坑,特以记录. 代码写好了再放到规则文件中,规则流最好一步一步画,因为错了就给你抛看不懂没意义的异常. 所有的包包括List这种都得引. 我自己也一知半解,本文都是一些小 ...
- SpringBoot2 整合 Drools规则引擎,实现高效的业务规则
本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...
- 【Drools一】值得打工人学习的规则引擎Drools
本文主要对Drools的使用业务场景做简单介绍. 规则引擎 规则引擎:全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System).规则引擎的主要思想是 ...
- java drools5_Java Drools5.1 规则流基础【示例】
一.问题描述 假设雇员 Employ 有: 学历信息 eduInfo , 简历信息 resume , 考核信息 annualExam 和奖惩信息 awardPunish : 要确定其: 基本工资 b ...
- adobe 书签怎么设置_让我们设置一些规则…没有Adobe Analytics处理规则
adobe 书签怎么设置 Originally published at Analyst Admin. 最初发布于Analyst Admin . In my experience working wi ...
- java 规则引擎_【java规则引擎】java规则引擎搭建开发环境(示例代码)
Drools and jBPM consist out of several projects:(Drools软件包提供的几个部分的功能) ------------------------------ ...
最新文章
- JavaScript获取浏览器、元素、屏幕的宽高尺寸
- C#字符格式化占位符
- PHP和MySQL处理树状、分级、无限分类、分层数据的方法
- Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
- office2010出现“此错误通常是由宏安全性设置造成的”的解决办法
- CMake笔记1 构建基本的项目
- sql server 约束 查找
- 人脸对齐(十五)--PIFA with a Single CNN
- 天正多条线段长度lisp下载_如何快速计算cad中多条多段线的总长
- Oracle之现有表上建新表、操作符、字符函数
- 如何处理条码打印机打出来是空白的故障
- Vue暴露的属性和方法
- 2018NOIp爆零记
- matlab中的灰色预测,灰色预测MATLAB程序
- 人类简史 十一章 帝国的愿景
- java换算当地时间_Java UTC时间与本地时间互相转换
- Web中html个人介绍代码,web开发工程师自我介绍示例
- 数据库操作(增删改查)sql语句
- 基于概率论的分类方法:朴素贝叶斯及CSDN_RSS源分析
- linux的内置的账户_Linux用户和用户配置文件(注意nobody用户)
热门文章
- CodeForces 1361E James and the Chase(dfs + 结论)
- P3100-[USACO14JAN]建造滑雪场【贪心,dp】
- P3435-[POI2006]OKR-Periods of Words【KMP】
- POJ3889-Fractal Streets【分形,递归,分治】
- 【数位DP】好数(jzoj 1521)
- 【动态规划】【递归】取数字问题 (ssl 1644)
- Codeforces 1005D Polycarp and Div 3
- 模拟退火求解TSP问题
- JS原型链与instanceof底层原理
- art-template入门(六)之解析规则