分数规划用来求一个分式的极值。其形式化表述是,给出 和 ,求一组 ,最小化或最大化

通俗来讲,这类问题类似于:每种物品有两个权值 和 ,选出若干个物品使得 最小或最大。

一般分数规划问题还会有一些特殊的限制,比如「分母至少为 」。

求解

二分法

分数规划问题的通用方法是二分答案法。假设当前二分到的答案为 ,则一组满足条件的 会让权值大于等于 。根据这一条件列不等式并变形

那么只要求出不等号左边的式子的最大值就行了。如果最大值比 要大,说明 是可行的,否则不可行。分数规划的主要难点就在于如何求 的最大值或最小值。

Dinkelbach 算法

Dinkelbach 算法 1 的大概思想是每次用上一轮的答案当做新的 来输入,不断地迭代,直至答案收敛。

例题

有 个物品,每个物品有两个权值 和 。求一组 ,满足 中恰好有 个 ,最大化 的值。

有 个物品,每个物品有两个权值 和 。

你需要确定一组 ,使得 最大。

要求 。

每条边有两个权值 和 ,求一棵生成树 使得 最小。

每条边的边权为 ,求一个环 使得 最小。

习题

参考资料与注释

Footnotes

  1. Dinkelbach, Werner. “On nonlinear fractional programming.” Management science 13.7 (1967): 492-498. ↩

此文件夹下有0条笔记。