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
提前致谢
经过对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,这就是