用于工作人员任务调度的Optaplanner计划和影子变量

时间:2018-04-18 20:40:57

标签: java optaplanner domain-model

首先,对于我的分数计算,我使用Java EasyScoreCalculator接口并使用Java API创建我的求解器(因为我在Java OSGI Plugin内从xml或drl文件加载配置/约束时遇到了问题)

我的问题:

我想解决一个多技能工人任务调度问题

我确实有一系列任务,每项任务都需要一项技能,只能由一名 具有所需技能执行>(工人可以拥有多项技能)。此外,工人一次只能完成一项任务,所以一个接一个地完成任务。

任务开始结束日期计划 给定日期范围

解决方案: 我想优化所有员工的总体工作量(分钟)

目前我确实有三个计划变量:

  • 指定工人
  • 开始日期
  • 结束日期

由于我希望最大限度地减少工作量,因此可以使用任务的估计工作时间将开始和/或结束日期计算为阴影变量,因为它应该可以在一天中加班。 / p>

为此,我创建了一个影子变量 tasksToWork (Taks列表),当资源分配给计划变量分配的工作者时,将为其添加任务。

在我的Java Score类中,我遍历列表并根据可用时间计算每个任务(具有开始和结束日期 - 不为空)每天工作人员的工作时间。 工作时间少于可用时间是可以的,高于可用时间将导致softScore和hardScore中一天的最大工作时间。

在得分类中计算真的很烦人,因为计划变量可以为空,所以我必须首先检查计划变量是否为空并继续此步骤,否则它可以计算。

另外我认为没有time scheduling design pattern可以用于我的问题(如果你认为不同,请纠正我)

所以也许可以告诉我,

  • 是否只有在设置了所有计划变量后才能计算得分?
  • 计划开始和结束日期的任何更好的实施?
  • 或计算可能加班的工作时间?
  • 只有在设置了两个依赖的计划变量(任务的开始和结束日期)时才计算影子变量(工人每天的工作时间)的方法?

谢谢

1 个答案:

答案 0 :(得分:0)

1)任何分数计算器必须能够计算半初始化解决方案的分数。否则CH将是盲目的,直到所有内容都被分配 - 因此基本上是随机初始化(=坏)。

2)& 3)我只是对角地阅读它,所以我不了解细节,但是看看2个例子:项目作业调度和任务分配。两者都使用链式时间模式。

4)是的,这是可能的。假设C依赖于A和B.如果A或B为空,则C为空。