重量平均值为

时间:2017-01-21 17:29:01

标签: algorithm

我有一个系统根据实验优先级编号为用户分配实验。每个实验都有一个权重,用于确定选择向用户显示的频率。例如,可以将用户优先级100分配给优先级为100且优先级为80的实验2。一旦我们根据其权重选择实验,我们会检查实验的流量分配编号,以便将用户分配给该实验。

因此,即使实验1的优先级为100,如果其流量分配数为80%,则为该实验设置的用户将仅在80%的时间内分配给该实验。其他20%将分配给对照组。但是,将用户分配到实验或控制该实验的决定是基于实验优先级。其他低优先级的实验并不常见于用户。

如何根据优先级为用户分配实验,以便经常分配低优先级实验并且不会饿死。

我可以使用什么算法来确保所有实验都被分配,而不管优先级如何;虽然高优先级的实验将更频繁地分配给用户。

1 个答案:

答案 0 :(得分:0)

您的问题陈述不明确。让我们解决它,你说它是否是一个有用的排序。

首先,使用优先级编号对实验进行权重分配。让P_e成为实验e的优先级。设R_e为用户被分配到实验e的概率(0到1)。假设n实验按任意顺序排列e_0e_1 ... e_(n-1)R_e的合理公式是

R_e = P_e / sum(P_(e_i) for all i)

要确定将用户分配到哪个实验,请在Z中生成伪随机数[0..1),然后选择e_k,使k为最小整数Z < sum(R_j, j = 0..k) Y 1}}。如果实验数量很大,您需要通过二分查找来完成此操作。

现在你知道用户属于哪个实验,在[0..1)中使用第二个伪随机数T_e作为“抛硬币”来决定她是否控制或测试。如果Y < T_e是流量分配,则选择测试e_0 = 20, e_1 = 100, e_2 = 80 ,否则控制。

这是一个公平的股票计划。没有饥饿。

示例

首先,如果你无法理解上面的内容,你需要学习一些数学才能成为一名有效的程序员。这很简单。

假设实验有权重

R_0 = 20/200 = 0.1, R_1 = 0.5, R_2 = 0.4

他们的总和是200,所以选择的概率应该是:

sum(0..0) = 0.1,   sum(0..1)= 0.6,   sum(0..2) = 1.0

这些概率的运行总和如下所示:

k

这些是必须搜索的总和(可能通过二分搜索)来确定npm install --save-dev @types/core-js

如果伪随机数Z小于0.1,则选择实验e_k,其中k = 0;在0.1和小于0.6之间,选择k = 1; 0.6及以上选择k = 2。

现在做硬币投掷。如果流量分配是0.75,则小于0.75的折腾意味着测试用户。否则用户就是控制权。