我正在为ASP.NET网站创建广告系统。该网站有一个广告客户部分。他们在广告中注册并发布广告,他们将首先支付广告的最高预算,每日预算,因此广告客户可以控制他的预算,不同的广告客户会有很多广告在网站上展示。广告有两个属性:最高预算和每日预算,如何选择广告,广告可以展示多少次,任何人都可以为我提供方法或算法。
答案 0 :(得分:2)
嘿Priyan, 以下是我们在AdServerBeans中处理它的方法(http://www.adserverbeans.com - 它是开源的,您可以查看源代码):
DROP FUNCTION if exists get_speed;
CREATE FUNCTION get_speed(from_date DATETIME, to_date DATETIME, views_limit INT, views_served INT, now_date_time TIMESTAMP)
RETURNS double
DETERMINISTIC
NO SQL
BEGIN
DECLARE banner_total_serving_time INTEGER;
DECLARE banner_served_time INTEGER;
DECLARE percent_time_served DOUBLE;
DECLARE percent_ad_events_served DOUBLE;
IF (views_limit IS NULL OR views_limit=0) THEN RETURN -1;END IF;
IF (views_served IS NULL) THEN SET views_served = 0;END IF;
IF (banner_total_serving_time = 0) THEN SET banner_total_serving_time = 1;END IF;
IF (views_limit = 0) THEN SET views_limit = 1;END IF;
SET banner_total_serving_time = TIMESTAMPDIFF(SECOND, from_date, to_date);
SET banner_served_time = TIMESTAMPDIFF(SECOND, from_date, now_date_time);
SET percent_time_served = (100 * banner_served_time) / banner_total_serving_time;
SET percent_ad_events_served = (100 * views_served) / views_limit;
RETURN percent_ad_events_served - percent_time_served;
END
;;
此MySQL函数返回负数或正数。如果我们表现不佳则为负,如果表现不佳则为正。 表现不佳 - 发球,超越 - 跳到下一个横幅或不发球。
我希望输入参数不言自明。
答案 1 :(得分:1)
我建议查看调度算法。
例如,您可以使用预算来确定次数/期间(日/周/等),并将其用作weighted round robin schedule.中的加权因子这将是一种平衡的简单方法来自不同广告商的请求在时间上均匀。 (注意:上面的链接更适合网络数据包调度,但基本算法可以工作......)
答案 2 :(得分:0)
我认为你应该为你的问题使用不同的算法。通常在这种系统中你有:
如果太多算法是你不想处理的事情,那么只实施ASAP,我的意思是如果一个广告客户可以赢,他仍然会赢得他的每日预算结束