我需要安排每个人在整个时间段内参加每个考试,并避开午餐时间,使用最少的监考官和最短的时间(即无/最少监考官空闲)。
以下是限制条件:
- 每个人不能同时身处两个地方 - 每个人必须参加每个考试一次 - 没有人应该被同一位监考官考试两次
我意识到最优解可能是NP-Complete问题,而且最好使用遗传算法来获得最佳估计(类似于这个?Seating plan software recommendations (does such a beast even exist?))。
我知道遗传算法的工作原理,但我不知道如何以程序方式对问题进行建模,以便可以基因地操纵参数。
如果每个考试所需的时间相同,那么我会将时间段分成这些长度,并创建一个时间段与考官的矩阵,并将候选人放入其中。然而,由于每个测试的时间不一定相同,我有点不知道如何处理。
目前我正在做以下工作:
- 制作需要进行的所有“测试”列表,包括每个候选人和考试之间的测试。 - 从与测试数量相同的考官开始。 - 反复循环所有考官,对于每个考官:查找符合限制条件的未安排测试。 - 继续,直到所有可以安排的测试都已经安排完毕。 - 如果有任何未安排的测试,则增加考官数量并重新开始。
我正在寻找更好的建议来解决这个问题,因为当前感觉相当粗糙。