如何在高精度下求解亿级变量背包问题?

 

导读:国际顶级会议WWW2020将于4月20日至24日举行。始于1994年的WWW会议,主要讨论有关Web的发展,其相关技术的标准化以及这些技术对社会和文化的影响,每年有大批的学者、研究人员、技术专家、政策制定者等参与。以下是蚂蚁金服的技术专家对入选论文《Solving Billion-Scale Knapsack Problems》做出的解读。

作者 | 齐冯

出品 | AI科技大本营(ID:rgznai100)

背包问题 (knapsack problem) 是经典的整数规划问题,求解如何从多个物品中选取一个子集放入背包,在容量限制下最大化子集的效用。互联网场景下很多问题可以看成超大规模的背包问题或者它的变种问题,比如红包营销,用户流量分配等,都有某种总资源的限制,需要在大量的用户粒度的决策中选取一个子集来最大化业务收益。


由于背包问题是 NP-hard,求解复杂度高,所以精确算法无法做较大规模的求解。而近似类算法对问题的形式化有具体要求,实际业务的需求一般不会严格符合背包问题的定义,所以需要求解算法有更强的泛化性和通用性。因此,如何在高精度下求解超大规模背包问题及其变种问题仍然是一个挑战。

 

简介

据我们所知,我们的工作是最早做到对亿级变量的背包问题求解工作之一。我们的问题形式化涵盖了互联网海量数据场景下的泛化背包问题。它的“物品”有两个维度:用户和选项,即“为每位用户选择哪些选项”。它的“背包容量”扩展到了多个维度,即每个用户的每个选项可以消耗多个不同的资源。同时我们还支持对每个用户的选项做任意整数规划的约束。整个形式化的数学表达如下:

上式中的 (2) 为资源约束,我们称之为“全局约束”,一般不超过几十个或上百个,(3)为每个用户的选则规则,我们称之为“局部约束”,数量可以上亿。为了求解这个超大规模的泛化背包问题,我们采用拉格朗日松弛求解整数规划(Lagrangian relaxation for integer programming)的框架,将全局约束(2)乘以拉格朗日乘子后合并到目标函数(1)中。给定拉格朗日乘数,松弛过的问题可以拆解为每个用户独立的整数规划问题,这些问题数量可能上亿,可以并行化求解。


当这些整数规划的约束(3)符合特定的层级化形式时,我们提出了可以求得最优解的多项式复杂度算法,而更复杂的约束形式则可以通过通用整数规划求解器求解。为了求得拉格朗日乘数的最优解,我们采用同步坐标梯度下降(Synchronous Coordinate Descent)法在当前拉格朗日乘数的基础上对每个乘数做独立并行优化。整个算法交替进行拉格朗日乘数更新和独立并行整数规划这两个步骤,直到收敛。解决方案的实现在 Apache Spark 上通过 MapReduce 接口完成。

 

解读

拉格朗日松弛求解整数规划的框架只提供最优解的验证条件,我们仍需要对具体的算法验证解的正确性和求解流程的速度。为验证正确性,我们对比了我们的算法的解和单纯形法 (Simplex) 求解线性松弛后问题的解,还评价了我们解的对偶间隙 (duality gap),发现我们求得的目标函数值距离理论上界差距极其微小(~1%),在超大规模问题上可以忽略不计。

速度方面,我们的 MapReduce 实现求解亿级变量十级资源约束的问题可以在一小时内收敛,占用 200 个 Spark executors (1600 个CPU)。此外,我们对比了同一框架下常用的对偶梯度下降(Dual Descent)和我们设计的SCD这两种方法。后者不仅在需要的迭代轮数上少于前者,在约束的遵守上也远比前者严格。我们设计的 SCD 利用拆解后的子问题的具体形式预判重要的拉格朗日乘数值,用高精度扫描最优解附近的乘数值,从而达到快速准确的收敛。

 

前景

我们泛化后的背包问题形式覆盖了很多互联网场景下的用户颗粒度的多资源分配问题,同时我们的实现以及业务落地经验证明了我们求解方法在超大规模优化问题上的可操作性和实际效果。因此这个解决方案应该对互联网行业有较强的参考价值。

今日福利

遇见陆奇

同样作为“百万人学 AI”的重要组成部分,2020 AIProCon 开发者万人大会将于 7 月 3 日至 4 日通过线上直播形式,让开发者们一站式学习了解当下 AI 的前沿技术研究、核心技术与应用以及企业案例的实践经验,同时还可以在线参加精彩多样的开发者沙龙与编程项目。参与前瞻系列活动、在线直播互动,不仅可以与上万名开发者们一起交流,还有机会赢取直播专属好礼,与技术大咖连麦。

门票限量大放送!今日起点击阅读原文报名「2020 AI开发者万人大会」,使用优惠码“AIP211”,即可免费获得价值299元的大会在线直播门票一张。限量100张,先到先得!快来动动手指,免费获取入会资格吧!

点击阅读原文,直达大会官网。

  • 你点的每个“在看”,我都认真当成了AI

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值