根据偏好创建调度算法

时间:2019-05-22 13:46:30

标签: algorithm optimization schedule

当前,我们正在尝试构建一个匹配应用程序,以将学生与校友进行事件匹配。该活动由多个时隙组成,每个时隙中的每个学生都可以分配到一个校友。

对于每个时隙,校友都有应分配给他们的最大和最小学生数,而学生具有应分配给校友的最小时隙数。也绝不应将学生两次分配给同一校友。不过,这才是真正的踢脚:学生们可以提交该活动偏好的排名列表,其中包含他们想与之交谈的校友排名。

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

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

我们已经尝试将问题转换为流量问题,但是结果图太大而无法在合理的时间内解决,并且我们尝试了某种FCFS方法,但是在某些情况下总是存在冲突要求算法进入递归循环,该循环可能需要很长时间,因此我们可能会强行强制执行计划。

尽管我们自己无法解决任何问题,但我们觉得必须使用以前已经发现的算法可以解决一些类似的问题。如果有任何类似问题的经验,我们将很乐意为您提供帮助。

1 个答案:

答案 0 :(得分:0)

我建议一种简单的贪婪方法。每当您分配学生时,都将其分配给其最佳职位。最佳定义如下:

  1. 如果某个理想的校友在某个时间段内没有达到学生可用的最低要求,那么最想要的此类校友在可用的插槽中距离达到最低要求的距离最远。
  2. 如果在某个时间段内没有任何所需的校友达到学生可用的最大值,则在距达到最大值的最远的可用插槽中最需要的此类校友。
  3. 如果学生没有达到其最低要求,则所有可用空位中的所有校友都达到了最大值,而那些空位中的任何学生都超过了其最低要求,然后撞到了指定的学生。选择要根据该学生的喜好减去该学生的喜好减去该学生的喜好(即,将某人从其第5个空位比第一个空位更容易碰到),并通过撞远远超过最低分的学生来打破平局。
  4. 这次没有作业。

以随机顺序分配所有学生,然后尝试分配他们。再次加扰,然后重复。如果没有通行证,那就停下来。

不能保证此算法找到最佳解决方案或找到解决方案。但是在合理的限制内,很有可能在多项式时间内找到一个体面的解决方案。