你怎么把重量放在'在PHP的不同条件下,同时保持您的结果半随机?

时间:2016-11-02 22:02:20

标签: php mysql sql algorithm

我正在制作一个广告网络,我希望展示CPM最高(非常重要)和最旧日期(不太重要)的广告。但是,如果我这样做,我会一直得到相同的广告,所以我也希望在等式中添加一些随机性。

所以我想制作一个算法,增加一些权重做2条件,同时保持半随机。我不知道哪里可以开始,我也找不到任何可以帮助我的东西。如果你能留下答案或推荐给我能提供帮助的东西,我将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

如果您需要具有明确定义的概率分布的随机性,您可能需要内存中的所有广告。我认为,这在您的应用程序中是不可行的,因此我将专注于另一种近似。但是我会在这个问题的最后回到那个。

逼近

核心方面是您需要一个结合了任意数量属性的单一重要性值。在您的情况下,这可能是以下内容:

I = weight_cpm * cpm / max_cpm + weight_age * age / max_age

最大值用于将两个刻度相互标准化,也可以保留。权重指定每个属性的相对重要性。

因此,您可以针对此重要性值对广告进行排序,并拍摄第k个广告,其中k是随机数。

特定概率分布

如果要指定概率分布,则需要为每个广告指定频率。这可能是它的重要性除以所有广告重要性的总和。这样做,可以确保频率总和为1。

您需要做的是定义广告的任意顺序并叠加其频率值。例如,如果频率为0.1, 0.1, 0.5, 0.3,则可以按如下方式堆叠它们:

0.1  |  0.1  |     0.5       |  0.3      |
-------------------------------------------
0   0.1     0.2             0.7         1.0
Ad1     Ad2        Ad3            Ad4

然后,您需要做的就是生成0到1之间的随机数,然后选择随机数落在其间隔内的广告。例如。如果您的随机数为0.6,则选择Ad3。

混合

如果您需要两者,您可以采取一些混合方法。即检索有关其重要性的热门n广告,并定义此子集的概率分布。