QpmtnriLmax

Материал из Викиконспекты
Версия от 23:22, 8 июня 2012; 91.216.66.5 (обсуждение) (Алгоритм решения)
Перейти к: навигация, поиск


Рис. 1 - Исходная сеть

Постановка задачи

Рассмотрим еще одну задачу на нахождение расписания:

  1. У нас есть несколько машин, работающих параллельно. У всех машин разные скорости выполнения работ.
  2. Есть несколько заданий, каждое имеет своё время появления [math]r_i[/math] и время окончания [math]d_i[/math].
  3. Работа может быть прервана и продолжена позже.

Требуется минимизировать опоздание [math]L_i = C_i - d_i[/math]

Алгоритм решения

Рис. 2.1 - Заменённая подсеть

Как в задаче [math]P \mid pmtn, r_i \mid L_{max}[/math] сведем задачу к поиску потока сети. Также будем использовать бинарный поиск.

Пусть [math] t_1 \lt t_2 \lt ...\lt t_r [/math] упорядоченная последовательность всех значений [math]r_i[/math] и [math]d_i[/math]. Определим произвольный интервал-узел на исходной сети (Рис. 1) [math] I_K := [t_{K-1}, t_K], \ T_K = t_K-t_{K-−1} [/math] для [math] K = 2,..., r [/math].

Расширим эту сеть. Обозначим через [math] J_{i_1}, J_{i_2}, . . . , J_{i_s} [/math] набор предшественников узла [math]I_K[/math], тогда замененная нами подсеть (Рис. 2.1) определяется как [math] I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} [/math]. Расширение сети показано на Рис. 2.2.

Cчитаем, что станки индексируются в порядке невозрастания скоростей [math] s_1 \ge s_2 \ge . . . \ge s_m [/math], кроме того [math]s_{m+1} = 0[/math].

Расширенная подсеть строится путем добавления к вершинам [math] I_K, J_{i_1}, J_{i_2}, . . . , J_{i_s} [/math] вершин [math](K, 1), (K, 2), . . . (K, m) [/math]. При [math]j = 1,..., m [/math], есть дуги от [math](K, j)[/math] до [math]I_K[/math] с емкостью [math] j(s_j - s_{j+1}) T_K [/math] и для всех [math]\nu = 1,. . . , s[/math] и [math]j = 1,. . ., m[/math] существует дуга из [math]J_{i_\nu}[/math] в [math](K, J)[/math] с емкостью [math] (s_j - s_{j+1}) T_K [/math].

Для каждой вершины [math]I_K[/math] существуют вышеуказанные расширения. Кроме того, мы сохраняем дуги из [math]s[/math] в [math]J_i[/math] емкостью [math]p_i[/math] и дуги из [math]I_K[/math] в [math]t[/math] емкостью [math]S_mT_K[/math] (Рис. 1).

Теорема:
Следующие свойства эквивалентны:

(a) Существует допустимое расписание.

(b) В расширенной сети существует поток от [math]s[/math] до [math]t[/math] со значением [math]\sum\limits_{i=1}^n p_i[/math]
Доказательство:
[math]\triangleright[/math]

[math](b) \Rightarrow (a):[/math] Рассмотрим в расширенной сети поток величиной [math]\sum\limits_{i = 1}^n {p_i}[/math]. Обозначим через [math]x_{iK}[/math] общий поток, который идет от [math]J_i[/math] до [math]I_K[/math]. Заметим, что [math]\sum\limits_{i = 1}^n \sum\limits_{K = 2}^r x_{iK} = \sum\limits_{i = 1}^n p_i[/math]. Достаточно показать, что для каждого подмножества [math]A \subseteq \{ 1, . . . , n \}[/math] выполняется [math]\sum\limits_{i \in A} x_{iK} \le T_Kh(A)[/math].

Это означает, что условие [math]\sum\limits_{i \in A} p_i \le Th(A), \forall A \subseteq \{ 1, ... , n \}[/math] выполняется и требования к обработке [math]x_{1K}, . . . , x_{nK}[/math] могут быть запланированы как [math]I_K[/math] для [math]K = 2, . . . , r[/math]. Рассмотрим подсеть в расширенной сети индуцированной [math]A[/math] и соответствующие части потока. Фрагмент частичного потока, который проходит через [math](K, j)[/math] ограничен

[math]\min \{ j(s_j − s_{j + 1})T_K, |A|(s_j − s_{j+1})T_K \} = T_K(s_j − s_{j+1}) \min \{ j, |A| \}[/math].

Таким образом, мы имеем

[math]\sum\limits_{i \in A} x_{iK} \ge T_K \sum\limits_{j = 1}^m(s_j − s_{j+1}) \min \{ j, |A| \} = T_Kh(A)[/math]. (5.9)

То, что равенство (5.9) справедливо, может рассматриваться как следствие. Если [math]|A| \gt m[/math], то

[math]\sum\limits_{j = 1}^m \min \{ j, |A| \}(s_j - s_{j + 1}) = s_1 - s_2 + 2s_2 - 2s_3 + 3s_3 - 3s_4 + ... + ms_s - ms_{m+1} =\ [/math] [math]S_m = h(A)[/math].

В противном случае

[math]\sum\limits_{j = 1} \min \{ j, |A| \}(s_j - s_{j + 1}) = s_1 - s_2 + 2s_2 - 2s_3 + 3s_3 - ... + (|A| - 1)s_{|A| - 1} -\ [/math] [math](|A| - 1)s_{|A|} + |A|(s_{|A|} - s_{|A| - 1} - ... - s_m + s_m - s_{m + 1}) = S_{|A|} = h(A)[/math].

[math](a) \Rightarrow (b):[/math] Предположим, что допустимое расписание существует. Для [math]i = 1, ... , n [/math] и [math]K = 2, ..., r[/math] пусть [math]x_{iK}[/math] является "объемом работ", который будет выполняться в интервале [math]I_K[/math] в соответствии с нашим возможным расписанием. Тогда для всех [math]K = 2, ..., r[/math] и произвольных наборов [math]A \subseteq \{ 1, . . . , n \}[/math], неравенство

[math]\sum\limits_{i \in A} x_{iK} \le T_Kh(A)[/math] (5.10)

выполняется. Кроме того, для [math]i = 1, . . . , n[/math] у нас [math]p_i = \sum\limits_{K = 2}^r s_{iK}[/math]. Остается показать, что можно отправить [math]x_{iK}[/math] от [math]J_i[/math] до [math]I_K[/math] [math](i = 1, . . . , n; K = 2, . . . , r)[/math] в расширенной сети. Такой поток существует, если [math]\forall A \subseteq \{ 1, . . . , n \}[/math] и [math]K = 2, . . . , r[/math] значение [math]\sum\limits_{i \in A} x_{iK}[/math] ограничено величиной минимального среза части сети с истоками [math]J_i(i \in A)[/math] и стоком [math]I_K[/math]. Тем не менее, это значение

[math]T_K\sum\limits_{j = 1}^m \min \{ j, |A| \}(s_j - s_{j+1})[/math]

Используя (5.10) и правую часть (5.9), получаем

[math]\sum\limits_{i \in A} x_{iK} \le T_K h(A) = T_K \sum\limits_{j = 1}^m \min \{ j, |A| \}(s_j - s_{j+1})[/math]

что и является искомым неравенством.
[math]\triangleleft[/math]
Рис. 2.2 - Расширение сети

Время работы

Работа с максимальным потоком в расширенной сети занимает [math]O (m n^3)[/math] шагов, проверка может быть сделана с такой же скоростью. Для решения [math]Q|pmtn; r_{i}|L_{max}[/math] мы используем бинарный поиск, получается алгоритм со сложностью [math]O (mn^3(log(n) + log (\max\limits_{i=1}^{n} p_i)) [/math], потому как [math]L_{max}[/math], ограничен [math]n \max\limits_{i=1}^{n}p_i[/math], при [math]s_1 = 1[/math].

Задача [math]Q | pmtn; r_i | C_{max}[/math] представляет собой частный случай [math]Q | pmtn; r_i | L_{max}[/math], и может быть решена более эффективно. Labetoulle, Lawler, Lenstra, и Rinnooy Kan разработали алгоритм работающий за [math] O(n log(n) + mn) [/math] специально для этого случая.

Утверждение:
Задача [math]Q | pmtn | L_{max}[/math] может быть решена за [math] O(n log(n) + mn) [/math] шагов.
[math]\triangleright[/math]

Решение [math]Q | pmtn; r_i | C_{max}[/math] эквивалентно нахождению наименьшего [math]T \ge 0[/math], такого, что задача с допустимым временным интервалом [math][r_i, T] (i = 1, . . . , n)[/math] имеет решение.

С другой стороны, решение [math]Q | pmtn | L_{max}[/math] эквивалентно нахождению такого наименьшего [math]T \ge 0[/math], такого, что задача с временным интервалом [math][0, d_i + T][/math] или [math][−T, d_i][/math] имеет решение.
[math]\triangleleft[/math]

Таким образом, задачи [math]Q | pmtn; r_i | Cmax[/math] и [math]Q | pmtn | L_{max}[/math] симметричны.

Источники

  • Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 379 стр. — ISBN 978-3-540-69515-8