如何在高精度下求解亿级变量背包问题?
导读:国际顶级会议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
相关文章:

收集到的一些网络工程师面试题 和大家分享下
1: 交换机是如何转发数据包的?交换机通过学习数据帧中的源MAC地址生成交换机的MAC地址表,交换机查看数据帧的目标MAC地址,根据MAC地址表转发数据,如果交换机在表中没有找到匹配项,则向除接受到这个数据帧的端口以外的所有端口广播…

incompatible with sql_mode=only_full_group_by
使用mysql 5.7.11-debug Homebrew时报错 错误信息如下: 26 Mar 2016 09:35:23,432 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper:147 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘tv2.t_pic_news…
Java动态加载一个类的几种方法以及invoke
一.加载一个类的几种方法 接口 IUser package org.me.javaapp;/**** author Administrator*/ public interface IUser {}User.java /** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templ…
今晚20:00 | 港科大郑光廷院士详解人工视觉技术发展及应用
阳春三月,万象更新,2020年注定是不平凡的一年!有激荡就会遇见变革,有挑战就会迎来机遇。今天总会过去,未来将会怎样?香港科大商学院内地办事处重磅推出全新升级的《袁老师访谈录》全新系列【问诊未来院长系…

Openoffice 安装与配置
1、软件下载 路径:http://download.openoffice.org/ 2、软件安装 [rootOpenbo linux]# tar zxvf OOo_3.2.1_Linux_x86_install-rpm-wJRE_zh-CN.tar.gz[rootOpenbo linux]# cd OOO320_m18_native_packed-1_zh-CN.9502/[rootOpenbo OOO320_m18_native_packed-1_zh-CN.…

比较分析与数组相关的sizeof和strlen
// 形如: int a[]{1,2,3,4,5}; char name[]"abcdef";无论是整型数组还是字符数组,数组名作为右值的时候都代表数组首元素的首地址。数组发生降级(数组名退化为数组首元素的地址)的情况:数组传参、数组名参与…
Python正则表达式,看这一篇就够了
作者 | 猪哥来源 | 裸睡的猪(ID: IT--Pig)大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达式的函数。re模块主要定义了…
Spring MVC 4
Spring MVC 4 项目文件结构 pom.xml依赖 <properties><endorsed.dir>${project.build.directory}/endorsed</endorsed.dir><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies> …

SQL Server 2008高可用性系列:数据库快照
SQL Server 2008高可用性系列:数据库快照http://database.51cto.com 2010-09-13 14:45 我爱菊花 博客园 我要评论(0)摘要:我们今天要讨论的话题是数据库快照。在SQL Server 2008高可用性中,快照是一项很重要的内容,可以提供至…

PostgreSQL 9.3 beta2 stream replication primary standby switchover bug?
[更新]已有patch. 请参见.PostgreSQL 9.1,9.2,9.3 clean switchover Primary and Standby Patch. http://blog.163.com/digoal126/blog/static/16387704020136197354054/打补丁前的测试 : PostgreSQL 9.3 beta2 无法完成正常的主备角色切换.Primary : psql checkpont; pg_cont…

Apache commons-io
添加引用 <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>按行写: public static void writeFileLineByApacheIO(String fileContent) throws…

Oracle Exadata 简介
随着企业业务的发展,大型数据仓库越来越多,其规模也在迅速扩大,平均每两年规模增大3倍。大型数据仓库要求以最高的磁盘读取速度扫描几十、几百或几千个磁盘,只有磁盘和服务器之间的管道带宽增加10倍或更多才能满足此要求ÿ…
推荐系统的价值观
作者丨gongyouliu来源丨大数据与人工智能(ID: ai-big-data)推荐系统作为满足人类不确定性需求的一种有效工具,是具有极大价值的,这种价值既体现在提升用户体验上,又体现在获取商业利润上。对绝大多数公司来说ÿ…

PostgreSQL md5 auth method introduce, with random salt protect
在上一篇BLOG中介绍了不要在pg_hba.conf中使用password认证方法, 除非你的客户端和数据库服务器之间的网络是绝对安全的.http://blog.163.com/digoal126/blog/static/1638770402013423102431541/MD5方法,认证过程 : Encrypting Passwords Across A Network The MD5 authenticat…
常用Maven收集以及Maven技巧
1.完整的Maven的pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apach…
大促下的智能运维挑战:阿里如何抗住“双11猫晚”?
作者 | 阿里文娱技术专家子霖出品 | AI科技大本营(ID:rgznai100)2019 双 11 猫晚在全球近 190 个国家和地区播出,海外重保是首要任务,如何提升海外用户观看猫晚的体验?本文将详解双 11 猫晚国际化的技术挑战和技术策略…

这次真的是下定决心了
这次我想是真的,真的。 上上周买了一本书 数据结构 c版 看到这本书的重点 线性表第三节,看不下去了,由于我模板学的不怎么样,数据结构c版大部分涉及了c 的模板,而且我觉得这本书上的代码有些漏洞。上上周买书的第三天…

子弹实例化的代码
using UnityEngine; using System.Collections;public class fire : MonoBehaviour {public float rate 0.2f;public GameObject bullet;private void Start(){OnFire();}//实例化子弹public void Fire(){GameObject.Instantiate(bullet, transform.position, Quaternion.iden…
Shiro源码学习之一
一.最基本的使用 1.Maven依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.4</version></dependency><dependency> <groupId>org.slf4j</groupId> …

传百度要与阿里、腾讯争夺在线办公市场?“百度Hi”开放520人同时在线音视频会议
在线办公市场持续火热。4月20日,百度旗下在线办公平台“百度Hi”再升级,正式发布业内大规模的520人音视频会议,并支持多入口快速入会,加码在线办公。另有消息称,4月底,百度在线办公平台将发布重磅升级&…

SQL 2008 安装资料及下载地址
SQL Server 2008 序列号: Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYB Enterprise: JD8Y6-HQG69-P9H84-XDTPG-34MBB 服务器设置SQL Server 代理 NT AUTHORITY\SYSTEMSQL Server Database Engine NT AUTHORITY\NETWORK SERVICE SQL Server Browser 默认 SQL Ser…

Objective-C非正式协议与正式协议
为什么80%的码农都做不了架构师?>>> 类别与类扩展的区别: ①类别中只能增加方法; ②是的,你没看错,类扩展不仅可以增加方法,还可以增加实例变量(或者合成属性)ÿ…
Shiro源码学习之二
接上一篇 Shiro源码学习之一 3.subject.login 进入login public void login(AuthenticationToken token) throws AuthenticationException {clearRunAsIdentitiesInternal();Subject subject securityManager.login(this, token);PrincipalCollection principals;String hos…

Widgets 整理
1.滑动条 http://www.newnaw.com/pub/sl/031.html <--!grid中的内容--> <Grid x:Name"slidergrid" HorizontalAlignment"Left" VerticalAlignment"Center" Background"Azure" Margin"20"> <StackPane…
黑客用上机器学习你慌不慌?这 7 种窃取数据的新手段快来认识一下!
作者 | IrrfanAk译者 | 天道酬勤、Carol 责编 | Carol出品 | AI科技大本营(ID:rgznai100)机器学习以分析大型数据集和模式识别的能力而闻名。它基本上属于人工智能的一个子集。而机器学习使用的算法,是利用了先前的数据集和统计分析来做出假设…

ServletResponse-中文名的下载
2019独角兽企业重金招聘Python工程师标准>>> package com.httpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.se…
Linux环境编译安装OpenJDK
Centos6.5 AMD64位机器 Java的源码是C,C和Java实现的,所以还需要有一个安装好的java建议选OracleJDK参考文末 安装OracleJDK Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序 安装依赖 | Install dependence # yum -y install gcc gcc-c alsa-lib alsa-…
最快69秒逆向DRAM地址映射,百度设计的这款逆向工具如何做到快速可靠?
来源 | 百度安全实验室出品 | AI科技大本营(ID:rgznai100)导读:近日,国际顶级设计自动化大会DAC大会公布DAC 2020会议议程和论文名单,由百度安全发表的《DRAMDig: AKnowledge-assisted Tool to Uncover DRAM Address M…

国外厂商在行业客户上输单的原因
这两天听一个朋友聊天发泄,他在一家总代J公司工作,代理业内排行第一的国外厂商C公司的产品,他负责D行业在南方某几个省的销售业务,工作中需要与C公司的销售紧密配合。经过接近一年的工作,他拿到一些项目,但…

[android] 从gallery获取图片
效果就是点击按钮,打开系统图库应用,可以选择一张里面的图片展示出来 设置隐式意图 获取Intent对象,通过new出来 调用Intent对象的setAction()方法,设置动作,参数:Intent.ACTION_PICK 调用Intent对象的setT…