当前位置: 代码迷 >> 综合 >> 聊聊广告系统里的匀速投放
  详细解决方案

聊聊广告系统里的匀速投放

热度:40   发布时间:2024-02-04 18:52:26.0

为什么要匀速投放?

  1. 广告计划预算有限
  2. 匀速投放可以在一定程度上确保广告计划触及范围更广的人群

如何实现匀速投放?

  • 按小时平均。根据日预算和投放时段算出小时预算:小时预算=日预算/投放时段

匀速投放的问题?

  • 预算消耗不完。流量有高峰有低谷,如果某个时段的流量无法承载日预算就可能出现预算无法消耗掉的情况

如何解决

  • 按剩余平均。我们修改计算小时预算的公式:小时预算=(日预算-已投放时段消耗)/未投放时段

匀速投放中涉及的几个计算值

  • 日预算
  • 投放时段
  • 已投放时段消耗
  • 小时预算
  • 小时消耗

代码实现

public class AdPlanInfo {/*** 广告计划ID*/private Integer planId;/*** 投放时间段*/private int[] periods;/*** 日预算*/private int dailyBudget;}
    public boolean filter(AdPlanInfo adPlanInfo) {// 获取当前投放时段Calendar calendar = Calendar.getInstance();int currHour = calendar.get(Calendar.HOUR_OF_DAY);// 获取当日总消耗int dailyConsumed = getDailyConsumed();// 获取小时消耗int hourConsumed = getHourConsumed(currHour);// 计算小时预算int hourBudget = computeHourBudget(currHour, adPlanInfo, dailyConsumed - hourConsumed);if (hourConsumed >= hourBudget) {return true;}return false;}private int computeHourBudget(int currHour, AdPlanInfo adPlanInfo, int consumed) {int remainingHour = 0;int[] periods = adPlanInfo.getPeriods();for(int i=0;i<periods.length;i++) {if(periods[i]>=currHour) {remainingHour++;}}return (adPlanInfo.getDailyBudget() - consumed) / remainingHour;}

 

  相关解决方案