我有这个问题,但不确定它属于什么算法。
我们试图建立一个调度系统,用户可以选择时间偏好,然后将他们与他们最喜欢的时间分组。
假设我有100个用户。这些用户有他们的时间偏好。我们想把他们分成4到6个班,每个班大约有20到25个学生。我的问题是
如何将他们安排到他们最喜欢的上课时间,同时使用最少的课程?
另一个制约因素是我们拥有的教师数量和每周可以教的最多时间。我们也想上化妆课例如:本周缺课的学生可以改在下周上课。)
最佳答案
解决这类多目标优化问题的一种方法是找到满足一个目标的解,然后使用local search尝试满足其余约束。
例如,如果忽略希望最小化使用的类数的约束,则可以将其视为Stable Marriage Problem(或加权二部图匹配问题)上的变量,这具有一个很好的特性,即它可以在多项式时间内求解。您在这个问题上的变体与“医院/住院医生”问题最为相似(根据偏好将许多住院医生分配给少数医院)。
这将给您留下几个只有几个学生的班级,因此您接下来执行本地搜索以满足“最小化班级数量”约束(如果您正确地制定了稳定婚姻算法,那么您应该已经满足了“没有班级超过25个学生”约束)-从这里您有两个选择:
将班级从最少的学生分类到最多的学生,并以最少的学生关闭班级,将被驱逐的学生重新分配到剩余的班级
继续考虑学生的偏好,将班级从最不喜欢的分类到最喜欢的分类(因此,如果一个班级中有5个学生分配了10个权重,那么您将首先关闭一个班级,10个学生分配了2个权重)。
然后,您将执行另一个本地搜索以满足教师的学时限制-您将在执行“最小化类数”搜索后执行“教师不能超过x学时”搜索,因为后一个优化将使执行前一个优化更容易。
如果生成的算法足够快,那么可以随机化它并运行几十次,从而保存最佳结果例如,与其先用最少的学生结束一个班级,不如随机选择一个要结束的班级(加权选择,使其通常选择最小的班级-完全随机的搜索不会有好的效果)
你可能会发现你的一个限制因素导致了很多冲突,例如,当你满足教师的时间限制时,你发现你必须重新安排大部分学生。如果发生这种情况,则更改约束顺序,以便在第二次或甚至第一次通过时而不是在第三次通过时满足教师的时间要求。
组合类约束实际上可能属于约束列表的顶部(即使它的优先级很低),这取决于它的规范例如,您可能要求补习班在任何其他班级之前上课(例如,星期二上课的学生可以在星期一补习班,并在其常规班级之前赶上补习班);即使补习班约束的优先级较低,但它的要求也最严格,所以它需要先订购。
关于algorithm - 调度/匹配/偏好算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16347801/