1ripmtnsumwu — различия между версиями
Zernov (обсуждение | вклад) (→Второй случай) |
Zernov (обсуждение | вклад) (→Конечная формула) |
||
Строка 72: | Строка 72: | ||
=== Конечная формула === | === Конечная формула === | ||
+ | Собирая все написаное выше, приходим к рекуррентной формуле: | ||
+ | :<p> | ||
+ | <tex>C_{j}(r, w) = \min | ||
+ | \left \{\begin{array}{ll} C_{j - 1}(r, w) \\ | ||
+ | \max \{r_j, C_{j - 1}(r, w - w_j) \} + p_j \\ | ||
+ | \min\limits_{r', w'} \{ C_{j - 1}(r', w') + \max \{ 0, p_j - r' + r_j + P_{j - 1}(r, r', w - w_j - w' \} \} \end{array} \right. | ||
+ | </tex> | ||
+ | </p> | ||
+ | |||
+ | В этой формуле внутренняя минимизация берется по всем различным датам появления <tex>r' > r_j</tex> таких, что <tex>r' = r(S') \in \{ r1 \ldots r_{j - 1} \} </tex> и целочисленным значениям <tex>w'</tex>, <tex>0 \leqslant w' < w - w_j</tex>. Важно, что формула корректна только в том случае, если правая часть не превышает <tex>d_j</tex> и, если это не так, то <tex> C_{j}(r, w) = \infty</tex>. | ||
Рассмотрим, как посчитать значения <tex>P_{j - 1}(r, r', w'')</tex> для <tex>r \leqslant r_j < r'</tex> и <tex>0 \leqslant w'' < W</tex>. Если <tex>w'' = 0</tex>, то <tex>P_{j - 1}(r, r', w'') = 0</tex>. Иначе значение <tex>P_{j - 1}(r, r', w'')</tex> можно посчитать, используя непустое множество <tex>S'' \subseteq \{ 1 \ldots j - 1\}</tex>. Если <tex>r (S'') > r</tex>, то<tex>P_{j - 1}(r, r', w'') = P_{j - 1}(r(S''), r', w'')</tex>. Кроме того, в общем случае, заметим, что выполнятся | Рассмотрим, как посчитать значения <tex>P_{j - 1}(r, r', w'')</tex> для <tex>r \leqslant r_j < r'</tex> и <tex>0 \leqslant w'' < W</tex>. Если <tex>w'' = 0</tex>, то <tex>P_{j - 1}(r, r', w'') = 0</tex>. Иначе значение <tex>P_{j - 1}(r, r', w'')</tex> можно посчитать, используя непустое множество <tex>S'' \subseteq \{ 1 \ldots j - 1\}</tex>. Если <tex>r (S'') > r</tex>, то<tex>P_{j - 1}(r, r', w'') = P_{j - 1}(r(S''), r', w'')</tex>. Кроме того, в общем случае, заметим, что выполнятся |
Версия 15:29, 7 июня 2016
Задача: |
Дана задача на нахождение расписания:
|
Содержание
Описание алгоритма
Идея
Пусть работы заданы в порядке неубывания их дедлайнов, то есть
. За обозначим количество различных . ЗаНазовем множество работ
выполнимым (англ. feasible), если существует такое расписание для работ из , что все работы будут выполнены без опозданий. Чтобы проверить, является ли множество работ выполнимым, воспользуемся упрощенной версией EDD правила (см. стр 70 в Брукере):- Составим расписание работ таким образом, чтобы первой в расписании стояла работа с наименьшим значением . В любой момент времени, когда появляется новая работа, либо заканчивает выполняться текущая, вставим в расписание работу с наименьшим оставшимся сроком.
выполнимо тогда и только тогда, когда все работы в EDD расписании выполняются без опозданий. Это прямое следствие из уже теоремы 4.4 (Брукер). Если в содержится работ, то построение EDD расписание может быть выполнено за времени. Наша задача сводится к тому, чтобы найти выполнимое множество работ с максимальным суммарным весом.
Для данного непустого множества
определим следующие величины:Кроме того, обозначим за
время последней выполненной работы из в EDD расписании. Оно состоит из периодов непрерывного выполнения работы, разделенных периодами бездействия, когда нет доступных работ для выполнения. Это означает, что может быть разделено на множества , для которых выполняется для .Выполнимое множество
является блоком (англ. block), если работы из обрабатываются непрерывно с начала и до конца, и не может быть разделен на подмножества, расписания для которых не пересекаются, например, если и не является объединением и таких, что . Решим задачу методами динамического программирования.Введем величину
— выполнимое и , если множеств, удовлетворяющих условиям, нет.Максимальный вес выполнимого множества задается максимальным значением
такого, что конечно, где . Посчитаем значения за итераций с начальными значениями- для всех
- для всех и
не может содержаться в выполнимом множестве, если . Следовательно,
Отсюда следует, что нам нужно посчитать только такие значения
для которых . Пусть и . Если , тогда . Иначе рассмотрим два случая.Первый случай
Работа
начинается после .Рассмотрим два подслучая, для
и .- В первом случае
- Во втором работы из обрабатываются непрерывно в интервале , потому что иначе начнет обрабатываться до .
Делаем вывод, что
. Предположим, что такое, что и, если это не так, заменим на выполнимое подмножество из для которого это выполняется. Из этого следует, что- .
Второй случай
Работа
начинается перед .В этом случае существует простой в EDD расписании для множества
после . Пусть — последний блок в , то есть является блоком в . Тогда , в таком случае обязано выполняться равенство , иначе расписание для будет не оптимально.Кроме того, мы можем предположить, что общее количество сделанной работы в
, лежащих в интервале , — минимально, учитвая выполнимые множества такие, что .Пусть
— даты появления , и — некоторое целочисленное значение . За возьмем минимальное число сделанной работы в итервале , учитвая выполнимые множества такие, что . Если таких выполнимых множеств нет, то .Используя данную запись, количество времен доступнух для обработки работы
в интервале записывается формулой- .
Количество готовности работы (какое количество уже сделано)
после времени- .
И время выполнения последней работы
из- .
Конечная формула
Собирая все написаное выше, приходим к рекуррентной формуле:
В этой формуле внутренняя минимизация берется по всем различным датам появления
таких, что и целочисленным значениям , . Важно, что формула корректна только в том случае, если правая часть не превышает и, если это не так, то .Рассмотрим, как посчитать значения
для и . Если , то . Иначе значение можно посчитать, используя непустое множество . Если , то . Кроме того, в общем случае, заметим, что выполнятся- .
Где за
берется наименьшая дата появления, меньшая чем , если такая существует.Если
, то пусть будет блоком таким, что . Можно предположить, что . Следовательно, общее количество сделанной работы из в интервале будет равно- .
Пусть
будет наименьшей датой появления, меньшей или равной . Тогда общее количество сделанной работы в в интервале будет равно . Следовательно, общее количество сделанной работы в в интервале будет равно- .
Правая часть выражения должна быть минимальной для множеств
и . Собирая все вместе, получим формулу
С начальными значениями
- для
- для
Максимальный вес вычислимого множества может быть посчитан с помощью нахождения максимального значения
такого, что — конечно.Ассимптотика
На каждой из
итераций для существует вычислямых значений , по одному на каждую комбинацию из . По представленной выше формуле, каждое значение находится с помощью минимизации из выборов . Следовательно, время, требуемое для вычисления значений , ограниченно на каждой итерации. Всего нам нужно посчитать значений , по одному на каждую комбинацию и . Из формулы, приведенной для второго случая, каждое значение считается с помощью минимизации выборов . Следовательно, время, требуемое для вычисления значений на каждой итерации, ограниченно . Максимальный вес вычислимого множества может быть посчитан с помощью нахождения максимального значения такого, что — конечно. Сделать это мы можем за . Итоговая сложность составляет .Чтобы создать вычислимое множество с максимальным весом, мы считаем характеристический вектор, учитывая значения
и . Вычисляем веторы за , это значение меньше, чем .Специальные случаи
Источники информации
- Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 88-93 ISBN 978-3-540-69515-8