当前,我们正在尝试构建一个匹配应用程序,以将学生与校友进行事件匹配。该活动由多个时隙组成,每个时隙中的每个学生都可以分配到一个校友。
对于每个时隙,校友都有应分配给他们的最大和最小学生数,而学生具有应分配给校友的最小时隙数。也绝不应将学生两次分配给同一校友。不过,这才是真正的踢脚:学生们可以提交该活动偏好的排名列表,其中包含他们想与之交谈的校友排名。
算法必须创建一个时间表,其中包含学生在校友和时间段上的“公平”分布。
我们已经得出结论,我们可能无法获得最佳解决方案,因此我们想尝试使用本地搜索来获得某种“公平”的计划。但是,要运行本地搜索,我们首先需要创建一些随机(但有效!)的计划,同时要考虑到容量和约束。这种“随机填充”算法是我们遇到的问题,因为我们无法弄清楚如何创建一种不确定的算法,该算法在上述约束条件下甚至会创建随机调度。
我们已经尝试将问题转换为流量问题,但是结果图太大而无法在合理的时间内解决,并且我们尝试了某种FCFS方法,但是在某些情况下总是存在冲突要求算法进入递归循环,该循环可能需要很长时间,因此我们可能会强行强制执行计划。
尽管我们自己无法解决任何问题,但我们觉得必须使用以前已经发现的算法可以解决一些类似的问题。如果有任何类似问题的经验,我们将很乐意为您提供帮助。
答案 0 :(得分:0)
我建议一种简单的贪婪方法。每当您分配学生时,都将其分配给其最佳职位。最佳定义如下:
以随机顺序分配所有学生,然后尝试分配他们。再次加扰,然后重复。如果没有通行证,那就停下来。
不能保证此算法找到最佳解决方案或找到解决方案。但是在合理的限制内,很有可能在多项式时间内找到一个体面的解决方案。