引入

本文介绍利用 WQS 二分优化动态规划问题的方法。在不同的文章中,它也常称作带权二分、凸优化 DP、凸完全单调性 DP、Lagrange 乘子法等,在国外也称作 Aliens Trick。它最早由王钦石在《浅析一类二分方法》一文中总结。

WQS 二分通常用于解决这样一类优化问题:它们带有数量限制,直接求解代价较高;但一旦去除这一限制,问题本身就变得容易得多。

比如,假设要解决的问题是,要从 个物品中选取 个,并最优化某个较复杂的目标函数。如果设从前 个物品中选取 个,目标函数的最优值为 ,那么原问题的答案就是 。这类问题中,状态转移方程通常是二维的。直接实现该状态转移方程,时间复杂度是 的,难以接受。

进一步假设,没有数量限制的最优化问题容易解决。但是,选取到的最优数量未必满足原问题的数量限制。假设选取的物品过多。那么,就可以考虑在选取物品时,为每个选取到的物品都附加一个固定大小的惩罚 (即「带权二分」中的「权」),仍然解没有数量限制的最优化问题。根据 的取值不同,选取到的最优数量也会有所不同;而且,随着 的变化,选取到的最优数量也是单调变化的。所以,可以通过二分,找到 使得选取到的最优数量恰为 。假设此时目标函数的最优值为 ,那么,只要消除额外附加的惩罚造成的价值损失,就能得到原问题的答案 。假设单次求解附加惩罚的问题的复杂度是 的,那么,算法的整体复杂度也就降低到了 ,其中, 是二分 需要的次数。

这就是 WQS 二分的基本想法。但是,这一想法能够行得通,前提是 关于 是凸的。否则,可能不存在使得最优数量恰为 的附加惩罚 。这也是这种 DP 优化方法常常称为「凸优化 DP」或「凸完全单调性 DP」的原因。

传统方法

设非空集合 为(有限的)决策空间, 为目标函数,且另有函数 用于施加限制。需要求解的问题,可以看作是计算如下最优化问题的价值函数 在某处的取值:

比如,对于前文提到的限制数量的问题, 可以理解为所有物品集合的子集族, 是单个子集, 是单个子集的价值函数, 是子集 中的元素个数。当然, 并非只能是数量限制,后文提供了更为广泛的限制条件的例子。

约定

为了行文方便,本文仅讨论最小化目标函数的问题。最大化目标函数的问题与之相仿,只是需要将本文中的(下)凸函数相应地替换成凹函数(或称上凸函数)。或者,可以通过添加负号,将最大化目标函数的问题,转化为最小化它的相反数的问题。

几何直观

因为算法竞赛中遇到的大多数问题都是组合优化问题,决策空间 通常没有良好的结构,所以,可以转而考察集合

传统方法能够解决的主要是 的情形,即只有一个限制的情形。下图提供了此时点集 的一种可能的图示。

图中的红点和蓝点是 中所有可能的选择投影在平面 上得到的集合 。于是,原问题所要求的就是横坐标为 的那些点中,纵坐标的最小值 。当 变动时,所有这样的点 就构成了图中的红点的集合。

为了求得点 的纵坐标,可以考虑用斜率为 的直线去切集合 。如图所示,当直线的斜率选取得恰当时,经过点 的那条直线,是所有经过集合 中的点且斜率为 的直线中,截距 最小的。将这一最小值记为

那么,因为 同样位于该直线上,就可以得到原问题的解

假设对于所有合理范围的 ,上述函数 都是容易求解的。这在算法竞赛中常常是成立的,因为它去掉了原问题中的限制条件。那么,现在面临的最为重要的两个问题,就是

  1. 是否存在这样的直线斜率 ,使得它的截距最小值恰好取得在点 处,以及
  2. 如果存在,如何找到这样的斜率

第一个问题相对容易解决。因为当直线斜率 发生变化时,所有这些直线切出的集合(即它们对应的上半平面的交)必然是一个凸集。因此,这些直线能够经过某个点,当且仅当这个点在该凸集的下凸壳上。这等价于说,函数 凸函数

第二个问题则更为精细。因为所求点的横坐标已经知道是 ,所以,一个自然的思路是,计算 时,顺便求出限制函数 在当前最优解 处的取值。比如,在前文提到的例子中,求解带惩罚的问题时,可以记录带惩罚的目标函数取得最优解时,选取的物品数量。然后,将 与所期望的 进行比较,并相应调整下次计算时的 的取值。这就是最为传统的 WQS 二分的方法。

总结一下,传统 WQS 二分的基本流程如下:

  1. 初始时,选取一个 的合理的区间;
  2. 在当前的区间中选择一个
  3. 求解带惩罚的问题 ,并记录它的最优解 的取值
  4. 如果 ,就得到原问题的最优价值 ,直接结束算法;
  5. 否则,根据 的大小关系,调整 的区间,并回到步骤 2。

这一基本流程已经足以解决一些问题,但并不完善。接下来,本文将讨论对这一基本流程的改进。

共线情形的处理

在应用基本流程时,首先遇到的问题就是共线情形无法正确处理。

如果点集 的下凸壳上有三个及以上的红点共线,那么在上述基本流程中,可能无法正确地判断 的大小关系。比如,设共线的三个红点的横坐标分别为 ,且它们共线的直线的斜率为 。那么,要正确求解 ,就必须保证算法终止时,最后计算的问题是 ,因为 是唯一一个最小化截距时能够经过点 的直线的斜率。但是,因为在求解 的过程中,记录的 可能是 中的任意一个。如果记录到的 不等于 ,那么算法将错误地继续运行,并向着背离 的方向调整 的区间,最终将得到错误的结果。

为了解决共线的情形,一种处理方法是在记录最优解 对应的 时,总是使之尽可能大(或尽可能小)。同时,将二分中的终止条件从寻找恰好满足 改为寻找满足 (或 )的最小(或最大)的 。在上一段的例子中,这相当于计算问题 时,输出的 。这就保证了算法终止时,最后计算的问题是 。实现这一方法时,需要注意最后输出的不是 而是 ,因为记录的 未必等于实际的限制

另一种处理方法是实数二分。如果问题涉及的数字都是整数,显然,WQS 二分中的斜率也是整数。在二分中引入实数,是为了保证错误地排除正确选项 时,可以通过小数部分调整回来,最终逼近正确答案 。例如,在上面的例子中,如果计算问题 时,记录的 ,小于所希望的 ,那么,算法就会转而考虑区间 ,其中, 所在区间的右端点。对于整数的情形,这一区间实际应该写作 ,这就排除了在后续算法中接近正确答案 的可能。但是,实数二分时,考虑的区间仍然是 ,而且,对于该区间中的 ,求解 时记录的 总是不小于 ,从而严格大于 的。因此,随着算法继续进行,会不断地舍去右半区间,从而,最终得到的 的范围可以保证在 附近。当然,因为已经知道所求的斜率是一个整数,实数二分终止时的精度不必太高,只要能保证二分的区间中只包含一个整数即可,这一整数就是要寻找的

正确地处理共线情形后,WQS 二分足以解决绝大多数算法竞赛会遇到的 WQS 二分的问题。但是,这一方法仍然存在一些不足之处:它无法处理 难以记录的情形,也无法处理高维 WQS 二分中多个点共面的情形。本文将进一步考察最优化问题 的性质,并提出更为一般的处理方法。

对偶方法

本节介绍一种 WQS 二分的实现方法,它只要求对于所有 ,可以高效地计算

的取值,且原问题的最优价值 是关于 的凸函数 1。用一句话概括,本节将证明原问题的价值函数 就等于它的对偶问题的最优价值

而对偶问题的目标函数是关于 的凹函数,从而是单峰函数,可以通过 三分法黄金分割法 高效地求解,复杂度仍然是 的。这就完全地解决了传统 WQS 二分方法中记录 的值可能会出现的问题,同时,允许将 WQS 二分的思想应用至高维的情形。

另外,本节还说明, 的范围可以通过 求得,而无需在求解 时额外记录。例如,对于 且问题只涉及整数的情形,可以证明 的取值范围恰为

这实际上也对于不得不采取前文所述二分流程的题目,提供了又一种解决共线问题的方法。

接下来,本节将用凸分析的理论证明这些结论成立。至于这些方法的具体应用,可以参考 例题 一节。

Lagrange 对偶

考虑用 Lagrange 乘子法 解决该问题。引入 Lagrange 乘子 ,那么,Lagrangian 可以写作

因为只要 有一个分量非零,就可以让相应的 的分量趋于(正或负)无穷,所以有

这说明,原问题可以写作

交换两次最值操作,就得到它的 对偶问题

马上要说明的是,在 是关于 的凸函数的条件下,强对偶(strong duality)成立,即

凸共轭

为了说明强对偶成立,需要引入凸共轭的概念。

凸共轭

对于函数 ,它的 凸共轭(convex conjugate),或称 Legendre–Fenchel 变换(Legendre–Fenchel transformation),是指函数

从变量 的角度看, 是一系列线性函数的上确界,所以,必然是 上的凸函数。

超平面的「斜率向量」和「截距」

本文所讨论的向量空间 中的超平面的方程都具有形式

也就是说,本文不会涉及平行于 轴的超平面。为表述方便,本文并不严谨地将 称为该超平面的「斜率向量」, 称为该超平面的「截距」。将这一超平面的方程写成更标准的形式,就是

它的一个法向量是 。因此,所谓的斜率向量其实是将超平面的法向量归一化使得它的最后一个分量等于 时,所得到的法向量的前 个分量。

几何直观上,函数 的凸共轭描述的是,对于所有斜率向量为 且与函数 的上境图

相交的超平面,截距 的最小值就是 。换句话说,函数 总在超平面 上方,且与该平面切于点 ;当然,可能存在其余的切点。这样的超平面,称为 处的 支撑超平面(supporting hyperplane)。函数 的一个支撑超平面的截距由它的斜率向量唯一确定,凸共轭就提供了这个从斜率向量到截距的映射。

在集合 上最小化 就等价于在集合 上最小化

因此,有

这说明 是关于 的凹函数。进而,有

也就是说,对偶问题的价值函数 是原问题的价值函数 的双重凸共轭,也称为 双共轭(biconjugate)。

所以,问题转化为:什么样的函数 满足它的双共轭就等于它自身?这一问题的答案由如下定理给出:

定理(Fenchel–Moreau)

对于函数 ,它的双共轭等于它自身,即 ,当且仅当以下三个条件之一满足:

  1. 是正常凸函数且 下半连续
  2. ,或

因此,强对偶成立,当且仅当 是关于 的凸函数 2

次梯度

上一节说明了,带惩罚的问题的价值函数 是原问题的价值函数 的凸共轭的相反数。因为凸共轭的定义实际上是一个含参数的最优化问题,所以它也成立类似 包络定理 的结论。但是,因为凸函数并非处处可微的,所以需要首先将导数的定义推广到凸函数的情形。这就引出了次梯度的概念。

次梯度

对于凸函数 ,如果向量 满足对于任何 ,都有

那么,就称 处的一个 次梯度(subgradient)。函数 处的全体次梯度的集合称为它在该处的 次微分(subdifferential),记作

几何直观上,凸函数 处的次微分,就是它在该处的所有支撑超平面的斜率向量的集合。对于一维的情形,次微分

其中, 分别是函数 处的左右导数。进一步地,对于整数集上的凸函数 延拓而来的 ,它在整数点 处的左右导数就是左右两侧的一阶差分:

显然,凸函数 在点 处可微,当且仅当它在该处的次微分 是单点集。

因为凸共轭提供了从支撑超平面的斜率向量到它的截距的映射,所以,利用凸共轭,可以判断一个斜率向量 是否是凸函数 在给定点 处的一个次梯度。

定理(凸共轭与次梯度)

对于正常凸函数 和任意 ,都有

进而,如果 还是下半连续的,那么这两个条件都等价于

这一结论说明,如果 ,那么凸共轭 处的次微分 ,恰好就是斜率向量为 的支撑超平面与上境图 的交点的 分量的集合。

推论

对于下半连续的正常凸函数 和任意 ,都有

应用到本文的场景中,这一结论说明,求解问题

时,限制函数 在最优决策集合上的取值恰为 。对于 且问题只涉及整数的情形,这一集合就是区间

对于连续的整数 ,这些区间首尾相接,所以,如果用于二分,只需要计算一侧的端点即可。

凸性证明

应用 WQS 二分的前提条件是价值函数的凸性。在算法竞赛中,可以通过打表、感性理解等方式猜测凸性成立。但是,严格地证明凸性成立,往往并不容易。本节结合如下经典题目,介绍算法竞赛中常见的证明凸性的方法。

种树问题

个树坑,要种 棵树。树不能栽种于相邻的两个坑。给定长度为 的序列 ,表示在每个坑种树的收益,收益可正可负。求种完这 棵树最大可能的收益和。

简言之,就是在长度为 的链上,求解大小为 的最大权独立集的问题。

这些方法粗略地可以分为四类:

  • 归约为凸优化问题(包括 线性规划 等)的价值函数对参数的凸性,这包括建立 费用流 模型等方法;
  • 利用状态转移方程也可以归纳地证明凸性成立,过程中可能会用到一些 保持凸性的变换
  • 对于区间分拆类型的问题,可以验证每段区间的成本函数满足 四边形不等式
  • 最后,对于特殊的问题,也可以通过交换论证直接说明凸性成立。

这些证明方法本身往往都同该问题的某种解法联系在一起。

归约为含参凸优化

考虑如下形式的含参凸优化问题:

其中,目标函数 对于每个 都是关于 的凸函数,而可行域 上的集合值函数,且对于每个 ,集合 都是凸集。这些条件保证了对于任意参数 ,这都是一个凸优化问题。

定理

假设上述含参凸优化问题满足如下条件:

  1. 目标函数 是关于 的凸函数;
  2. 可行域映射 的图像 是凸集。

如果对于任意 ,都有 ,那么,价值函数 是关于 的正常凸函数。

算法竞赛中,最为常见的凸优化问题就是线性规划问题。

推论

。考虑如下含参线性规划问题:

那么,价值函数 是关于 的凸函数。

无论是不等式约束,还是等式约束,线性规划的价值函数都是约束条件参数的凸函数。

很多图论问题都可以写成线性规划问题的形式:

  • 网络流问题:最大流、最小割、最小费用流;
  • 无负环的最短路问题;
  • 二分图的最大(权)匹配、最小点覆盖等问题;
  • 一般图的最大(权)匹配问题;
  • 最小生成树问题 3

因此,这些问题的价值函数都是这些问题的参数的凸(凹)函数。

整数约束

利用图论模型为实际问题建模时,通常有隐含的整数限制,例如一条边只能选或不选、流量只能是整数等。因此,它们只能转化为整数线性规划(integer linear programming, ILP)问题而非线性规划(LP)问题。因为 ILP 问题并非凸优化问题,所以它的价值函数未必是该问题的参数的凸函数。将一个 ILP 问题中的整数约束松弛掉后就得到一个 LP 问题,但后者未必存在满足整数约束的最优解。因此,松弛整数约束后得到的 LP 的最优价值有可能严格优于相应的 ILP 问题,两者未必等价。

上文列举的那些图论问题,都可以写成一个 LP 问题而不需要施加整数约束;但对于其他的一些问题,例如一般图的最大独立集问题等,整数约束则是必要的。另外,即使一个图论问题可以写成 LP 的形式,在该问题引入额外的线性约束条件后,仍然可能会破坏相应的 ILP 问题和 LP 问题的等价性,从而这个带约束的图论问题不再能够写成线性规划的形式。

例如,在费用流的语境下,有如下常见结论:

推论

最小费用流模型 中,最小费用 是流量 的凸函数。

算法竞赛中很多问题都可以归约为网络流等图论问题,从而都可以通过类似的方式建立价值函数的凸性。

利用这一方法,可以得到种树问题的第一个凸性证明:

利用状态转移方程

尽管状态转移方程无法提供有效的计算方式,但是,它常常可以用于证明状态函数 对于参数 具有凸性。具体地说,就是将 这一函数视为 处的状态,就可以将关于 的状态转移方程看作是关于 的递推关系,从而可以归纳地证明每个 都是凸函数。这类证明凸性的方法在 Slope Trick 优化 DP 的场景中更为常见,该页面也讨论了常见的保持凸性的变换。

这一方法同样可以用于证明种树问题的凸性:

四边形不等式

算法竞赛中,另一类常见的成立凸性的问题是 区间分拆问题。该页面证明了,如果单个区间的成本函数满足四边形不等式,那么限制区间个数的区间分拆问题的最小成本是区间个数的凸函数。该页面同样提供了一些判断某个函数 是否满足四边形不等式的方法。最为直接的方法就是计算它的二阶混合差分:

函数 满足四边形不等式,当且仅当 非正。直观上,满足四边形不等式的函数通常意味着,区间向两侧扩大——即左端点向左移动和右端点向右移动——具有某种协同效应。

种树问题同样可以看作是一个区间分拆问题,可以通过验证四边形不等式进行证明。

交换论证

组合优化问题中,证明价值函数的凸性常常会用到交换论证(exchange argument)。具体地说,就是从参数为 的问题的最优解出发,通过交换部分元素,构造出参数为 且价值不超过 的可行解,从而利用 的最优性来证明凸性的论证方法。相较于凸优化的情形,组合优化问题中并不存在自然地构造两个解的「中间形态」的方法,因此,交换论证的应用通常具有一定的技巧性。

「边际成本递增」并不一定导致凸性

组合优化问题中,目标函数常常具有一些「边际成本递增」的性质,但是这并不必然导致凸性。一个典型的例子是 [IOI 2005] Riv 河流,该问题的链上版本是满足四边形不等式因而具有凸性的,但是树上版本存在凸性不成立的例子。

用于刻画「边际成本递增」的一个常见性质是函数的超模性(supermodularity)。对于有限集合 的子集族 上的函数 ,如果它满足以下两条等价性质之一:

  1. (交叉小于包含)对于任何子集 ,都有 成立;
  2. (边际成本递增)对于任何子集 以及 ,都有 成立;

就称函数 超模的(supermodular)。但是,超模函数作为目标函数的最优化问题中,价值函数

未必 的凸函数。究其原因,就是从子集大小分别为 的最优解,一般来说是无法构造出子集大小为 且满足前述价值函数大小关系的可行解的。

交换论证提供了种树问题凸性的又一种证明方式。

例题

本节介绍几个不同场景下应用 WQS 二分方法的例题。

模板题目

个树坑,至多 棵树。树不能栽种于相邻的两个坑。给定长度为 的序列 ,表示在每个坑种树的收益,收益可正可负。求种完这 棵树最大可能的收益和。

区间分拆问题

给定长度为 且递增的正整数序列 表示一条高速公路旁的 个村庄的位置,需要修建 个邮局。邮局位置的选择,需要最小化所有村庄与其最近邮局的距离之和。求这个最小值。

二维的限制条件

只神奇宝贝,序列 分别表示用宝贝球和超级球抓到第 只神奇宝贝的概率。可以向一个神奇宝贝扔一个宝贝球,或者扔一个超级球,或者两种球各扔一个,或者什么球都不扔。现有 个宝贝球和 个神奇球,需要合理分配,并同时扔出。求抓到的神奇宝贝的期望数量的最大值。单次抓捕成功与否,与其它抓捕的结果无关。

更一般地,可以抽象为如下问题:

给定长度为 的三个正实数序列 ,而且,对所有 都有 成立。求最优的下标集合 满足 且最大化

更广泛的限制条件

条线段,它们的长度由序列 给出。可以将它们任意切割为若干条整数长度的线段,目标是最小化所有线段长度平方的总和。求至少需要切割多少次,才能使这个平方和降到不超过

习题

最后,列举一些可以通过 WQS 二分解决的题目,以供练习:

参考资料与注释

Footnotes

  1. 实际问题中, 可能只能取到 中的有限多个格点。此处实际需要的条件是,原问题的解 可以延拓为 上的凸函数 ,也就是说 可凸延拓的(convex-extensible)。为行文方便,正文中仍然用 表示延拓后的函数。几何直观上,这相当于说点集 全部都位于它们的凸包的下凸壳上。对于一维的情形,这一条件利用代数语言 很容易刻画;但是,对于高维的情形,这稍微有些复杂,这份讲义 中提供了一些简单的充分条件。

  2. 定理中提供的条件看似比凸函数更强一些,但是,对于算法竞赛能够遇到的情形,特别是 为有限集合时,仅强调凸函数就已经足够。由离散集合上的正常凸函数 延拓而来的函数 必然是下半连续的凸函数,因为有限多个点的凸包必然是闭凸包,而所谓下半连续的凸函数,就等价于它的上境图是闭凸包。至于正常凸函数中的「正常」一词,只要 在至少一个点处取得有限值且是凸函数,就可以保证。

  3. 最小生成树问题有两种常见的写成线性规划问题的 方法:子回路消除模型(subtour-elimination formulation)和基于割集的模型(cut-based formulation)。只有前一种建模方式能够保证得到的线性规划问题和原问题是等价的。

  4. 这一引理对于一般的 拟阵 也是成立的。它称为 对称基交换性质(symmetric base-exchange property),相关资料可以参考 Wikipedia 页面。因此,本题关于凸性的结论可以推广到一般的拟阵上。

  5. 当然, 和它限制在整点上得到的函数的凸包并不相同,因为 可能存在非整数位置处的极点。这说明,并不能将定义域为实数的 直接用于本题的最优化问题中。