[英]How do you put 'weight' on different conditions in php while also keeping your results semi-random?
我正在建立一个广告网络,我想显示具有最高CPM(非常重要)和最早的日期(不太重要)的广告。 但是,如果这样做,我将一直得到相同的广告,因此我也想在等式中增加一些随机性。
因此,我想制作一种算法,在满足这两个条件的同时增加一些权重,同时还保持半随机性。 我不知道从哪里开始,也找不到任何可以帮助我的东西。 如果您可以留下答案或向我推荐可以帮助您的事情,我们将不胜感激。
谢谢
如果您需要随机性和明确定义的概率分布,则可能需要在内存中存储所有广告。 我认为,这在您的应用程序中是不可行的,因此我将重点介绍另一种近似方法。 但是,在这个问题的结尾,我将再次谈到这一点。
中心方面是您需要一个结合了任意数量属性的单一重要性值。 在您的情况下,可能是以下情况:
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
广告,并定义此子集上的概率分布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.