- 广告计划预算有限
- 匀速投放可以在一定程度上确保广告计划触及范围更广的人群
- 按小时平均。根据日预算和投放时段算出小时预算:小时预算=日预算/投放时段
- 预算消耗不完。流量有高峰有低谷,如果某个时段的流量无法承载日预算就可能出现预算无法消耗掉的情况
- 按剩余平均。我们修改计算小时预算的公式:小时预算=(日预算-已投放时段消耗)/未投放时段
- 日预算
- 投放时段
- 已投放时段消耗
- 小时预算
- 小时消耗
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;
}