【问题标题】:Creating a scheduling algorithm based on preferences根据偏好创建调度算法
【发布时间】:2019-05-22 23:56:51
【问题描述】:

目前,我们正在尝试构建一个匹配应用程序,将学生与校友匹配到某个活动中。该活动由多个时间段组成,在每个时间段中,每个学生都可以分配给一个校友。

对于每个时间段,校友都有应分配给他们的学生的最大和最小数量,学生有分配给校友的最小时间段。学生也不应该被两次分配给同一个校友。不过,真正的关键是:学生可以提交一份针对该活动的偏好排名列表,其中包含他们想与之交谈的校友排名。

算法必须创建一个时间表,其中包含学生在校友和时间段上的“公平”分布。

我们已经得出结论,我们可能无法获得最佳解决方案,因此我们想尝试使用本地搜索来获得一些“公平”的时间表。但是,要运行本地搜索,我们首先需要创建一些随机(但有效!)的时间表,同时考虑到容量和约束。这种“随机填充”算法是我们遇到一些问题的地方,因为我们无法弄清楚如何创建一个非确定性算法,在上述约束下,它甚至可以创建一个随机调度。

我们尝试将问题转换为流问题,但结果图太大而无法在合理的时间内解决,我们尝试了某种 FCFS 方法,但总是存在存在冲突的边缘情况要求算法进入一个递归循环,这可能需要很长时间,以至于我们还不如强行强制调度。

虽然我们自己无法解决任何问题,但我们觉得一定有一些类似的问题可以用以前已经发现的算法来解决。如果有人遇到过与此类似的问题,我们会很高兴得到他们的帮助。

【问题讨论】:

  • 您是否考虑过确定性地分配它们但忽略他们的偏好,然后使用模拟退火等算法方法在满足约束条件时逐步交换分配并提高一些总体排名分数,以评估有多少人得到了他们想要的?或者甚至只是模拟退火,包括分配约束作为分数的一部分,但最后检查分配是否满足数字约束?
  • 校友和学生的大概人数是多少?
  • 学生对所有校友的偏好排名还是只对他们的前 N ​​个校友进行排名?
  • 学生仅排名前n名校友,最多有1000名学生和500名校友参与,最多10个时段。我们实际上已经考虑过首先创建一个简单的有效时间表(忽略偏好),但我们已经在努力寻找一种算法来找到满足所有约束的有效解决方案。

标签: algorithm optimization schedule


【解决方案1】:

我会推荐一种简单的贪婪方法。每当您分配学生时,请将学生分配到他们最好的位置。其中 best 定义如下:

  1. 如果任何期望的校友在学生可用的某个时间段内未达到最小值,则最期望的此类校友在距离达到最小值最远的可用时间段中。
  2. 如果任何期望的校友在学生可用的某个时间段内未达到最大值,则最期望的此类校友在距离达到最大值最远的可用时间段中。
  3. 如果学生未达到最低要求,则所有可用名额中的所有校友都已达到最大值,并且这些名额中的任何学生都已超过其最低要求,然后撞上分配的学生。选择基于该学生的偏好减去该学生的偏好尽可能高(即从他们的第 5 个位置撞到某人比从他们的第 1 个位置撞到某人更容易),并通过撞到最远超过其最小值的学生来打破平局。
  4. 这次没有任务。

按随机顺序分配所有学生,并尝试分配他们。再次打乱它们,然后重复。当有一个完全没有任务的通过时停止。

此算法不保证找到最佳解决方案,或找到解决方案。但在合理的约束条件下,很有可能在多项式时间内找到一个不错的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-03
    • 2019-12-14
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多