16、基于随机化的算法介绍

基于随机化的算法介绍

1. 线性规划算法

线性规划在解决调度问题等方面有着重要应用。以无关机器带成本的作业调度问题为例,该问题可描述为一个整数规划问题。

线性规划(LP)的一般形式如下:
[
\begin{align }
\max &\sum_{j=1}^{n} c_{j}x_{j}\
\sum_{j=1}^{n} a_{ij}x_{j} &= b_{i}, \quad i = 1, \cdots, m\
x_{j} &\geq 0, \quad j = 1, \cdots, n
\end{align
}
]
它可以在输入规模的多项式时间内求解。

在无关机器调度问题中,有 (n) 个独立作业和 (m) 台并行机器,每个作业必须由一台机器处理。作业 (j) 在机器 (i) 上处理需要 (p_{ij}) 个时间单位,并产生成本 (c_{ij})。一个调度方案可以用一个映射 (f) 来描述,它为每个作业 (j) 分配一台机器 (f(j))。调度方案 (f) 的成本为 (\sum_{j=1}^{n} c_{f(j)j}),调度的最大完成时间(makespan)为 (\max_{1\leq i\leq m} \sum_{j:f(j)=i} p_{ij})。

该近似算法要同时优化最大完成时间和调度成本。Lenstra、Shmoys 和 Tardos 给出了一个针对最小化最大完成时间单准则问题的 2 - 近似算法,并且证明了对于任何 (\epsilon < \frac{1}{2}),除非 (P = NP),否则不存在多项式时间的 ((1 + \epsilon)) 近似算法。

假设存在一个总成本为 (C) 且最大完成时间为 (T) 的调度方案,目标是找到一个最大完成时间至多为 (2T) 且成本至多为 (C) 的调度方案。我们将调度问题描述为一个整数线性规划:
[
\begin{align }
\min &\sum_{i,j} c_{ij}x_{ij}\
\sum_{i=1}^{m} x_{ij} &= 1, \quad j = 1, \cdots, n\
\sum_{j=1}^{n} p_{ij}x_{ij} &\leq T, \quad i = 1, \cdots, m\
x_{ij} &\in {0, 1}, \quad i = 1, \cdots, m; j = 1, \cdots, n\
x_{ij} &= 0, \quad \text{if } p_{ij} > T
\end{align
}
]
由于求解整数线性规划是一个 NP - 完全问题,我们使用其松弛形式。如果将二进制约束 (x_{ij} \in {0, 1}) 松弛为 (x_{ij} \geq 0),就得到了整数线性规划的 LP 松弛。

给定线性规划的最优解 (\bar{x} = (\bar{x} {ij})),我们通过构建一个二分图 (B(\bar{x}) = (V, W, E)) 来得到一个整数分配方案。二分图由作业节点 (W = {w {j}: j = 1, \cdots, n}) 和机器节点 (V = {v_{is}: i = 1, \cdots, m; s = 1, \cdots, k_{i}}) 组成,其中 (k_{i} = \lceil \sum_{j=1}^{n} \bar{x}_{ij} \rceil)。

构建边的过程如下:
1. 假设作业(对于机器 (i))按处理时间非递增排序:(p_{i1} \geq p_{i2} \geq \cdots \geq p_{in})。
2. 如果 (\sum_{j=1}^{n} \bar{x} {ij} \leq 1),则机器 (i) 只有一个节点 (v {i1}),对于每个 (\bar{x} {ij} > 0) 的作业 (j),使用边 ((v {i1}, w_{j}) \in E),权重 (x’(v_{i1}, w_{j}) = \bar{x} {ij})。
3. 否则,设 (j
{1}) 是满足 (\sum_{j=1}^{j_{1}} \bar{x} {ij} \geq 1) 的最小索引。则 (E) 包含边 ((v {i1}, w_{j})),(j = 1, \cdots, j_{1} - 1),权重 (x’(v_{i1}, w_{j}) = \bar{x} {ij}),以及一条额外的边 ((v {i1}, w_{j_{1}})),权重 (x’(v_{i1}, w_{j_{1}}) = 1 - \sum_{j=1}^{j_{1}-1} x’(v_{i1}, w_{j}))。

以下是一个 (n = 8) 作业的示例,假设作业按机器 1 的处理时间非递增排序,(\bar{x} {11} = \frac{2}{3}),(\bar{x} {13} = \bar{x} {15} = \bar{x} {16} = \frac{1}{2}),(\bar{x} {18} = 1),(\bar{x} {12} = \bar{x} {14} = \bar{x} {17} = 0)。机器 1 的节点数为 (\lceil \frac{2}{3} + \frac{3}{2} + 1 \rceil = 4),构建的边及其对应权重如下表所示:

(w_1) (w_3) (w_5) (w_6) (w_8)
(v_{11}) (\frac{2}{3}) (\frac{1}{3})
(v_{12}) (\frac{1}{6}) (\frac{1}{2}) (\frac{1}{3})
(v_{13}) (\frac{1}{6}) (\frac{5}{6})
(v_{14}) (\frac{1}{6})

对于每个机器节点 (v_{is}),定义两个值:
[
p_{is}^{\max} = \max{p_{ij}: (v_{is}, w_{j}) \in E}, \quad p_{is}^{\min} = \min{p_{ij}: (v_{is}, w_{j}) \in E}
]

构建可行调度的算法步骤如下:
1. 计算线性规划的最优解 (\bar{x})。
2. 构建带权重函数 (x’) 的二分图 (B(\bar{x}))。
3. 计算一个最小成本(整数)匹配 (M),它精确匹配 (B(\bar{x})) 中的所有作业节点。
4. 对于每个边 ((v_{is}, w_{j}) \in M),将作业 (j) 安排在机器 (i) 上。

该算法生成的调度方案的最大完成时间至多为 (2T) 且总成本至多为 (C)。

2. 半定规划算法

半定规划是一种有趣的方法,可用于获得良好的近似算法。以最大割(MAX CUT)问题为例,介绍一个随机近似算法,该算法生成的解的期望值至少是最优值的 0.87856 倍。

矩阵 (A \in \mathbb{R}^{n\times n}) 是半正定的,如果对于任何向量 (x \in \mathbb{R}^{n}),都有 (x^{T}Ax \geq 0)。对于对称矩阵 (A),以下两个陈述等价:
1. (A) 是半正定的。
2. 存在矩阵 (B \in \mathbb{R}^{m\times n}),使得 (A = B^{T}B)。

半定规划(SDP)的一般形式如下:
[
\begin{align }
\max &\sum_{i,j} c_{ij}x_{ij}\
\sum_{i,j} a_{ij}^{(k)}x_{ij} &= b_{k}, \quad k = 1, \cdots, \ell\
X = (x_{ij}) &\text{ 对称且半正定}
\end{align
}
]
半定规划类似于线性规划,例如单纯形法可以推广到半定规划。对于任何 (\epsilon > 0),半定规划可以在输入规模和 (\log \frac{1}{\epsilon}) 的多项式时间内,以 (\epsilon) 的加法误差求解。

在最大割问题中,设 (G = (V, E)) 是一个无向图,边 ((i, j) \in E) 上有非负权重 (w(i, j))。最大割问题是将顶点集 (V) 划分为两个集合 (V_1) 和 (V_2),使得一端在 (V_1) 中,另一端在 (V_2) 中的边的权重之和 (w(V_1, V_2) = \sum_{v_1\in V_1, v_2\in V_2} w(v_1, v_2)) 最大。

最大割问题是一个 NP - 完全问题,即使对于单位权重和一些简单的图类(如弦图或二分图的补图)也是如此。Håstad 证明了最大割问题不能以 0.94127 的因子进行近似。之前最好的近似算法的近似界为 0.5。

我们首先给出最大割问题的二次整数规划:
对于每个顶点 (i \in V),使用变量 (x_{i}) 表示 (i) 属于 (V_1) 还是 (V_2):
[
x_{i} =
\begin{cases}
-1, & i \in V_1\
1, & i \in V_2
\end{cases}
]
则最大割问题等价于:
[
\begin{align }
\max &\sum_{i<j} w(i, j) \frac{1 - x_{i}x_{j}}{2}\
x_{i} &\in {-1, +1}, \quad i = 1, \cdots, n
\end{align
}
]

由于求解整数规划是 NP - 完全问题,我们使用一个非线性规划进行松弛。松弛过程是允许 (x_{i}) 是一个 (n) 维单位长度向量 (v_{i} \in S^{n}),目标函数中的 (x_{i}x_{j}) 替换为对应向量的点积 (v_{i} \cdot v_{j}),其中 (S^{n} = {v \in \mathbb{R}^{n}: v \cdot v = 1}) 是 (n) 维单位球面。得到的松弛问题(A)如下:
[
\begin{align }
\max &\sum_{i<j} w(i, j) \frac{1 - v_{i} \cdot v_{j}}{2}\
v_{i} &\in \mathbb{R}^{n}, \quad v_{i} \cdot v_{i} = 1, \quad i = 1, \cdots, n
\end{align
}
]
使用 (y_{ij} = v_{i} \cdot v_{j}),可以将(A)重写为以下程序(B):
[
\begin{align }
\max &\sum_{i<j} w(i, j) \frac{1 - y_{ij}}{2}\
Y = (y_{ij}) &\text{ 对称且半正定}\
y_{ii} &= 1, \quad i = 1, \cdots, n
\end{align
}
]
(B)是一个半定规划,并且(A)和(B)是等价的。

最大割问题的随机算法步骤如下:
1. 求解半定规划(B)。
2. 使用 Cholesky 分解,得到一组最优向量 (v_{i})。
3. 随机选择一个单位长度向量 (r \in S^{n})。
4. 设置 (V_1 = {i: v_{i} \cdot r \geq 0}) 和 (V_2 = {i: v_{i} \cdot r < 0})。

该算法生成的割的期望值 (E[W]) 满足:
[
E[W] \geq 0.878 \sum_{i<j} w(i, j) \frac{1 - v_{i} \cdot v_{j}}{2}
]
该算法可以在多项式时间内实现。

以下是该算法的 mermaid 流程图:

graph TD;
    A[求解半定规划(B)] --> B[使用 Cholesky 分解获取向量 \(v_i\)];
    B --> C[随机选择单位长度向量 \(r\)];
    C --> D[划分顶点集 \(V_1\) 和 \(V_2\)];

综上所述,线性规划和半定规划在解决优化问题中都有着重要的应用,通过随机化的方法可以得到较好的近似解。

基于随机化的算法介绍

3. 随机舍入与条件期望

随机舍入由 Raghavan 和 Thompson 引入,使用悲观估计器的去随机化舍入则归功于 Raghavan。随机舍入已被用于开发最大可满足性问题和约束满足问题的近似算法。

在这些算法中,用于舍入变量的概率分布不是松弛问题的解,而是松弛问题的解和均匀分布的凸组合。这些算法的去随机化相对容易,因为基本上任何 0/1 解都是可行的。

在特殊情况下,舍入的性能可以得到改善,例如资源受限调度问题和打包与覆盖整数线性规划问题。在这两种情况下,作者使用新的悲观估计器对舍入方案进行去随机化。

下面介绍去随机化的框架:
假设我们有一个概率空间 ((Pr, {0, 1}^n)) 和一组 “好字符串” (A \subseteq {0, 1}^n),使得 (Pr(A) \geq \epsilon) 对于某个 (\epsilon > 0) 成立。假设我们要去随机化的算法仅使用随机性来找到一个字符串 (x \in {0, 1}^n)。

一个确定性算法可以按以下方式构造这样的字符串:
对于 (i = 0, 1, \cdots, n) 和 ((b_1, \cdots, b_i) \in {0, 1}^i),定义 (P_{b_1, \cdots, b_i}^i = Pr[x \notin A | x_1 = b_1, \cdots, x_i = b_i])。显然 (P^0 = 1 - Pr[A] < 1),并且对于任何 (i) 和任何 ((b_1, \cdots, b_i)),要么 (P_{b_1, \cdots, b_i, 0}^{i + 1} \leq P_{b_1, \cdots, b_i}^i),要么 (P_{b_1, \cdots, b_i, 1}^{i + 1} \leq P_{b_1, \cdots, b_i}^i)。

观察到 (P_{b_1, \cdots, b_n}^n) 要么等于 0,要么等于 1,并且当且仅当 ((b_1, \cdots, b_n) \notin A) 时等于 1。

条件概率算法(cond - prob)步骤如下:

for i = 1 to n do
    if P_{b_1, \cdots, b_{i - 1}, 0}^i \leq P_{b_1, \cdots, b_{i - 1}}^{i - 1} then
        b_i := 0
    else
        b_i := 1
return (b_1, \cdots, b_n)

该算法保持这样的不变性:在 for 循环的任何迭代中,(b_i) 被赋予一个值,使得 (P_{b_1, \cdots, b_i}^i \leq P_{b_1, \cdots, b_{i - 1}}^{i - 1})。通过归纳法,这意味着 (P_{b_1, \cdots, b_n}^n \leq P^0 < 1),所以 (P_{b_1, \cdots, b_n}^n = 0) 且 ((b_1, \cdots, b_n) \in A)。

然而,在实践中,计算条件概率是一项极其复杂的任务。仔细检查该方法的正确性证明会发现,并不需要精确计算所有的条件概率。

下面给出悲观估计器的定义:
悲观估计器是一组值 ({U_{b_1, \cdots, b_i}^i} {i = 0, \cdots, n, (b_1, \cdots, b_i) \in {0, 1}^i}),满足以下性质:
1. (U^0 < 1)。
2. 对于 (i = 0, \cdots, n - 1),对于所有 ((b_1, \cdots, b_i) \in {0, 1}^i),(U
{b_1, \cdots, b_i}^i \geq \min{U_{b_1, \cdots, b_i, 0}^{i + 1}, U_{b_1, \cdots, b_i, 1}^{i + 1}})。
3. 对于 (i = 0, \cdots, n),对于所有 ((b_1, \cdots, b_i) \in {0, 1}^i),(P_{b_1, \cdots, b_i}^i \geq U_{b_1, \cdots, b_i}^i)。

如果我们有一个算法能在多项式时间内计算 (U_{b_1, \cdots, b_i}^i),那么我们可以使用 (U_{b_1, \cdots, b_i}^i) 代替 (P_{b_1, \cdots, b_i}^i) 来运行条件概率算法。

随机舍入是一种适合使用条件概率进行去随机化的算法技术。一般框架如下:
我们有一个可以表述为具有 0/1 变量的整数线性规划(ILP)的问题。我们将 ILP 松弛为线性规划(LP)并求解到最优。然后,我们将这样得到的分数解解释为变量上的概率分布。LP 的约束以高概率得到满足,并且目标函数的期望值接近松弛问题的值。

下面给出一个重要定理:
设 (x = (x_1, \cdots, x_n)) 是一个满足 (a^T \cdot x = b),(0 \leq x_i \leq 1) 的向量。定义随机变量 (y_1, \cdots, y_n),使得 (y_i) 以概率 (x_i) 等于 1,以概率 ((1 - x_i)) 等于 0。那么,对于任何 (f > 0),以下不等式至少以 ((1 - n^{-f})) 的概率成立:
[b - a_{\max} \sqrt{fn \log n} \leq a^T \cdot y \leq b + a_{\max} \sqrt{fn \log n}]
其中 (a_{\max} = \max_i |a_i|)。

该定理也适用于舍入不等式,并且可以扩展到 (m) 个方程的系统,在这种情况下误差将是 (a_{\max} \sqrt{fn \log mn})。

设 (x^0) 是以下线性规划的分数解:
[
\begin{align }
\max & c^T \cdot x\
\text{Subject to} & Ax \leq b\
& 0 \leq x \leq 1
\end{align
}
]
通过独立地为每个 (j) 设置 (y_j) 以概率 (x_j^0) 等于 1,以概率 (1 - x_j^0) 等于 0,概率地构造一个整数解 (y)。以高概率,得到的解的成本至少为 ((1 - o(1))c^T \cdot x^0),并且满足:
[Ay \leq b + O(a_{\max} \sqrt{n \log mn})]
其中 (a_{\max}) 是 (A) 中的最大元素。

去随机化使用悲观估计器得到以下结果:
存在一个多项式时间算法,给定一个向量 (x = (x_1, \cdots, x_n)),(0 \leq x_i \leq 1),和一个 (m \times n) 矩阵 (A),找到一个向量 (y = (y_1, \cdots, y_n) \in {0, 1}^n),使得:
[Ax - O(a_{\max} \sqrt{n \log mn}) \leq Ay \leq Ax + O(a_{\max} \sqrt{n \log mn})]
对于 (A) 中所有元素非负的行,有更强的界:
[\sum_{i} a_{ij}x_j - O(a_{\max}^j \log n) \leq \sum_{j} a_{ij}y_j \leq \sum_{i} a_{ij}x_j + O(a_{\max}^j \log n)]
其中 (a_{\max}^j = \max_i |a_{ij}|)。

以下是随机舍入与去随机化的 mermaid 流程图:

graph TD;
    A[将 ILP 松弛为 LP 并求解] --> B[将分数解解释为概率分布];
    B --> C[随机舍入得到整数解];
    C --> D[使用悲观估计器去随机化];
    D --> E[得到确定性整数解];

综上所述,随机舍入和条件期望为解决整数规划问题提供了有效的方法,通过去随机化可以将随机算法转化为确定性算法,在实际应用中具有重要价值。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值