关于SHALE的一些理解

554 阅读2分钟

贴一些关于SHALE之前的理解,先贴一版c++实现:

GitHub - linpingta/SHALE-Cplusplus: c++ version of SHALE paper, ad inventory allocation, HWM

不过我并不100%保证它是对的,毕竟没有在生产环境里使用 (原因:link:广告库存分配的一些想法),只是在几个简单case测试,看起来和我的预期差不多。

这篇文章不是SHALE算法的推导,推导可以看知乎上很多不错的介绍,我只是想record下自己的一些理解:

  • 在supply充足时,SHALE的目标会退化为HWM:因为它也依赖thetaIJ作为最优解,thetaIJ实际上和HWM用的是一致的
  • SHALE的online过程,本质和HWM是一样的,主要的区别在于HWM会直接拿alphaJ来random,SHALE会先根据alphaJ计算当前流量上的betaI, 在根据betaI和episonJ(拼写不一定敲得对,不过应该知道论文里对应是哪个)计算x_ij,x_ij的使用和HWM是一致的。
  • 接上一条,因为看起来online算出betaI后,并没有再进一步更新alphaJ,所以有个想法是betaI是否可以提前都算好?毕竟online计算还得解个方程,时间肯定会长,我对这点未必合理的解释是online过程中的流量i很多(有些流量还是新的),没法全部事先计算,不过这个解释是值得商榷的。
  • SHALE的offline收敛性我目前看到只有论文里有解释,不过实话说我也没看懂,assume。
  • SHALE的offline为啥要分stageOne和stageTwo:我理解stageOne的时候,没有考虑不同demand对相同supply的竞争,举个例子,两个demand1和demand2,如果它们定向相同,那么它们在stageOne解出来的alphaJ可能是一样的。在stageTwo的时候,episonJ计算是要考虑remaining supply约束的。
  • SHALE相比HWM,我理解本质上引入了penalty和value,也就是如果你把penalty设置成0,value设置成1,这个算法应该会退化为HWM。当然也可以引入别的约束(印象里阿里那个文章,引入了用户体验),从这个角度讲,SHALE更像是一个框架。
  • 从框架的角度讲,感觉可以想想是离线过程能不能完全当成linear programming问题来求解,毕竟LP有很多成熟的求解器。这点我记得HWM的complain主要是在线时候没法用,因为存储维度不是J而是I*J,但其实有些规模的问题是可以的,我也见过一些有趣的应用。

想到这些,先说到这里吧。不对的地方欢迎指点。