QpmtnSumCi — различия между версиями
Eadm (обсуждение | вклад) м |
Eadm (обсуждение | вклад) (теорема) |
||
Строка 21: | Строка 21: | ||
a = a + t | a = a + t | ||
− | + | === Асимптотика === | |
+ | Сначала мы сортируем работы и станки, что занимает <tex> \mathcal{O}(n\log{n})</tex> и <tex> \mathcal{O}(m\log{m})</tex>. Так как мы можем предположить, что количество станков меньше или равно колиеству работ <tex>m \le n</tex>, то в итоге сортировка займет <tex> \mathcal{O}(n\log{n})</tex>. | ||
+ | Количество прерываний ограничено числом <tex>(m-1) \cdot n - (1 + 2 + ... + (m - 1)) = (m - 1) \cdot (n - \cfrac{m}{2})</tex>. | ||
+ | Что в итоге даёт асимптотику алгоритма <tex> \mathcal{O}(n\log{n} + mn)</tex>. | ||
== Доказательство корректности алгоритма == | == Доказательство корректности алгоритма == | ||
Строка 38: | Строка 41: | ||
Далее существуют два случая: | Далее существуют два случая: | ||
* Если <tex>p^+_j \le p^3_k</tex>, то расписание <tex>S'</tex> получается обменом обработки, полученной <tex>j</tex> после момента <tex>C_k</tex> с частью обработки, полученной <tex>k</tex> не одновременно с <tex>j</tex>. | * Если <tex>p^+_j \le p^3_k</tex>, то расписание <tex>S'</tex> получается обменом обработки, полученной <tex>j</tex> после момента <tex>C_k</tex> с частью обработки, полученной <tex>k</tex> не одновременно с <tex>j</tex>. | ||
− | * Если <tex>p^+_j > p^3_k</tex>, то для начала обмениваем всю обработку <tex>p^3_k</tex> с частью <tex>p^+_j</tex>, чтобы получить новое расписание, где <tex>C'_k = C_j</tex> и <tex>\tilde{p}^+_j = p^+_j - p^3_k</tex> обработки <tex>j</tex> после момента <tex>C_k</tex>. Пусть <tex>p^2_j</tex> и <tex>p^2_k</tex> представлены числом <tex>T</tex> непересекающихся временных интервалов длинной <tex>t_i</tex> с <tex>v^i_j</tex>, <tex>v^i_k</tex> {{---}} скоростями станков, обрабатывающих <tex>j</tex> и <tex>k</tex> в интервал <tex>i</tex> и <tex>p^{2,i}_j = v^i_j \cdot t_i</tex>, <tex>p^{2,i}_k = v^i_k \cdot t_i</tex> {{---}} количество обработки, полученной соответствующей задачей за этот интервал. Так как <tex>p^1_j \ge p^1_k</tex> и <tex>p_j \le p_k</tex>, то <tex>p^2_j + \tilde{p}^+_j \le p^2_k</tex>. Следовательно, существует такой <tex>\tilde{p}^{+,i}_j</tex>, что верно: | + | * Если <tex>p^+_j > p^3_k</tex>, то для начала обмениваем всю обработку <tex>p^3_k</tex> с частью <tex>p^+_j</tex>, чтобы получить новое расписание, где <tex>C'_k = C_j</tex> и <tex>\tilde{p}^+_j = p^+_j - p^3_k</tex> обработки <tex>j</tex> после момента <tex>C_k</tex>. Пусть <tex>p^2_j</tex> и <tex>p^2_k</tex> представлены числом <tex>T</tex> непересекающихся временных интервалов длинной <tex>t_i</tex> с <tex>v^i_j</tex>, <tex>v^i_k</tex> {{---}} скоростями станков, обрабатывающих <tex>j</tex> и <tex>k</tex> в интервал <tex>i</tex> и <tex>p^{2,i}_j = v^i_j \cdot t_i</tex>, <tex>p^{2,i}_k = v^i_k \cdot t_i</tex> {{---}} количество обработки, полученной соответствующей задачей за этот интервал. Так как <tex>p^1_j \ge p^1_k</tex> и <tex>p_j \le p_k</tex>, то <tex>p^2_j + \tilde{p}^+_j \le p^2_k</tex>. Следовательно, существует такой <tex>\tilde{p}^{+,i}_j</tex>, что верно: |
+ | :<tex>\sum\limits_{i=1}^{T}{\tilde{p}^{+,i}_j} = \tilde{p}^+_j</tex>, <tex>p^{2,i}_j + \tilde{p}^{+,i}_j \le p^{2,i}_k</tex>, <tex>i = 1...T</tex><br>Для каждого <tex>i = 1...T</tex> пусть <tex>t^i_j = \cfrac{\tilde{p}^{+,i}_j}{v^i_k - v^i_j}</tex>, <tex>t^i_k = t^i_j \cdot \cfrac{v^i_j}{v^i_k}</tex>. Чтобы получить расписание <tex>S'</tex> для каждого из <tex>T</tex> интервалов нужно обменять: | ||
+ | :1) обработку, полученную в начале интервала работой <tex>k</tex> на более быстром станке, с обработкой <tex>j</tex>, полученной на медленном станке, на интервалы <tex>t^i_k</tex> и <tex>t^i_j</tex> соответственно | ||
+ | :2) обработку <tex>\tilde{p}^{+,i}_j</tex>, полученной <tex>j</tex> после момента <tex>C_k</tex>, с таким же количеством обработки, полученной работой <tex>k</tex> на более быстром станке в этот интервал сразу после момента <tex>t^i_k</tex>. | ||
}} | }} | ||
Строка 45: | Строка 51: | ||
Расписание, построенное по принципу '''SRPT-FM''', оптимальное для задачи <tex> Q \mid pmtn \mid \sum C_i </tex> | Расписание, построенное по принципу '''SRPT-FM''', оптимальное для задачи <tex> Q \mid pmtn \mid \sum C_i </tex> | ||
|proof= | |proof= | ||
− | В | + | Без потери общности будем предполагать, что количество станков равно количеству работ <tex>m = n</tex>. Если <tex>m < n</tex>, то добавим <tex>n - m</tex> станков с нулевой скоростью обработки, если <tex>m > n</tex>, то удалим <tex>m - n</tex> самых медленных станков. |
+ | |||
+ | Пусть у нас есть расписание, построенное по правилу '''SRPT-FM''', тогда <tex>C_{n} \le C_{n-1} \le ... \le C_{1}</tex>. Следовательно, верны следующие равенства: | ||
+ | :<tex>v_1 \cdot C_n = p_n</tex> | ||
+ | :<tex>v_2 \cdot C_n + v_1 \cdot (C_{n-1} - C_n) = p_{n-1}</tex> | ||
+ | :<tex>v_3 \cdot C_n + v_2 \cdot (C_{n-1} - C_n) + v_1 \cdot (C_{n-2} - C_{n-1}) = p_{n-2}</tex> | ||
+ | :<tex>\vdots</tex> | ||
+ | :<tex>v_n \cdot C_n + v_{n-1} \cdot (C_{n-1} - C_n) + ... + v_1 \cdot (C_1 - C_2) = p_1</tex> | ||
+ | Проведем математические преобразования и получим следующие равенства: | ||
+ | :<tex>v_1 \cdot C_n = p_n</tex> | ||
+ | :<tex>v_2 \cdot C_n + v_1 \cdot C_{n-1} = p_n + p_{n-1}</tex> | ||
+ | :<tex>v_3 \cdot C_n + v_2 \cdot C_{n-1} + v_1 \cdot C_{n-2} = p_n + p_{n-1} + p_{n-2}</tex> | ||
+ | :<tex>\vdots</tex> | ||
+ | :<tex>v_n \cdot C_n + v_{n-1} \cdot C_{n-1} + ... + v_1 \cdot C_1 = p_n + p_{n-1} + ... + p_1</tex> | ||
+ | Пусть <tex>S'</tex> оптимальное расписание, по предыдущей лемме верно, что <tex>C'_{n} \le C'_{n-1} \le ... \le C'_{1}</tex>. Самая короткая работа не может быть выполнена раньше, чем <tex>\cfrac{p_n}{v_1}</tex>. Таким образом <tex>C'_{n} \ge \cfrac{p_n}{v_1}</tex> или | ||
+ | :<tex>v_1 \cdot C'_{n} \ge p_n</tex> | ||
+ | Так как работы <tex>n</tex> и <tex>n-1</tex> выполнены к моменту <tex>C'_n</tex> и <tex>C'_{n-1}</tex> соответственно, то максимальное количество обработки, полученной этими работами составляет | ||
+ | :<tex>(v_1 + v_2) \cdot C'_n + v_1 \cdot (C'_{n-1} - C'_n)</tex> | ||
+ | Из чего следует, что | ||
+ | :<tex>v_2 \cdot C'_n + v_1 \cdot C'_{n-1} \ge p_n + p_{n-1}</tex> | ||
+ | Продолжая в том же духе можно показать, что | ||
+ | :<tex>v_k \cdot C'_n + v_{k-1} \cdot C'_{n-1} + ... + v_1 \cdot C'_{n-k+1} \ge p_n + p_{n-1} + ... + p_{n-k+1}</tex> | ||
+ | В итоге получаем следующие неравенства | ||
+ | :<tex>v_1 \cdot C'_{n} \ge v_1 \cdot C_n</tex> | ||
+ | :<tex>v_2 \cdot C'_n + v_1 \cdot C'_{n-1} \ge v_2 \cdot C_n + v_1 \cdot C_{n-1} </tex> | ||
+ | :<tex>v_3 \cdot C'_n + v_2 \cdot C'_{n-1} + v_1 \cdot C'_{n-2} \ge v_3 \cdot C_n + v_2 \cdot C_{n-1} + v_1 \cdot C_{n-2}</tex> | ||
+ | :<tex>\vdots</tex> | ||
+ | :<tex>v_n \cdot C'_n + v_{n-1} \cdot C'_{n-1} + ... + v_1 \cdot C'_1 \ge v_n \cdot C_n + v_{n-1} \cdot C_{n-1} + ... + v_1 \cdot C_1</tex> | ||
+ | Если существует такой набор положительных чисел <tex>a_j</tex>, что умножение <tex>j</tex>-го неравенства на <tex>a_j</tex> и сложение всех неравенств будет давать неравенство <tex>\sum{C'_j} \ge \sum{C_j}</tex>, тогда теорема будет доказана. Можно показать, что <tex>a_j</tex> должны удовлетворять следующим равенствам | ||
+ | :<tex>v_1 \cdot a_1 + v_2 \cdot a_2 + ... + v_n \cdot a_n = 1</tex> | ||
+ | :<tex>v_1 \cdot a_2 + v_2 \cdot a_3 + ... + v_{n-1} \cdot a_n = 1</tex> | ||
+ | :<tex>\vdots</tex> | ||
+ | :<tex>v_{1} \cdot a_n = 1</tex> | ||
+ | Так как <tex>v_1 \ge v_2 \ge ... \ge v_n</tex> такой набор <tex>a_j</tex> существует. | ||
}} | }} | ||
+ | |||
+ | == См. также == | ||
+ | [[QSumCi|<tex>Q\mid\mid\sum{C_i}</tex>]] | ||
+ | |||
+ | == Источники информации == | ||
+ | * Peter Brucker «Scheduling Algorithms», fifth edition, Springer {{---}} с. 134-135 ISBN 978-3-540-69515-8 | ||
+ | * [http://www.semanticscholar.org/paper/Optimal-preemptive-scheduling-on-uniform-machines-Pandelis/819408316692bf5aa8ba80f1f6d6e7667863c33a/pdf Dimitrios G. Pandelis "Optimal preemptive scheduling on uniform machines with discounted flowtime objectives" {{---}} с. 631-632] | ||
+ | * M.L. Pinedo "Parallel Machine Models (Deterministic)" {{---}} с.135-136 | ||
+ | [[Категория: Дискретная математика и алгоритмы]] | ||
+ | [[Категория: Теория расписаний]] |
Версия 13:37, 30 мая 2016
Задача: |
Дано | станков с разной скоростью выполнения работ и работ с заданным временем выполнения . Работы можно прерывать и продолжать их выполнение на другом станке. Необходимо построить такое расписание, чтобы суммарное время окончания всех работ было минимальным.
Содержание
Описание алгоритма
Идея
Для решения применим правило SRPT-FM (Shortest Remaining Processing Time on Fastest Machine), которое предлагает класть работу с наименьшим оставшемся временем обработки на самый быстрый доступный станок. Отсортируем работы по времени обработки в невозрастающем порядке так, что
. Отсортируем станки по скорости обработки в невозрастающем порядке, так чтобы . Далее назначаем -ю работу на станок (1-й по скорости станок) на время , то есть пока она полностью не выполнится. Теперь назначим работу сначала станок на время , а затем на время от до на станок , пока она не завершится. С работой поступаем аналогично, сначала она времени выполняется на станке , затем времени на станке , и, начиная с до , на станке . Также поступаем со всеми оставшимися работами.Псевдокод
a = 0
p[] // массив времен обработки работ отсортированный в невозрастающем порядке
v[] // массив скоростей обработки станков отсортированный в невозрастающем порядке
while p[1] > 0
Находим наибольший i такой, что p[i] > 0
t = p[i] / v[1]
for j = i down to k = max(1, i - m + 1)
Назначаем работу j на станок
на время от a до a + t
p[j] = p[j] - t * v[1 + i - j]
a = a + t
Асимптотика
Сначала мы сортируем работы и станки, что занимает
и . Так как мы можем предположить, что количество станков меньше или равно колиеству работ , то в итоге сортировка займет . Количество прерываний ограничено числом . Что в итоге даёт асимптотику алгоритма .Доказательство корректности алгоритма
Лемма: |
Существует оптимальное расписание, в котором , когда , для всех и |
Доказательство: |
Рассмотрим расписание , где для некоторых и верно, что , но . С помощью обмена частей обработки, полученной работами и , мы можем изменить расписание , получив новое оптимальное расписание , где обработка работ и завершается во времена и соответственно, при этом время завершения обработки остальных работ остается прежним. Тот факт, что в расписании работа заканчивается раньше , при этом не нарушая оптимальности расписания, свидетельствует о существовании расписания, описанного в условии леммы.Для построения расписания из расписания введем следующие обозначения:
Далее существуют два случая:
|
Теорема: |
Расписание, построенное по принципу SRPT-FM, оптимальное для задачи |
Доказательство: |
Без потери общности будем предполагать, что количество станков равно количеству работ . Если , то добавим станков с нулевой скоростью обработки, если , то удалим самых медленных станков.Пусть у нас есть расписание, построенное по правилу SRPT-FM, тогда . Следовательно, верны следующие равенства:Проведем математические преобразования и получим следующие равенства: Пусть оптимальное расписание, по предыдущей лемме верно, что . Самая короткая работа не может быть выполнена раньше, чем . Таким образом илиТак как работы и выполнены к моменту и соответственно, то максимальное количество обработки, полученной этими работами составляетИз чего следует, что Продолжая в том же духе можно показать, что В итоге получаем следующие неравенства Если существует такой набор положительных чисел , что умножение -го неравенства на и сложение всех неравенств будет давать неравенство , тогда теорема будет доказана. Можно показать, что должны удовлетворять следующим равенствам |
См. также
Источники информации
- Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 134-135 ISBN 978-3-540-69515-8
- Dimitrios G. Pandelis "Optimal preemptive scheduling on uniform machines with discounted flowtime objectives" — с. 631-632
- M.L. Pinedo "Parallel Machine Models (Deterministic)" — с.135-136