课程分配算法

时间:2011-06-10 15:04:19

标签: algorithm variable-assignment

我需要为m个课程分配n个人,每个人指定他们的第一和第二个偏好,每个课程都有最多的人参加。每个人只能参加一门课程。该算法应该找到一个解决方案

  1. 根据他们的偏好分配一门课程的人数最大化
  2. 为他们的首选人分配的人数最大化(考虑到优先级较高的1人)。
  3. 我猜这不是一个不常见的问题,但搜索没有任何回报,因此我决定推出自己的问题。这是我到目前为止所得到的:

    1. 对于首选项数量少于最多人数的课程,将所有这些人员分配到课程
    2. 其他课程:将随机人员纳入选修该课程作为首选的课程,直至课程结束
    3. 对于第二优先级低于自由空间的课程,将所有这些人员分配到课程
    4. 其他课程:将随机人员纳入选择本课程作为第二选择的课程,直至课程结束
    5. 对于没有课程的每个人:在他们的第一个(然后是第二个)偏好时,请注意选择另一个课程的人仍然是免费的(如果找到多个课程,请选择最多的课程免费点),将此人移至他们的第二选择并指派失踪人员
    6. 由于最后一步,我仍然认为该算法不会找到问题的最佳解决方案。任何想法如何使这个更好?还有其他算法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:5)

如果可能的话,将每个人都安排在他们的首选课程中。

如果有人没有得到它,请将它们放在第二个选择中。

现在,我们可能会得到一些没有得到任何选择的人。 (“失败者”。)

找到一个获得他的第一选择课程的人,这也是“失败者”的第二选择。这个家伙将被重新分配到他的第二选择,而“失败者”将占据他的位置。如果没有这样的人,那么你的问题就无法解决了。

请注意,这样可以最大限度地增加首选人数:

如果你有第二个选择,那么它意味着:

  • 其他人已经将您的首选作为首选
  • 其他人将你的第一选择作为他的第二选择,但这只是因为他的第一选择被视为别人的第二选择,而他的第一选择是由首选学生填补。

(可能最后一点有点难以理解,所以这里有一个重写:)

对于具有第一选择A和第二选择B的人X:

如果X得到选择B,那么:

  • Y在A中占据了X的位置,而Y的首选是A。
  • Y在A中占据了X的位置,而Y的第二选择是A.Y的第一选择是C,但是C的位置都充满了其他第一选择C的学生。

答案 1 :(得分:2)

这类似于stable marriage problem

  

鉴于 n 男性和 n 女性,在哪里   每个人都排名所有成员   具有独特数字的异性   在1和 n 之间按顺序排列   偏爱,嫁给男人和女人   这样就没有两个了   两性的人都会   而不是他们的彼此   现有合作伙伴如果没有这样的话   人们,所有的婚姻都是   “稳定的”。

更新

考虑到@bdares评论,以及课程容量有限这一事实很难将问题视为稳定匹配。

我会用linear program作为{{3}}来解决这个问题,其目标函数取决于获得第一选择的人数和课程大小作为约束。

答案 2 :(得分:0)

第一个问题可以建模为最大基数二分匹配问题。第二个问题可以建模为加权二分匹配问题(也称为分配问题)。

答案 3 :(得分:0)

听起来像linear bottleneck assignment problem。当您在维基页面中时,请查看参考部分中提供的链接。