我正在为一个ASP.NET网站创建一个广告系统。这个网站有一个为广告商准备的栏目。他们在那里注册和发布广告,他们会先为广告支付最高预算,有一个每天的预算,这样广告商就可以控制他的预算,会有很多来自不同广告商的广告在网站上显示。广告有最大预算和每日预算两个属性,我如何选择广告,一个广告可以显示多少次,谁能给我一个方法或算法。
发布于 2009-03-25 05:02:04
我建议看一下调度算法。
例如,您可以使用预算来确定次数/周期(天/周/等),并将其用作weighted round robin schedule.中的权重因子这将是一种简单的方法,可以在一段时间内均匀地平衡来自不同广告商的请求。(注意:上面的链接更适合于网络数据包调度,但基本算法可以工作...)
发布于 2010-10-27 21:02:47
嘿,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函数返回负数或正数。如果我们表现不佳,则为负值;如果表现优异,则为正值。表现不佳-发球,表现超群-跳到下一个标语或不发球。
我希望输入参数是自解释的。
发布于 2016-01-12 08:25:09
我认为你应该使用不同的算法来解决你的问题。通常,在这样的系统中,你有:
如果太多的算法是你不想处理的事情,那么只需尽快实现,我的意思是,如果广告商能够获胜,他仍然会赢得他的日常预算。
https://stackoverflow.com/questions/680264
复制相似问题