2016-03-02 34 views
0

我需要在员工之间分配呼叫。不同的员工在系统中拥有不同的权重。例如,一名员工的电话数量比其他电话多两倍。PHP。正确的方式做加权分配

我现在正在使用此方案:

雇员1 - 游客10.
雇员2 - 游客9.
雇员3 - 评级4.
员工4 - 等级3

我使用此答案中的加权随机函数(Generating random results by weight in PHP?)选择要拨打的电话号码。

问题是,每天都没有多少电话。大约10-20。上面的方法可以在更大的号码上使用,但只需少量呼叫,员工4可以在某天轻松接听电话。

有没有办法做加权分配,这对小数目有效?或者上面的答案是最好的答案?

+1

小数目?向员工填充一个数组,根据需要多次复制它们。例如'数组'('1','1','1','2','2','3')',然后洗牌数组并根据需要弹出条目。 –

+0

那么你是否说过_every_员工需要在第一次电话会议之前采取行动?意味着至少有1个电话?如果没有,那么你应该罚款的事实是,只有4名员工和10个电话,某个员工可能不会接听任何电话。 –

+0

打电话是否全天进来?如果是这样,请使用优先级队列。你有没有在一天的开始时列出所有的电话,你必须把它们交出来?如果是这样,你可以使用重复来处理它们。由于两者都是非常不同的解决方案,因此在回答之前知道您想要的是非常重要的。 – kainaw

回答

1

你有什么是全天呼叫和雇员处理呼叫的某种优先级。总而言之,你有工作要做,工作人员不平等。这是一个工作管理系统。有一种处理这种情况的优先级队列。通常我们认为工作优先。在这里,他们都是一样的。所以,这些工作都在FIFO队列中。工人们正在排队。当一名工人完成工作时,工人进入队列。他们站在任何一个优先级较低的人面前(在拥有同等或更高优先级的人后面)。当有工作要做,工人在队列中工作时,工人就会接受工作。

当大家都很忙时,这一切都很好。工作稀少时不好。同一个工人做所有的工作。我们不关心电脑,因为CPU不会抱怨。但是,我们想要分散工作。在基于节点的系统中使用的是计时器。队列中等待的时间越长,该人的临时优先级就越高。时间增量取决于你。你可以说一个人的优先级每小时增加1。因此,为了获得他们的临时优先权,您将获得他们的优先权并增加他们进入队列中的时间。这有助于确保分布式系统中的每个节点在某个时间获得一些工作。

研究这个问题时你会遇到一个问题,根据我的经验,大约99%的工作管理系统都将工作优先权和重量放在工作岗位上,而不是工人。所有工人都是平等的。所以,你必须翻转它。在我多年前的一本教科书中,他们只是扭转了角色。您不要将其视为接听电话的员工,而应将其视为接听员工的电话。电话成为你的“工作人员”,员工成为你的“工作”。然后,您可以将其视为基本的基于优先级的队列。