高级横幅旋转算法

Sam*_*son 11 algorithm banner

我将很快开始一个横幅旋转脚本,我对如何开发它感到有些困惑.假设客户要求

"在未来10天内以10,000美元的价格获得10,000次展示."

另一位客户要求

"1,000美元的印象,100美元."

第三个要求

"1,000次点击或10,000次展示,价值5,000美元."

我究竟如何确定在页面请求中显示哪个横幅?我如何衡量一个与另一个相比?显然,第一个请求非常重要,因为我希望在一个时间窗口内提供一定数量的展示.

第二个客户并不是那么重要,因为他们不关心时间窗口,他们只是想要一些面对面的时间.

并且最后一位客户希望对展示次数/点击次数进行n或m限制,使事情变得更加困难.

我已经非常有信心我需要从这些场景中抽象出一些重量来确定谁最受关注.我的问题是什么类型的算法可以处理这个问题,其次我怎么能按重量提供横幅而不总是为每个请求提供最重要的横幅?

Alb*_*oPL 8

困难来自时间限制,而不是其他任何事情.我会将没有指定时间限制的任何人的优先级除以365(一年),然后将时间用作权重因子的一部分.所以:

Client 1 priority: 10000/10 = 1000 
Client 2 priority: 1000/365 ~ 3 
Client 3 priority: 10000/365 ~30
Run Code Online (Sandbox Code Playgroud)

这应该会给你一个相当不错的优先级指标.现在,你不能混合和匹配展示次数和点击次数吗?它们要么是印象路线,要么是点击路线.看到您无法控制点击,但您可以控制展示次数(至少比点击次数更多),我会根据展示次数来衡量.


Bob*_*Gee 6

使用随机数生成器选择要显示的广告,并使用每个广告的优先级对其进行加权.为需要更多展示次数或截止日期的客户设置更高的加权系数.如果时间差不多,您可以增加加权系数.

客户点击其请求的展示次数后,将权重降至0即可阻止其广告展示.

默认加权可以是1左右,允许客户支付额外费用以增加优先级(不告诉他们机制 - 将其作为"高级"展示位置等).


编辑:加权细节

您可以根据需要将其设置为简单或复杂,但基本版本将包含以下术语:

  • 如果广告已达到购买的展示次数/点击次数,则权重为0
  • 基本权重(可能是1.0)
  • 乘以impressions_remaining /所有客户剩余的总展示次数
  • 如果剩余的展示次数/点击次数很少,请添加一个小常量 - 确保他们获得完成帐户所需的最后几个
  • 截止日期客户:为(剩余展示次数/购买的展示次数)/(剩余时间/总时间)添加字词

截止日期客户应限制在所有页面显示的90%或某些内容,以确保他们不会胜过其他人.最后一个术语为截止日期客户提供了"紧迫性" - 它会在截止日期到达时无限期,因此您应该在剩余时间段上设置条件以防止出现问题.