技术员时间窗调度算法

时间:2015-04-30 06:25:13

标签: algorithm scheduling job-scheduling bin-packing

我正在寻找可以执行以下操作的算法(希望是.net实现): 我有以下数据:

  1. 技术人员名单,每个人都有不同的技能(可能不止一个)。
  2. 服务时间窗口(例如8-12)
  3. 此时间窗口内所有以前预定作业的列表(每个作业都有所需技能)
  4. 给予一份新工作(具备所需技能),我应该检查是否有新工作并分配给任何技术人员(只要技能支持,以前的工作可能会在技术人员之间移动)。也不能超过服务时间窗口,因此1小时的工作不能安排在11:30

    最初我想过做包装FFD变种我是预先加载垃圾箱(技术人员),当我找工作箱时,我也会检查技能匹配。作业列表将包含所有先前的作业和新的作业(按大小降序排序),并且代码停止,因为作业无法放入任何bin中,或者在所有作业都已安排完成后结束。

    理论上它可以工作,但后来我想到了以下场景:

    • 技师:T1(技能S1和S2),T2(技能S2和S3)
    • 以前的工作:J1(需要技能S2),持续时间是整个时间窗口。
    • 新工作J2(需要技能S1)

    可能会发生一种情况,即J1被分配给T1,然后J2无法适应。

    所以我考虑在作业列表中添加第二种类型:作业将按大小递减排序,然后按实际可以升序的资源数量排序。这将使J2首先安排,因为较少的技术人员可以做到这一点。

    是否有解决此问题的特定算法或我的方法是否足够好?

    由于

1 个答案:

答案 0 :(得分:1)

看看Constraint Satisfaction Problems。您的问题属于该类别。

此外,要快速查看问题类和一些玩具示例,请查看here

This是(公开发布的)章节,其中载有幻灯片。

您需要的约束或多或少以下(以非正式方式编写):

  1. 问题需要一套技能才能解决。
  2. 问题需要时间窗口才能解决。
  3. 只有技术人员具备所有必需的技能时,才能向技术人员分配问题。
  4. 只有技术人员的时间段大于或等于解决问题所需的时间时,才能向技术人员分配问题。
  5. 然后是关于技术人员和可用时间段的限制,最终是关于技术人员和位置的限制(问题应该解决的地方)。