我有些N
人必须每个人都参加T
考试。每项考试都需要“一些”时间,例如 30 分钟(没有提早完成这样的事情)。考试必须在考官面前进行。
我需要安排每个人在整个时间段内在考官面前参加每项考试,但要避免午休,在最短的时间内使用最少数量的考官(即没有/最少的考官空闲)
有以下限制:
- 一个人不能同时在两个地方
- 每个人必须参加一次考试
- 任何人都不应该被同一位考官检查两次
我意识到最佳解决方案可能是 NP 完全的,并且我可能最好使用遗传算法来获得最佳估计(类似于此?座位计划软件建议(这样的野兽甚至存在吗?))。
我对遗传算法的工作方式感到满意,我正在努力解决的是如何以编程方式对问题进行建模,以便我可以通过遗传方式操纵参数。
如果每次考试花费相同的时间,那么我会将时间段划分为这些长度,并简单地创建一个时间段与考官的矩阵并将候选人放入。但是因为每次测试的时间不一定是同样,我对如何解决这个问题有点迷茫。
目前我正在这样做:
- 列出每个考生和考试之间需要进行的所有“测试”
- 从有多少考试开始就有多少考官
- 重复循环遍历所有考官,每个考官:找到一个符合考官资格的计划外测试(基于限制)
- 继续,直到所有可以安排的测试,
- 如果有任何计划外的考试,请增加考官人数并重新开始。
我正在寻找有关如何解决此问题的更好建议,因为目前感觉相当粗糙。