Algorithm 如何有效地将学生与他们喜欢的部分匹配?

Algorithm 如何有效地将学生与他们喜欢的部分匹配?,algorithm,math,language-agnostic,matching,Algorithm,Math,Language Agnostic,Matching,假设你有一个包含5个部分的班级:a、B、C、D、E。每个部分在不同的时间集合,因此注册课程的学生将优先选择他们将选择的部分(他们只能选择一个部分)。当学生注册课程时,他们会按优先顺序列出3个他们喜欢的部分 每个组有n名学生。为了简单起见,我们假设有n*5名学生注册了这门课程 所以,问题是:如何有效地将学生与他们喜欢的部分进行匹配 我见过一些问题与类似的匹配场景问题,但没有一个非常适合,我担心我对算法了解不够,无法组成我自己的。顺便说一句,这是一个真正的问题,我知道有关部门需要几天的时间来手工完成

假设你有一个包含5个部分的班级:a、B、C、D、E。每个部分在不同的时间集合,因此注册课程的学生将优先选择他们将选择的部分(他们只能选择一个部分)。当学生注册课程时,他们会按优先顺序列出3个他们喜欢的部分

每个组有n名学生。为了简单起见,我们假设有n*5名学生注册了这门课程

所以,问题是:如何有效地将学生与他们喜欢的部分进行匹配


我见过一些问题与类似的匹配场景问题,但没有一个非常适合,我担心我对算法了解不够,无法组成我自己的。顺便说一句,这是一个真正的问题,我知道有关部门需要几天的时间来手工完成

也许你可以将它们随机分为几个部分。接下来,你选择随机配对的学生,并考虑如果交换他们提高了分布(这是否增加了匹配与他们的偏好?)。您可以迭代,直到X次迭代没有任何改进。
这显然是一种非常幼稚的方法,但如果您的样本很小,它可能会很快收敛。你不能保证你有最佳的解决方案,但因此你需要一种可能不可能的蛮力方法。

是否有一个评分系统,如果学生1在a部分,分数是20?(另一方面,如果学生2在A部分,分数为15分

我的问题是,如果A部分只剩下一个名额,而学生1和2都最喜欢A部分,那么谁先注册就可以获得该名额,而不是谁最适合(分数更高)

如果没有评分,您可以循环浏览学生并将他们放在他们喜欢的部分。如果第一个部分已满,请尝试他们的第二个首选部分,然后尝试下一个。如果学生喜欢的三个部分都已满,只需将他们注册到未满的部分即可


(如果有评分,情况会有所不同,因为你必须为每个部分设置优先级队列,并将其最大化。)

要确定每个学生是否可以分配到一个首选部分,请在以下网络中构造一个整数值最大流,其中三个
X
s代表从学生到他们首选部分的容量-1弧(多项式时间,例如,推-重新标记算法)当且仅当最大流量移动
m=n*5
单位时,才有一个解决方案;然后根据每个学生的哪些弧饱和来确定作业

capacity-1 arcs            capacity-n arcs
       |                          |
       v                          v
         student 1
       / student 2       section1
       /  .           X  section2 \
source <  .           X  section3 > sink
       \  .           X  section4 /
       \ student m-1     section5
         student m
capacity-1弧capacity-n弧
|                          |
v v
学生1
/学生2第1部分
/.X第2节\
源<.X第3节>汇
\.X第4节/
\学生m-1第5部分
学生m
要考虑偏好顺序,请切换到求解最小成本流问题,该问题仍然是多时间可解的(尽管您可能会发现通用LP解算器的网络单纯形模式更易于使用),它允许为每个弧指定成本。根据您认为公平的程度,为每个偏好级别选择分数


我肯定以前有人问过这个问题,但日程安排问题就像雪花一样,我无法仅凭关键词来找到旧问题。

没有评分,只有三个给定的偏好。你提出的方法的问题是:假设A部分非常流行,所以许多学生将它作为他们的第一选择。那些我正在寻找一个更实用的解决方案(最大的好处就是最大的数量)这考虑到了将第一部分放在不同部分的学生放在不同部分的可能性,例如,这意味着两个人得到了他们的第二选择,而不是一个人得到了他们的第一选择,另一个人根本没有得到他们想要的部分。我明白了。如果你想要一种实用的方法,你肯定需要某种评分系统。如果你不能比较一个解决方案和另一个解决方案,你就无法判断一个解决方案是否更有利。这可能会起作用,因为样本量不是很大,所以它可能会在合理的时间内收敛。我只是希望找到更优雅的解决方案?太好了,谢谢。你能解释为什么p1+p3<2*p2对应于fir的最大数量吗同意st选择?(同时,是的,我想可能有人在某个时候问了一个相当类似的问题。然而,我确实花了一段时间寻找,由于你提到的雪花关键词问题,只能找到表面上相似的问题)@哎呀,我想我写这篇文章的时候还没有完全清醒。如果你想最大化第一选择,比如设定p1=0、p2=1和p3=1。重点是你必须对你想要的全球结果做出一些价值判断,因为有些时间表对一些学生更好,而对其他学生更糟。另请参见第61页。