PACT 07/09 设施选址问题
定义
输入:二分图,顶点集分为设施集
和客户集
。设施
的开放费用为
,用户
到设施
的有权为
的边代表距离。边权满足三角不等式。
目标:寻找一组设施,使得
线性规划表述
令表示设施
是否被选,
表示用户
是否到设施
去,则设施选址问题可以表述为下列线性规划(松弛整数限制):
其对偶为
令和
为主规划和对偶规划的最优解。显然,在线性规划当中很可能出现
即“部分得到服务”的情况。
近似算法的设计思路与分析
引理:如果那么
。
证明:由主互补松弛条件,若则
,又
,得证。
定义顾客所有部分光顾的设施为
的邻域
。
很容易想到一个近似算法:对于每一个顾客,我们开放邻域中离他最近的设施。
由于我们的引理和弱对偶原理,我们的总服务成本。如果我们开放设施的成本也有个上界就好了。
然而并不行。
考虑如下反例:
如果按照我们的算法,我们会为和
分别开放一个代价
的设施。而事实上开那个代价
的设施就够了。我们差不多浪费了两倍的钱,而这个倍数可以任意高(只要让代价稍高一点的设施处在所有顾客的邻域当中,而使每个顾客的邻域中都有比其代价略低的设施即可)。
但是我们知道,对于任何一组邻域不交的顾客,开放设施的代价确实是不大于的(为什么?因为那些设施只服务一个顾客,而那个顾客有可能“部分”光顾其他设施。比如说一个顾客光顾了
的设施
(代价为
)和
的设施
(代价为
),那么这个顾客就给目标函数贡献了
,显然这个时候如果我去开代价
的那个设施,开店费是
,是小于最优目标函数的)
那我不妨先任选一组邻域不交的顾客(不妨称之为“幸运顾客”)按照就近原则开放他们的设施,然后再让那些邻域和幸运顾客有交集的顾客(不妨称之为“倒霉顾客”)去这些设施。
根据我们之前的分析,幸运顾客的服务成本一定不大于,考虑倒霉顾客的服务成本。假设倒霉顾客
和幸运顾客
的邻域共享一个设施
,幸运顾客可以去离他最近的设施
。
那么根据三角不等式,让去
的距离为
那怎么办?改算法呗。我们只需要保证所有幸运顾客的都小于等于倒霉顾客的
,也就是说排一下序就好了。
于是我们就得到了我们的算法:
- 解原线性规划和对偶线性规划,得到
。
- 选一个
最小的顾客并开放他邻域当中离他最近的店。
- 暂时移除所有和这个顾客有相交邻域的顾客。
- 持续以上两步直至所有顾客都被选中或移除。
- 让所有被移除的顾客去离他们最近的已开放设施。
这个算法的近似是多少呢?上面的分析已经说明了这个方案的设施成本不大于,而服务成本不大于
,因此总的来说这就是一个
倍近似算法。
近似难度
定理(Guha, Khuller
1999):如果设施选址问题存在近似比小于的算法,则
。