gpt4 book ai didi

java - 比较套装流口水

转载 作者:行者123 更新时间:2023-12-01 19:42:12 26 4
gpt4 key购买 nike

我正在尝试使用 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

Class 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 返回我的工作人员没有任何技能...

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

我很困惑!我以某种方式理解 contains 正在检查同一对象,而不是对象的内容。但后来我不明白如何有效地做到这一点......

最佳答案

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

2) 尝试将约束编写为 ConstraintStream(请参阅文档),并在 getMissingSkillCount() > 0 lambda 中放置调试断点以查看发生了什么。

3) 暂时打开 FULL_ASSERT 以验证是否存在分数损坏。

4) 打开 optaplanner 的 DEBUG 和 TRACE 日志记录,以查看内部发生了什么。

关于java - 比较套装流口水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59165717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com