【深度】广告流量分配HWM算法

article/2025/11/6 13:10:10

在广告投放系统中,广告通常分为保量交付广告(Guaranteed Delivery,GD,合约广告)和不保量交付(Non-Guaranteed Delivery,NGD,竞价广告)两种。合约广告是提前签好合约的,需要将广告投放给特定人群,投放到期如果投放量不足时会有赔偿。对于这个问题,就需要确定针对不同投放约束的客户,如何分配流量,才能使得收益最大,所以这个问题,本质上是流量分配问题。

1 流量分配问题抽象

流量分配问题,可简化为二部图(bipartite graph),如下图所示, ○ ○ 表示流量供给方的数据节点(不同的人群定向下的流量库存), □ □ 表示流量需求方节点(期望广告投放的特性人群定向的需求),两者之间会有很多的连线,每一条连线都代表供给方节点能支持需求方的定向需求,但不一定会分配。

供需二部图

2 HWM算法

HWM,即 High Water Mark Algorithm,HWM通过简单的启发算法解决库存分配的问题,算法主要思想是:首先考虑能满足合约的所有流量,流量越少重要程度越高更靠前,即更需要提前考虑,然后将流量按照所需量平分,转换为概率。

算法核心步骤如下:
step 1
初始化每个节点的剩余供给量 r i = s i r_i=s_i ri=si

step 2
计算所有符合约定投放量 d j d_j dj定向约束的供给流量和 S j Sj Sj

S j = ∑ i ∈ Γ ( j ) n ( s i ) ( 1 ) S_j=\sum_{i\in\Gamma(j)}^{n} (s_i) (1) Sj=iΓ(j)n(si)1

其中
s i s_i si:为第i节点预估库存量
S j S_j Sj:为满足 j j j定向条件的全部节点库存总量

根据公式(1)计算得

200k(Male): S 1 = 400 + 400 + 100 = 900 S_1=400+400+100=900 S1=400+400+100=900
200k(CA): S 2 = 100 + 100 = 200 S_2=100+100=200 S2=100+100=200
1M(Age=5): S 3 = 400 + 400 + 100 + 100 + 500 + 300 = 1800 S_3=400+400+100+100+500+300=1800 S3=400+400+100+100+500+300=1800

通过计算得出排序: S 2 S_2 S2 S 1 S_1 S1 S 3 S_3 S3,即优先分配可分流量少的广告

step 3
根据①计算的顺序2,1,3,依序计算各个合约的供给比例

∑ i ∈ Γ ( j ) n m i n ( r i , s i a j ) = d j ( 2 ) \sum_{i\in\Gamma(j)}^{n} min(r_i,s_ia_j)=dj(2) iΓ(j)nmin(ri,siaj)=dj2

其中:
Γ ( j ) \Gamma(j) Γ(j):为满足合约 j j j定向条件的所有人群集合
d j d_j dj:为合约 j j j的需求投放量

根据公式(2)计算:
对于2: 200 = m i n ( 100 , 100 a j ) + m i n ( 100 , 100 a j ) 200=min(100,100a_j)+min(100,100a_j) 200=min(100,100aj)+min(100,100aj)
a j = 1 a_j=1 aj=1
对于1: 200 = m i n ( 400 , 400 a j ) + m i n ( 400 , 400 a j ) + m i n ( 0 , 100 a j ) 200=min(400,400a_j)+min(400,400a_j)+min(0,100a_j) 200=min(400,400aj)+min(400,400aj)+min(0,100aj)
a j = 1 4 a_j=\frac{1}{4} aj=41
对于3: 1000 = m i n ( 300 , 400 a j ) + m i n ( 300 , 400 a j ) + m i n ( 0 , 100 a j ) + m i n ( 0 , 100 a j ) + m i n ( 500 , 500 a j ) + m i n ( 300 , 300 a j ) 1000=min(300,400a_j)+min(300,400a_j)+min(0,100a_j)+min(0,100a_j)+min(500,500a_j)+min(300,300a_j) 1000=min(300,400aj)+min(300,400aj)+min(0,100aj)+min(0,100aj)+min(500,500aj)+min(300,300aj)
a j = 5 8 a_j=\frac{5}{8} aj=85

:如果无解,则 a j = 1 a_j=1 aj=1

计算每个预约投放量的同时,要更新供给节点剩余量
r i = r i − m i n ( r i , s i α j ) r_i = r_i − min(r_i, s_iα_j) ri=rimin(ri,siαj)
这样,就可以按照对应比例进行流量分配,且能够保证不同人群定向的投放量。

注:该二部图并不是严格意义上的供给最小互斥散列集合

如上图,这是严格的最小互斥散列供给节点,该图参考【HWM在线分配算法】

参考文档
1 HWM算法论文,google学术下载
2 https://chierqj.github.io/hwm-zai-xian-fen-pei-suan-fa/


http://chatgpt.dhexx.cn/article/A7kYsRMj.shtml

相关文章

Oracle-HWM(High Water Mark) 高水位解读

读前须知:Oracle的逻辑存储管理 ORACLE在逻辑存储上分4个粒度 ,由大到小为: 表空间, 段, 区 和 块. 块Block 块:是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而…

Oracle 高水位(HWM: High Water Mark) 说明

一. 准备知识:ORACLE的逻辑存储管理. ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行. 每一个B…

分析HWM

下面结合官方文档和实验介绍下HWM: 以下英文摘自11gR2官方文档: HWM(high water mark):The boundary between used and unused space in a segment. ORACLE9i之后开始使用自动段空间管理即ASSM,它使用位图来管理段空间的使用情况,如果表空间ASSM,则表空间…

【计算广告】在线分配算法之 —— HWM(High water mark)介绍

该算法是雅虎工程师提出的一个解决合约制广告或者说GD(担保式投放)投放系统在线分配问题的贪心算法,思路很直接,下面是本人对照其论文整理的思路,里面有自己的理解。 论文题目:Ad Serving Using a Compact…

IMEI 码的校验和生成

IMEI 码的校验和生成 文章目录 IMEI 码的校验和生成IMEI 码Luhn算法代码实现C IMEI 码 IMEI 码,即手机的串号。它是 International Mobile Equipment Identity( 国际移动设备身份) 的简称,就像是手机的身份证,是用来帮助辨别手机身份真伪的。…

Android获取手机设备识别码(IMEI)和手机号码

最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考 必要的条件还是一部真机,SIM卡或者UIM卡。 首先,在AndroidMainfest.x…

手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)

文章目录 Android篇1 IMEI和MEID2 DeviceId3 mac地址4 ANDROID_ID5 UUID6 OpenUDID7 Serial Number8 IDFA9 GAID iOS篇1 IMEI2 IDFA3 mac地址4 UDID5 UUID6 如何正确的获取设备的唯一标识7 什么是钥匙串 Android篇 1 IMEI和MEID (1) IMEI (International Mobile Equipment Id…

什么是IMEI / MEID?他们有什么不同?

摘要: 最近小编了解到一个新的概念:MEID码。说实话,一开始小编并不了解这是个什么。小编以为是不是打字的时候打错了啊,是不是要了解的是IMEI码呢?后来百度了一下才知道我理解错了。小编就做一回好学生,在苹果手机找回…

手机IMEI码规则介绍

2019独角兽企业重金招聘Python工程师标准>>> 手机IMEI码由15-17位数字组成。 第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成(早期是6位),是区分手机品牌和型号的编码&#xff0c…

android 华为 imei,华为手机怎么查看IMEI码?华为手机查询IMEI串号两种方法,华为imei...

华为手机怎么查看IMEI码?华为手机查询IMEI串号两种方法,华为imei 每一部手机的串号都是不同的,如果想要查看华为手机的IMEI串号,我们该怎么样来查询呢?下面一起来看看操作的方法吧。 华为手机查询IMEI串号两种方法 方法…

IMEI是什么? 怎样查手机串号IMEI

IMEI的基本含义 IMEI(International Mobile Equipment Identity,移动设备国际识别码,又称为国际移动设备标识)是手机的唯一识别号码。我们从这个缩写的全称中来分析它的含义:“移动设备”就是手机,不包括便…

智能手机串号IMEI码丢失(无效IMEI)解决恢复办法

本方法本少爷亲测可行,故做一记录如下: 准备工作: 1、手机已经ROOT。没有ROOT的下载ROOT大师即可ROOT。 2、下载移动叔叔工具箱 3、下载MTK6575主板序列号及IMEI生成器 详细步骤 1、记录你的手机IMEI串号:IMEI串号,可以…

手机的imei号的获取

手机的设备信息,是我们在做证书验证的时候不可缺少的,这里我会写一些我们常用的手机信息获取办法。TelephonyManager是我们手机管理的一个大的类,继承的Object。 1核心代码和权限 Context.getSyste…

获取手机唯一识别码IMEI

前言 获取IMEI相信大家非常熟悉,但是项目中使用时,发现当手机卡为电信的时候,获取的并不是IMEI,而是MEID,什么是MEID,为什么会出现这种情况呢? IMEI国际移动设备识别码(IMEI&#xf…

IMEI、IMSI、ICCID、SN是什么?意义和区别?通信模组或手机的唯一识别码

最近在做几个4G移动端的产品,初入行门有很多生涩的名词。想获取一个全球唯一ID作为设备后台管理编号,就扯出了 IMEI、IMSI、ICCID、SN 这几个东西。 IMEI IMEI:国际移动设备识别码 (International Mobile Equipment Identity&…

ProtcolBuffer基础原理

Protocol Buffer由Google出品的一款轻量而高效的数据序列化和反序列化的方法,下面的我们来介绍一下Protocol Buffer的内部实现原理。 1.类实例 编码包括数据的编解码和函数方法的还原 2.ProtcolBuffer的数据类型 TypeMeaningUsed For0Varintint32, int64, uint32, uint64,…

ADI Blackfin DSP处理器-BF533的开发详解13:LDF内存分配的详解(含源代码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 ADSP上的LDF(Linker Description Files)连接器描述文件是处理器用来进行资源分配的文件,通过对LDF文…

M4内核的FPU/DSP使用总结

FPU简介 近年,在Cortex-M3之后ARM公司又推出Cortex-M4内核,ARM Cortex-M4处理器是由ARM专门开发的最新嵌入式处理器,在M3的基础上强化了运算能力,新加了浮点、DSP、并行计算等。Cortex-M4处理器的最大亮点之一,也是本文…

【STM32F407的DSP教程】第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波)

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波) 本章节讲解FIR低通滤波器实现。 目录 37.1 初学者重要提示 37.2 低通滤波器介绍…

【STM32F429的DSP教程】第41章 FIR滤波器的群延迟(重要)

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第41章 FIR滤波器的群延迟(重要) 本章节为大家介绍FIR滤波器的群延迟问题。 目录 41.1 FIR滤波后的群延迟 41.2 总结 41.1 FIR滤波后的群延迟 波…