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

Optaplanner何时以及如何评估规则?

冷翼
2023-03-14
Job -> PlanningEntity, PlanningVariable=Resource from resourcesList
Resource -> POJO
Solution
   - List<Job> PlanningEntityCollectionProperty
   - List<Resource> ProblemFactCollectionProperty, resourcesList
rule "noMoreThan3JobsPerResource"
    when
        $resource : Resource()
        $totalJobsOnResource : Number(intValue > 3) from accumulate (
            Job(
                resource == $resource,
                $count : 1),
                sum($count)
            )
    then
        scoreHolder.addHardConstraintMatch(kcontext, 3 - $totalJobsOnResource.intValue());
end
rule "logWhenResource"
    when
        $resource: Resource()
    then
        System.out.println("RESOURCE encountered");
end
rule "logWhenJob"
    when
        $job : Job()
    then
        System.out.println("JOB encountered");
end

提前致谢

共有1个答案

柴兴修
2023-03-14

经过对IRC的一些讨论(以及杰弗里的大量耐心帮助!),希望以下内容能为其他人提供帮助。

1.打开登录

首先,确保打开Optaplanner包的跟踪日志记录(也可以关闭drools)。这确实很有帮助,因为它准确地显示了optaplanner何时触发分数计算。还显示了考生成绩计算:

Move index (0), score (-3init/-2hard/0medium/0soft), move (Job 7 {null -> Resource 1}).
CH step (6), time spent (110), score (-3init/-2hard/0medium/0soft), selected move count (2), picked move (Job 7 {null -> Resource 1}).

您还可以登录规则的“然后”部分,方法如下:

LoggerFactory.getLogger("org.optaplanner").debug("...);

这确保它以正确的顺序记录,因为日志与println可能是异步的,事情可能不是按时间升序进行的。

2.了解Optaplanner何时计算分数,何时不计算分数

doMove()
fireAllRules()
undoMove()
doMove()
fireAllRules()
undoMove()
doStep()
doMove()
fireAllRules()
undoMove() ...

3.FULL_ASSERT

要检查是否破坏了分数,请打开FULL_ASSERT。

 <environmentMode>FULL_ASSERT</environmentMode>

这有助于确定你的分数计算是否正确(我们的不正确)。

 类似资料:
  • 我正在使用Optaplanner开发一个系统,它类似于示例——会议调度。将一些任务分配给一些机器并确定开始时间。我创建了一个类——TaskAssignment作为规划实体,字段——“机器”和“开始时间谷物”作为规划变量。 但在我的用例中,会议调度中不存在约束,我不知道如何实现。在某些情况下,任务前端可能有准备时间。这意味着,TaskA和TaskB是同一台机器上的连续任务,TaskB在TaskA完成

  • 评估可能的员工,却没有得到它应得的能量。一个糟糕的雇佣,就像糟糕的婚姻,是非常糟糕的。每个人首要的一部分精力应该投入到招聘上,尽管这很少发生。 有不同的面试风格。有的是折磨人的,设计用来把候选人放在巨大压力下。这是为了这样一个有用的目的:在压力下折射出性格缺陷和弱点。候选人对待面试官不会比对待他们自己更诚实,而且,人的自欺能力是令人惊奇的。 你应当,最少,对候选人进行两个小时的与口头考核等价的技术

  • 问题内容: 我如何创建一些简单的ajax评级,如本页http://watir.com/documentation/所示?每个访问者都应该能够评分,我不需要设置权限。我想将评级存储在列中。因此,用户可以按评分排序。请举一个详细的例子。我不是JavaScript专家。 我找到了一个从头开始创建评分的示例。但是它授权用户。有人可以向我显示创建没有评分者(用户)的评分的指南吗?它不仅应存储值,还应计算票数

  • 问题内容: 我已经在Swift网站上看​​到了这段代码,并在这里看到了许多帖子,我试图掌握基础知识。如何评估这条线? 我很困惑,因为它不是name ==可选名称,而是分配值,那么该报告如何报告为真,为什么当您用john appleseed替换为nil时它不为真,因为它仍然相等? 问题答案: 基本上,这句话说:“如果可以让新变量等于的非可选版本,请执行以下操作”。正如Martin所指出的,这称为Op

  • 我知道Drools中的“显着性”提供了对规则执行顺序的控制。但上面是一个例子,说明了当“显着性”不再能帮助我时所面临的问题。 在这里,我有三条规则正在相继执行: 我期望第三条规则被触发,并且控制台中有“规则被触发”行,但它没有被执行。 据我所知,问题在于规则评估阶段,当所有三个规则在执行前同时评估,然后才根据它们的“显着性”回合执行。 在评估的那一刻,$resource1.amount是5,这就是