【发布时间】:2019-05-22 23:56:51
【问题描述】:
目前,我们正在尝试构建一个匹配应用程序,将学生与校友匹配到某个活动中。该活动由多个时间段组成,在每个时间段中,每个学生都可以分配给一个校友。
对于每个时间段,校友都有应分配给他们的学生的最大和最小数量,学生有分配给校友的最小时间段。学生也不应该被两次分配给同一个校友。不过,真正的关键是:学生可以提交一份针对该活动的偏好排名列表,其中包含他们想与之交谈的校友排名。
算法必须创建一个时间表,其中包含学生在校友和时间段上的“公平”分布。
我们已经得出结论,我们可能无法获得最佳解决方案,因此我们想尝试使用本地搜索来获得一些“公平”的时间表。但是,要运行本地搜索,我们首先需要创建一些随机(但有效!)的时间表,同时考虑到容量和约束。这种“随机填充”算法是我们遇到一些问题的地方,因为我们无法弄清楚如何创建一个非确定性算法,在上述约束下,它甚至可以创建一个随机调度。
我们尝试将问题转换为流问题,但结果图太大而无法在合理的时间内解决,我们尝试了某种 FCFS 方法,但总是存在存在冲突的边缘情况要求算法进入一个递归循环,这可能需要很长时间,以至于我们还不如强行强制调度。
虽然我们自己无法解决任何问题,但我们觉得一定有一些类似的问题可以用以前已经发现的算法来解决。如果有人遇到过与此类似的问题,我们会很高兴得到他们的帮助。
【问题讨论】:
-
您是否考虑过确定性地分配它们但忽略他们的偏好,然后使用模拟退火等算法方法在满足约束条件时逐步交换分配并提高一些总体排名分数,以评估有多少人得到了他们想要的?或者甚至只是模拟退火,包括分配约束作为分数的一部分,但最后检查分配是否满足数字约束?
-
校友和学生的大概人数是多少?
-
学生对所有校友的偏好排名还是只对他们的前 N 个校友进行排名?
-
学生仅排名前n名校友,最多有1000名学生和500名校友参与,最多10个时段。我们实际上已经考虑过首先创建一个简单的有效时间表(忽略偏好),但我们已经在努力寻找一种算法来找到满足所有约束的有效解决方案。
标签: algorithm optimization schedule