0.前言

老早以前就看到这玩意儿了,但是没当回事。

然后今天遇到了这样的题……被摁得死死的。

【学习笔记】分数规划
私以为,胡伯涛将这个问题讲得很严谨。这里就直接将他的东西拷下来吧!

可以去看看别人的博客,也是可以的。毕竟我只是拾人牙慧而已。

1.分数规划

先给出 分数规划(fractional programming) 的一般形式:

对于解空间 SS连续的实值函数 a(x),b(x)a({\bf x}),b({\bf x}) ,满足 xS,b(x)>0\forall{\bf x}\in S,b({\bf x})>0 ,求

minxSf(x)=a(x)b(x)\min_{{\bf x}\in S}f({\bf x})=\frac{a(\bf x)}{b(\bf x)}

解决分数规划问题的一般方法是分析其对偶问题,但更加实用的方法是对其进行 参数搜索(parametric search),即对答案进行猜测,再验证该猜测值的最优性,将优化问题转化为判定性问题或其他的优化问题。由于分数规划模型的特殊性,使得能够构造另外一个由猜测值 λ\lambda 作为自变量的相关问题,且该问题的解满足一定的单调性,或其他的可以减小参数搜索范围的性质,从而逼近答案。

① 比如 Dinkelbach\text{Dinkelbach} 算法,每次直接把上次子问题的解向量代入原问题的表达式,算出下一个迭代式的猜测值。详见参考文献 [Dink67],[MSS92]\text{[Dink67],[MSS92]}

假设 λ0=f(x0)\lambda_0=f({\bf x_0}) 是最优解,根据定义有

λ0=f(x0)=a(x0)b(x0)    λ0b(x0)=a(x0)    a(x0)λ0b(x0)=0\begin{aligned} &\lambda_0=f({\bf x_0})=\frac{a(\bf x_0)}{b(\bf x_0)}\\ \Rightarrow\;\;&\lambda_0\cdot b({\bf x_0})=a(\bf x_0)\\ \Rightarrow\;\;&a({\bf x_0})-\lambda_0\cdot b({\bf x_0})=0 \end{aligned}

由上面的形式构造一个新函数 g(λ)=minxS[a(x)λb(x)]g(\lambda)=\min_{{\bf x}\in S}[a({\bf x})-\lambda\cdot b(\bf x)]

这个新函数是一个非分式的规划。先来挖掘函数 g(λ)g(\lambda) 本身的性质。

1.1.单调性

g(λ)g(\lambda) 是一个严格递减函数,即,λ1,λ2R,λ1<λ2    g(λ1)>g(λ2)\forall \lambda_1,\lambda_2\in\R,\lambda_1<\lambda_2\;\Leftrightarrow\; g(\lambda_1)>g(\lambda_2)

只需要注意到,在 g(λ1)g(\lambda_1) 中原有的 x\bf x 代入 g(λ2)g(\lambda_2) 会得到更小的结果即可。

1.2.Dinkelbach\text{Dinkelbach}定理

② 出自参考文献 [Dink67]\text{[Dink67]}

λ0\lambda_0 为原问题的答案,则 λ=λ0    g(λ)=0\lambda=\lambda_0\;\Leftrightarrow\; g(\lambda)=0

1.2.1.必要性

先证明 λ=λ0    g(λ)=0\lambda=\lambda_0\;\Rightarrow\;g(\lambda)=0

λ0=f(x0)\lambda_0=f({\bf x_0}) ,根据定义有

xS,λ0=a(x0)b(x0)a(x)b(x)    a(x)λ0b(x)0\begin{aligned} \forall {\bf x}\in S,\lambda_0=\frac{a(\bf x_0)}{b(\bf x_0)}&\le\frac{a(\bf x)}{b(\bf x)}\\ \Rightarrow\;\; a({\bf x})-\lambda_0\cdot b({\bf x})&\ge 0 \end{aligned}

x0\bf x_0 恰好取到这个下界 00 ,所以最小值就是 00 ,证毕。

1.2.2.充分性

再证明 g(λ)=0    λ=λ0g(\lambda)=0\;\Rightarrow\;\lambda=\lambda_0

反证法。反设存在一个解 λ=f(x)\lambda'=f(\bf x') 是更优的解,根据定义有

λ=a(x)b(x)<λ    a(x)λb(x)<0\begin{aligned} \lambda'=\frac{a(\bf x')}{b(\bf x')}&<\lambda\\ \Rightarrow\;\;a({\bf x'})-\lambda\cdot b({\bf x'})&<0 \end{aligned}

那么,将 x\bf x' 代入,可以发现 g(λ)g(\lambda) 一定是小于零的,与题设矛盾。

1.3.二分查找

仍然设 λ0\lambda_0 为答案,则

{g(λ)=0    λ=λ0g(λ)<0    λ>λ0g(λ)>0    λ<λ0\begin{cases} g(\lambda)=0\;\Leftrightarrow\;\lambda=\lambda_0\\ g(\lambda)<0\;\Leftrightarrow\;\lambda>\lambda_0\\ g(\lambda)>0\;\Leftrightarrow\;\lambda<\lambda_0 \end{cases}

此时便可以进行二分查找了。

2.零一分数规划

分数规划的一个特例是 0-1 分数规划(0-1 fractional programming),就是其解向量 x\bf x 满足 i,xi{0,1}\forall i,x_i\in\{0,1\} (这就是所谓的 0-1)。形式化定义如下:

③ 0-1 分数规划的相关知识,在参考文献 [MSS92]\text{[MSS92]} 中有详细介绍。

minxSf(x)=iaixiibixi=axbx\min_{{\bf x}\in S} f({\bf x})=\frac{\sum_{i}a_ix_i}{\sum_{i}b_ix_i}=\frac{\bf a\cdot x}{\bf b\cdot x}

同样地,必须要满足 xS,bx>0\forall {\bf x}\in S,{\bf b\cdot x}>0 ,且有比较特殊的 S{0,1}nS\subseteq\{0,1\}^n

它的应用范围很广,经典例题是 最优比率生成树(the optimum ratio spanning tree)

④ 详见参考文献 [LiuH04]\text{[LiuH04]} ,303-304 页。

3.应用

3.1.网络战争(Network Wars)

⑤ 题目来源:Zhejiang University Online Judge - Andrew Stankevich’s Contest #8 - 2676 Network Wars

题目描述
给出一个带权无向图 G=(V,E)G=(V,E) ,每条边 ee 有一个权 wew_e 。求将点 ss 和点 tt 分开的一个边割集 CC ,使得该割集的平均边权最小,即最小化:

eCweC\frac{\sum_{e\in C}w_e}{|C|}

题目解答
先尝试着用更一般的形式重新叙述本问题。设向量 w\bf w 表示边的权值,令向量 c=(1,1,,1){\bf c} = (1,1,\dots,1) 表示选边的代价,于是原问题等价为:

minxS{0,1}Ef(x)=wxcx\min_{{\bf x}\in S\subseteq\{0,1\}^{|E|}} f({\bf x})=\frac{\bf w\cdot x}{\bf c\cdot x}

这是一个 0-1 分数规划的形式,构造一个新函数 g(λ)=minxS[(wλc)x]g(\lambda)=\min_{{\bf x}\in S}[({\bf w}-\lambda{\bf c})\cdot{\bf x}]

即对每条边 eE\forall e\in E ,进行重赋权:we=weλce=weλw_e'=w_e-\lambda\cdot c_e=w_e-\lambdag(λ)g(\lambda) 就是在这个重新赋权的图上,求一个最小容量的 sts-t 边割集。请注意一些细节:若 we<0w_e'<0 ,又由于目标函数是加和取最小的操作,则该边必然是在边割集内。对于剩下的所有边,直接利用最小割模型求出 sts-t 割即可。

3.2.最优标号(Optimal Marks)

⑥ 题目来源:Sphere Online Judge - 839 Optimal Marks 作者:Guo Huayang

篇幅太长,今天作者又被虐了,心情不好,暂时搁置。

4.参考文献

本文摘自胡伯涛(Amber)《最小割模型在信息学竞赛中的应用(Applications of Minimum Cut Model in Informatics)》1.6节、2.2节。

  • [MSS92]\text{[MSS92]} T. Matsui and Y. Saruwatari and M. Shigeno. An Analysis of Dinkelbach’s Algorithm for 0-1 Fractional Programming Problems. Technical Report METR92-14, Department of Mathematical Engineering and Information Physics, Unversity of Tokyo,1992
  • [Dink67]\text{[Dink67]} Werner Dinkelbach. On Nonlinear Fractional Programming. Management Science, Vol. 13, No. 7, Series A, Sciences. (Mar., 1967), pp. 492-498.
  • [LiuH04]\text{[LiuH04]} 刘汝佳,黄亮《算法艺术与信息学竞赛》,清华大学出版社,2004

相关文章: