技术人员时间 window 调度算法
Algorithm for technician time window scheduling
我正在寻找可以执行以下操作的算法(希望是 .net 实现):
我有以下数据:
- 技术人员列表,每个人都有不同的技能(可能不止一个)。
- 一个服务时间window(例如8-12)
- 这段时间内所有之前安排的工作的列表window(每个都有它所需的技能)
给定一份新工作(具有所需技能),我应该检查新工作是否可用并分配给任何可用的技术人员(只要他们的技能支持,以前的工作可以在技术人员之间转移)。也不能超过服务时间 window,因此不能为 11:30
安排 1 小时的工作
最初我想做 bin packing FFD 变体是我预先加载垃圾箱(技术人员),并且在寻找垃圾箱来放置工作时我也会检查技能匹配。作业列表将包含所有以前的作业和新的作业(按大小降序排列)并且代码停止,因为无法将作业放入任何容器中,或者它在所有作业都已安排后完成。
理论上它可以工作,但后来我想到了以下场景:
- 技术人员:T1(技能 S1 和 S2),T2(技能 S2 和 S3)
- 以前的工作:J1(需要技能 S2),整个时间的持续时间 window。
- 新工作 J2(需要技能 S1)
可能会出现J1分配给T1,然后J2无处可放的情况。
所以我考虑在工作列表中添加第二种排序:工作将按大小降序排序,然后按实际可以完成它们的资源数量升序排序。这将首先安排 J2,因为更少的技术人员可以做到这一点。
是否有解决此问题的特定算法,或者我的方法是否足够好?
谢谢
看看Constraint Satisfaction Problems。您的问题属于该类别。
此外,为了快速回顾问题 class 和一些玩具示例,请查看 here。
This 是从中截取幻灯片的(公开可用的)章节。
您将需要的约束大致如下(以非正式方式编写):
- 一个问题需要一套技巧来解决。
- 一个问题有一个时间 window 需要解决。
- 只有当技术人员具备所有需要的技能时,才能将问题分配给技术人员。
- 只有当技术人员的时间段大于或等于解决问题所需的时间时,才能将问题分配给技术人员。
然后是关于技术人员和可用时间段的限制,最后是关于技术人员和位置(应该解决问题的地方)的限制。
我正在寻找可以执行以下操作的算法(希望是 .net 实现): 我有以下数据:
- 技术人员列表,每个人都有不同的技能(可能不止一个)。
- 一个服务时间window(例如8-12)
- 这段时间内所有之前安排的工作的列表window(每个都有它所需的技能)
给定一份新工作(具有所需技能),我应该检查新工作是否可用并分配给任何可用的技术人员(只要他们的技能支持,以前的工作可以在技术人员之间转移)。也不能超过服务时间 window,因此不能为 11:30
安排 1 小时的工作最初我想做 bin packing FFD 变体是我预先加载垃圾箱(技术人员),并且在寻找垃圾箱来放置工作时我也会检查技能匹配。作业列表将包含所有以前的作业和新的作业(按大小降序排列)并且代码停止,因为无法将作业放入任何容器中,或者它在所有作业都已安排后完成。
理论上它可以工作,但后来我想到了以下场景:
- 技术人员:T1(技能 S1 和 S2),T2(技能 S2 和 S3)
- 以前的工作:J1(需要技能 S2),整个时间的持续时间 window。
- 新工作 J2(需要技能 S1)
可能会出现J1分配给T1,然后J2无处可放的情况。
所以我考虑在工作列表中添加第二种排序:工作将按大小降序排序,然后按实际可以完成它们的资源数量升序排序。这将首先安排 J2,因为更少的技术人员可以做到这一点。
是否有解决此问题的特定算法,或者我的方法是否足够好?
谢谢
看看Constraint Satisfaction Problems。您的问题属于该类别。
此外,为了快速回顾问题 class 和一些玩具示例,请查看 here。
This 是从中截取幻灯片的(公开可用的)章节。
您将需要的约束大致如下(以非正式方式编写):
- 一个问题需要一套技巧来解决。
- 一个问题有一个时间 window 需要解决。
- 只有当技术人员具备所有需要的技能时,才能将问题分配给技术人员。
- 只有当技术人员的时间段大于或等于解决问题所需的时间时,才能将问题分配给技术人员。
然后是关于技术人员和可用时间段的限制,最后是关于技术人员和位置(应该解决问题的地方)的限制。