Database 用于排序多个用户计划的算法或脚本

Database 用于排序多个用户计划的算法或脚本,database,algorithm,sorting,scheduled-tasks,Database,Algorithm,Sorting,Scheduled Tasks,我有一个可能如下所示的数据集: user_name time_1 time_2 time_3 如果某一天的时间不同,则它们是免费的。每周有22个插槽,用户可以从三个插槽中选择并提交。我将有大约100-150个用户,我想知道如何最好地对他们进行分类,以便在每个时间段内平均分配人数。我对开始方法的最佳猜测是,看看如果所有用户都被放入第一个插槽(时间_1),然后是第2个和第3个插槽,然后比较哪一个会给出最好的结果,然后从那里,看看如果用户被添加或从插槽中删除会发生什么,以及这将如何影响总体性能。任何

我有一个可能如下所示的数据集:

user_name
time_1
time_2
time_3
如果某一天的时间不同,则它们是免费的。每周有22个插槽,用户可以从三个插槽中选择并提交。我将有大约100-150个用户,我想知道如何最好地对他们进行分类,以便在每个时间段内平均分配人数。我对开始方法的最佳猜测是,看看如果所有用户都被放入第一个插槽(时间_1),然后是第2个和第3个插槽,然后比较哪一个会给出最好的结果,然后从那里,看看如果用户被添加或从插槽中删除会发生什么,以及这将如何影响总体性能。任何帮助都将不胜感激,因为我没有做过很多优化算法


关于,

这只是一个启发,但也许它可以很好地工作:

  • 对于每个时间段,计算可用于该时间段的人数
  • 以可用人数最少的时间段为例,用22/(总人数)或该时间段可用的最大人数填充该时间段
  • 从池中删除添加的人员,并对剩余的时间段重复此过程

  • 如果您需要最佳结果,您可能需要使用约束解算器或线性规划解算器。

    这是图论问题,可以通过拓扑排序来解决:。

    我回答这个问题,因为以前的答案显然会在许多人选择同一个插槽,而许多插槽没有或很少有选择器的情况下出现故障。例如,如果所有用户都按该顺序选择插槽(1、2、3),拓扑排序将不会提供任何帮助

    在理想情况下,每个人都会选择一个插槽,所有插槽都有相同数量的选择器(+/-1)。如果我自己处理这个问题,我会尝试一种先到先得的机制,使用实时在线服务器,这样人们就只能从登录时仍然打开的插槽中进行选择

    如果网上先到先得不可行,我会 使用一种激励人们选择不同时段的方法,可能带有随机因素。这里有一个这样的方法:

    让所有人中都有U个人,争夺H个时间段。(H=22。)假设每个人只分配到一个插槽。设P=[U/H](即U/H被截断为整数)为每个插槽的标称人数。(U mod H插槽中将有P+1人。)对于插槽j,让D_j为3*R1j+2*R2j+1*R3j,其中Rij是请求插槽j作为选项i的次数。D_j越高,需要的插槽越多。给每个用户k一个分数W_k=1/D_{C1k}+2/D_{C2k}+3/D_{C3k},其中Cik是用户k的第i个选择。也就是说,用户选择D值较低的插槽会得到更多的分数,第二或第三选择的权重比第一选择的权重更大

    现在,按D_j将插槽按递增顺序排序。(将首先填充“最忙”的位置。)按W_k分数将用户按降序排序,并将此列表称为S

    然后,对于每个插槽j:虽然j未满,{在S中找到选择插槽j作为选项1的第一人k;如果找到,将k从S移动到插槽j。如果没有找到,在S中找到选择插槽j作为选项2的第一人k;如果找到,将k从S移动到插槽j。如果没有找到,在S中找到选择插槽j作为选项3的第一人k;如果找到,将k从S移动到插槽j。如果没有找到,将k从S t添加最后一个人ko插槽j,并从S上拆下k。}

    在前面提到的坏情况下,所有用户都按顺序选择插槽(1,2,3),这种方法会将随机人群分配给所有插槽。鉴于问题陈述,这是可以预期的

    更新1:首先完全填满最忙的位置可能会让一些人进入他们声称的第二或第三选择的位置,而他们本可以在第一选择的位置上没有冲突。填满最忙的位置有优点和缺点,博弈论分析可能会解决这一问题。在没有这种分析的情况下,我现在觉得最好是ll通过以下方式(更简单)方法:像以前一样,按W_k分数的降序创建排序的用户列表S。现在按顺序检查列表S,将用户放入他们选择并适合的第一个可用插槽,否则放入仍然有空缺的最常用插槽。例如,如果用户k选择插槽p、q、r,如果p有空间,则将k放入p,如果q有空间,则将q放入else r如果r有空间,否则j在有开口的槽中,D_j最大

    这种方法更容易向用户解释,是一种
    编程稍微容易一点,一般来说可能更接近最优。如果可以在不使用第三位选择的情况下填补空缺,则可以这样做。

    如何定义偏序?