技术人员时间窗口调度算法



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

  1. 技术人员列表,每个技术人员都有不同的技能(可能不止一个)
  2. 服务时间窗口(例如8-12)
  3. 在此时间窗口内以前安排的所有工作的列表(每个工作都具有所需的技能)

如果有一份新工作(具有所需的技能),我应该检查新工作是否被分配给任何可用的技术人员(只要技术人员的技能支持,以前的工作可以在技术人员之间转移)。此外,不能超过服务时间窗口,因此不能将1小时的作业安排在11:30

最初,我想做垃圾箱包装FFD变体,如果我预装垃圾箱(技术人员),当我寻找一个垃圾箱来放置工作时,我也会检查技能匹配。作业列表将包含所有以前的作业和新的作业(按大小降序排列),代码要么因为作业无法放置在任何垃圾箱中而停止,要么在安排了所有作业后结束。

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

  • 技术人员:T1(具有技能S1和S2),T2(具有技能S2和S3)
  • 以前的工作:J1(需要技能S2),持续整个时间窗口
  • 新工作J2(需要技能S1)

可能会发生这样的情况:J1被分配给T1,然后J2没有合适的位置。

因此,我考虑在作业列表中添加第二种排序:作业将按大小降序排序,然后按实际可以执行任务的资源数量升序排序。这将使J2排在第一位,因为能做到这一点的技术人员更少

有没有解决这个问题的具体算法,或者我的方法足够好?

感谢

看看约束满足问题。你的问题属于那一类。

此外,为了快速回顾问题类和一些玩具示例,请看这里。

这是幻灯片的(公开)章节。

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

  1. 一个问题需要一套技巧来解决
  2. 一个问题有一个需要解决的时间窗口
  3. 只有技术人员具备所需的所有技能,才能将问题分配给该技术人员
  4. 只有当技术人员的时间段大于或等于解决问题所需的时间时,才能将问题分配给技术人员

然后是关于技术人员和可用时隙的约束,最后是关于技术员和位置(应在哪里解决问题)的约束。

最新更新