当前位置: 首页 > 知识库问答 >
问题:

口水比较集

卢出野
2023-03-14

我正在尝试使用Optaplanner来代替我自己安排我们的工作计划。系统有一个MySQL数据库,其中包含必要的信息和关系。对于这个问题,我将只使用我需要的三个表:

Employees --> Have Skills
Jobs --> Have Skills
Skills

在Drools我有规则

rule 'required Skills'
    when
        Job(employee != null, missingSkillCount > 0, $missingSkillCount : missingSkillCount)
    then
        scoreHolder.addHardConstraintMatch(kcontext, -10 * $missingSkillCount);
end

在类Job中,我有一个函数missingSkillCount():

    public int getMissingSkillCount() {
        if (this.employee == null) {
            return 0;
        }
        int count = 0;
        for (Skill skill : this.reqskills) {
            if(!this.employee.getSkills().contains(skill)) {
                count++;
            }
        }
        return count;
    }

当我运行我的程序时,Optaplanner返回,我的员工都没有任何技能。。。

但是,当我手动使用此函数(适用于接受员工作为参数):public int getMissingSkillCount(员工员工)时,它确实返回正确的值。

我很困惑!我在某种程度上理解,contains是检查同一个对象,而不是对象的内容。但我不知道如何有效地做到这一点。。。

共有2个答案

羊舌兴文
2023-03-14

仍然想知道让Optaplanner运行和“手动”使用它有什么区别。

我通过重写equals()修复了它,这应该是我的第一条线索!

宿洋
2023-03-14

1)你的作业在Drools工作内存中吗?我假设它们是你的@PlanningEntity,并且实例在你的@PlanningEntityCollection上的@PlanningSolution中,所以它们会是。您可以通过匹配Jobs()上的规则并执行System.out.println来验证这一点。

2) 尝试将约束写入ConstraintStream(请参阅文档),并在getMissingSkillCount()中放置调试断点

3) 暂时打开FULL_ASSERT以验证没有分数损坏。

4) 打开optaplanner的调试,然后跟踪日志记录,看看里面发生了什么。

 类似资料:
  • 当我在浏览上面的接口时,在阅读了许多相同主题的站点后,我对这些接口的语法不是很清楚。 请考虑以下代码段: 如果每个查询都是可理解的。

  • 我是java新手,试图理解一些概念。这是一段我不懂的代码。 我知道这是怎么回事,但不明白为什么这是允许的。因此,我的问题是: 从java文档中,比较器[T]是一个接口。比较器[水果]怎么样?我将假设它是一个类,因为它必须覆盖比较函数。 为什么可以在{}中使用非参数构造函数和类定义来初始化FruitName比较器?我在比较器[T]的javadoc中没有找到这样的构造函数声明。 如有任何意见,将不胜感

  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜

  • 我有一个关于比较器接口的问题。在我的类下面实现了按长度而不是按字符值排序的默认排序的接口。 覆盖默认比较后,我使用对我的字符串数组进行排序。即使我覆盖了默认方法,如果我使用Arrays.sort,它会调用默认比较而不是我覆盖的方法。这是因为我显式调用了超类方法吗? 另一个问题是初始化接口本身。我知道您不能初始化接口,而是初始化一个类对象(实现所述接口)来引用接口可用的方法。在这种情况下,当我初始化

  • 问题内容: 我有两个对象。是类型。类型是隐藏对象的接口。定义为: 它还有一些额外的方法。但是,由于该类“未导出”,所以我无法将任何一个键都转换为一个,因为那没有实现,所以我也无法转换为一个,并且我无法访问the 或from,因为我不应该知道我有一个对象。 我应该怎么比较,并且是相同的密钥? 问题答案: 如前所述,您不能使用类型断言,因为您不能引用未导出的type 。 使用软件包可以实现您想要的一切

  • 我想制作一个实现比较器接口的比较器类。在类中,我想根据它们的ID比较我的2个员工对象。到目前为止,我制作的员工类是: 我完全被困住了,不知道该怎么办。有人能帮忙吗?