我需要在员工之间分配呼叫。不同的员工在系统中具有不同的权重。例如,一名员工必须接听的电话是其他员工的两倍。
现在我使用这个方案:
员工1-评分10。
员工2-评级9。
员工3-评级4。
员工4-评级3。
我使用这个答案中的一个加权随机函数(Generating random results by weight in PHP?)来选择要呼叫的电话号码。
问题是,一天的电话并不多。大约10-20岁。上面的方法在较大的号码上是可以的,但是对于少量的呼叫,员工4在某一天可以很容易地接收不到任何呼叫。
有没有一种方法可以做加权分布,在小数字上工作得很好?或者上面的答案是最好的?
发布于 2016-03-03 01:18:08
你得到的是全天都有电话打进来,有某种优先级的员工来处理这些电话。概括地说,你有工作要做,工人不平等。这是一个作业管理系统。有一种优先级队列的形式来处理这个问题。通常,我们认为作业具有优先级。在这里,它们都是一样的。因此,作业在FIFO队列中。工人在优先队列中。当一个工人完成一项工作后,这个工人就会进入队列。他们领先于任何优先级较低的人(落后于任何具有同等或更高优先级的人)。当有一个作业要完成并且队列中有一个worker时,worker将接受该作业。
当每个人都很忙的时候,这一切都很好。当有稀疏的工作时,这是不好的。所有的工作都是同一个工人做的。我们不关心计算机,因为CPU不会抱怨。然而,我们希望将工作分散开来。在基于节点的系统中使用的是计时器。某人在队列中等待的时间越长,此人的临时优先级就越高。时间增量由你决定。你可以说一个人的优先级每小时上升1。因此,为了获得他们的临时优先级,您可以获得他们的优先级,并将他们在队列中的时间相加。这有助于确保分布式系统中的每个节点都能在某个时间完成一些工作。
在研究这个问题时,你会遇到一个问题,根据我的经验,大约99%的作业管理系统将所有的优先级和权重都放在作业上,而不是工人身上。所有的工人都是平等的。所以,你必须翻转它。在我多年前的一本教科书中,他们只是简单地颠倒了角色。而不是将其视为员工接听电话,而是将其视为接听员工的电话。电话变成了你的“工人”,员工变成了你的“工作”。然后,您可以将其视为基本的基于优先级的队列。
https://stackoverflow.com/questions/35751247
复制相似问题