1ripmtnsumwu — различия между версиями
Zernov (обсуждение | вклад) (→Второй случай) |
Zernov (обсуждение | вклад) (→Второй случай) |
||
| Строка 58: | Строка 58: | ||
В этом случае существует простой в EDD расписании для множества <tex>C(S \setminus \{j\})</tex> после <tex>r_{j}</tex>. Пусть <tex>S'</tex> {{---}} последний блок в <tex>C(S \setminus \{j\})</tex>, то есть <tex>r(S') = \max\{r(B) \mid B </tex> является блоком в <tex> C(S \setminus \{j\}) \} </tex>. Тогда <tex>r(S') \geqslant r_{j}</tex>, в таком случае обязано выполняться равенство <tex>C(S') = C_{j - 1}(r(S'), w(s'))</tex>, иначе расписание для <tex>S</tex> будет не оптимально. | В этом случае существует простой в EDD расписании для множества <tex>C(S \setminus \{j\})</tex> после <tex>r_{j}</tex>. Пусть <tex>S'</tex> {{---}} последний блок в <tex>C(S \setminus \{j\})</tex>, то есть <tex>r(S') = \max\{r(B) \mid B </tex> является блоком в <tex> C(S \setminus \{j\}) \} </tex>. Тогда <tex>r(S') \geqslant r_{j}</tex>, в таком случае обязано выполняться равенство <tex>C(S') = C_{j - 1}(r(S'), w(s'))</tex>, иначе расписание для <tex>S</tex> будет не оптимально. | ||
| − | Кроме того, мы можем предположить, что общее количество | + | Кроме того, мы можем предположить, что общее количество сделанной работы в <tex>(S \setminus \{j\}) \setminus S'</tex>, лежащих в интервале <tex>[r_{j}, r(S')]</tex>, {{---}} минимально, учитвая выполнимые множества <tex>S \subseteq \{1 \ldots j \}</tex> такие, что <tex>r(S'') \geqslant r, C(S'') \leqslant r(S'), w(S'') \geqslant w - w_{j} - w(S')</tex>. |
| − | Пусть <tex>r, r'</tex> {{---}} даты появления <tex>r \leqslant r_{j} < r</tex>, и <tex>w''</tex> {{---}} некоторое целочисленное значение <tex>0 \leqslant w'' < W</tex>. За <tex>P_{j - 1}(r, r', w'')</tex> возьмем минимальное число | + | Пусть <tex>r, r'</tex> {{---}} даты появления <tex>r \leqslant r_{j} < r</tex>, и <tex>w''</tex> {{---}} некоторое целочисленное значение <tex>0 \leqslant w'' < W</tex>. За <tex>P_{j - 1}(r, r', w'')</tex> возьмем минимальное число сделанной работы в итервале <tex>[r_{j}, r']</tex>, учитвая выполнимые множества <tex>S \subseteq \{1 \ldots j \}</tex> такие, что <tex>r(S'') \geqslant r, C(S'') \leqslant r', w(S'') \geqslant w''</tex>. Если таких выполнимых множеств нет, то <tex>P_{j - 1}(r, r', w'') = \infty</tex>. |
| + | |||
| + | Используя данную запись, количество времен доступнух для обработки работы <tex>j</tex> в интервале <tex>[r_j, r(S')]</tex> записывается формулой | ||
| + | :<tex>(r(S') - r_j) - P_{j - 1}(r, r(S'), w - w_j - w(S'))</tex>. | ||
| + | |||
| + | Количество готовности работы (какое количество уже сделано) <tex>j</tex> после времени | ||
| + | :<tex>\max(0, p_j - (r(S') - r_j) + P_{j - 1}(r, r(S'), w - w_j - w(S'))</tex>. | ||
| + | |||
| + | И время выполнения последней работы <tex>j</tex> из <tex>S</tex> | ||
| + | :<tex>C_j(r,w) = \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' \} \}</tex>. | ||
=== Конечная формула === | === Конечная формула === | ||
Версия 12:11, 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