创建用于在网站上轮播广告的算法/公式

时间:2013-09-05 16:34:14

标签: php mysql algorithm ads

我希望在网站上轮播广告,但我想提出一个考虑以下内容的公式:

  • 时间戳(最近创建的广告应具有高优先级)
  • 展示次数(具有较少观看次数的广告应具有较高优先级)。理想情况下,我希望为每个广告设置每月展示次数的配额。
  • 重量(重量较高的广告应具有高优先级)

然后在最后我想了解一些如何随机化结果。将这些因素纳入PHP脚本或mysql查询的最佳方法是什么?到目前为止,我尝试过这样的查询:

$result = mysql_query ("SELECT * FROM banner_ads  WHERE usedImpressions/totalImpressions < $threshold OR usedImpressions = 0 ORDER BY RAND() LIMIT 1");

但是当然,这里的一大限制是什么应该是一个很好的门槛值,它仍然没有考虑到它的创建的重量或时间戳。

1 个答案:

答案 0 :(得分:2)

不确定您是否只是要求查询,但伪代码/数学解决方案是:

首先计算每个广告的权重:

 CurrentWeight = BaseWeight 
               + AdPriority 
               - Impressions*ImpressionWeight 
               - (CurrentDate-CreateDate)*DateWeight;

然后,您的每个广告都有一定百分比的被挑选机会:

 PerAdPercentage = CurrentWeight / Sum(allCurrentWeightsAllAds)

使用该百分比为每个广告分配一个数字块(例如0-100)。现在使用随机数生成器选择该范围内的数字并选择获胜者。

要处理配额:

  1. 将其从搜索中包含的当前广告列表中删除,或
  2. 如果超过配额,则添加另一个重量以大幅折扣。
  3. 我还添加了一个值来优先排列距其配额最远的广告。

    回复:你的评论:

    当前体重应该计算您想要展示广告的频率。然后,将计算出的权重相互比较,以确定每个广告的相对优先级。如果每个广告都有一个数字块,具体取决于它的相对权重,那么你会更频繁地选择权重高于权重较小的数字。

    ImpressionWeight和DateWeight是您用来平衡/调整等式的任意数字,以便为您的体重计算适当的值 - 基本上将数字标准化。 (例如,假设您以毫秒为单位进行日期数学计算并得到大量数字,但使用1-10作为您的AdPriority - 如果将这些数字合并而不加权日期值以使其成为非常小的数字,则这些数字毫无意义)

    最后,您可能需要考虑日期和展示次数可以从总体权重中减去的最大值,因为您可能不希望将百分比/权重驱动为零。对于约会,你可能想要一些非线性衰变的东西。