集合中不存在口水

标签 drools optaplanner drools-planner

如果集合没有特定对象,我需要触发规则。

AuditAssignment 可作为问题事实使用。

AuditAssignment 有一个属性“requiredSkill”

审计分配有一个属性“审计员”

审核员对象有一个“资格”列表,它是“requiredSkill”的集合

现在,我需要检查audittaskment对象中审核员的资格是否具有requiredSkill

下面是我尝试过但不起作用的示例规则。

rule "checkIfAuditSkillIsMatching"
    when
        $auditAssignment : AuditAssignment( $neededSkill : requiredSkill.getSkillCode())

        $auditor : Auditor( $auditorSkills : qualifications)
        not exists ( Skill ( skillCode == $neededSkill ) from $auditorSkills  )  

    then
        System.out.println( " **** " + $neededSkill);
        scoreHolder.addHardConstraintMatch(kcontext, -1 );
end

我也尝试过下面的

rule "checkIfAuditSkillIsMatching"
    when

        $validAuditorCount : Number ( intValue < 1  ) from accumulate (
            $auditor : Auditor( $auditorSkills: qualifications )
            and   exists AuditAssignment( auditor == $auditor , 
                    $auditorSkills.contains(requiredSkill) )   ,
            count($auditor)

        ) 

    then
        scoreHolder.addHardConstraintMatch(kcontext, -1 );
end

最佳答案

这里建议使用Collection的属性方法来获取你需要的逻辑值。

rule "checkIfAuditSkillIsMatching"
when
    $auditAssignment: AuditAssignment( $neededSkill: requiredSkill.getSkillCode() )
    $auditor: Auditor( $auditorSkills: qualifications,
                       ! $auditorSkills.contains( $neededSkill ) )  
then
    //...no suitably qualified auditor
end

关于集合中不存在口水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958295/

相关文章:

java - 在解决时间问题的同时移动链式规划实体

java - 我们可以在jbpm6脚本任务中访问drools规则引擎的工作内存事实吗?

c# - .NET 的规则引擎

java - Optaplanner - CVRP - 中途返回仓库

java - Optaplanner 和链接

optimization - OptaPlanner 是否支持对连续变量的优化和约束?

java - Drools Planner 考试示例只有一个主题

unit-testing - 你如何对 Jboss Rules (Drools) 规则进行单元测试?

java - 如何将drools的输出发送到java

java - 是否可以通过 OptaPlanner 验证现有的解决方案,以检查规则如何被破坏?