java - Drools 硬约束实现

标签 java constraints drools optaplanner

尝试使用 Optaplanner 创建用于员工(护士)排类的 Java Web 应用程序。我想做出这样的硬约束:

//护士只能上夜类,即连续两类可以是N-X或N-N 规则“nightOrOffAfterNightShift” 什么时候 移位赋值( $employee:员工,员工!= null, $shiftDate : 类次日期, $lastShift :移位, $shiftType : 移位类型 ) 移位赋值( 雇员==$雇员, shiftDate.isAfter($shiftDate) == true ) 然后 if(shiftType != $shiftType && shift != null) ScoreHolder.addHardConstraintMatch(kcontext, -1); 结尾 我没有 Drools 经验,这有效吗?

最佳答案

第一关 - 我不是规则专家(最近正在学习其中的一些内容)

不认为你需要 $lastShift :shift, 您将使用规则将 2 个 ShiftAssignment 链接在一起

我认为你应该使用顺序 ID 来检查连续类次 目前我认为您的规则将在 $shiftDate 之后触发所有类次 我认为你不想这样做

我认为您的 THEN 部分不需要 if 子句 这应该是您在“何时”部分进行条件检查的一部分 所以 then 部分应该包含 将新知识插入规则工作内存中 修改/删除规则工作内存中当前的事实 打印语句——如果你需要它们(实际上不推荐——使用changeListeners)

if(shiftType != $shiftType && shift != null) 不清楚您认为 shiftType 来自 2 个 ShiftAssignment 对象中的哪一个

规则“nightOrOffAfterNightShift” 什么时候 sAn : ShiftAssignment( $idn : ID $employee_n:员工, $employee_n!=空, $shift:移位, $shift!= null, $sTn :换档类型 ) sAn_1 : ShiftAssignment( $idn_1:ID $idn == $idn_1 + 1, $employee_n_1:员工, $employee_n_1!= null, $employee_n_1 == $employee_n, $sTn_1 :换档类型, $sT != $sTn_1 ) 然后 ????现在你需要在这里做什么 结束

你能分享一下你的 ShiftAssignment 类吗

我认为以上发现 移动 idn 和 idn_1 其中 同一个员工 具有不同的shiftType

希望这接近您想要的

关于java - Drools 硬约束实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60877281/

相关文章:

java - 更改WebSphere 5.1的InstalledApps目录中的类文件

java - TomCat:使用类路径打开文件

c# - 为什么在通用参数约束中强制执行某些顺序?

swift - 在具有约束的 UIView 中移动 UITextField

Drools 存在与 "normal"模式

java - 使用 Maven 进行 JUnit 测试

java - 在服务器端解密加密消息

sql - Mysql中的异或约束

java - 如何在运行时构建 kmodule.xml 以更新 drl 文件中所做的更改

java - JAAS/JAAC、DROOLS 或自定义