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