Opij1sumwu — различия между версиями
(→Описание алгоритма) |
(→Описание алгоритма) |
||
Строка 9: | Строка 9: | ||
Рассмотрим работы в порядке не убывания дедлайнов: <tex>d_{1} \leqslant d_{2} \leqslant \ldots \leqslant d_{n}</tex>. Пусть мы нашли решение для работ <tex>1, 2, \ldots, i-1</tex>. Очевидно, что <tex>S \subseteq \{1, \ldots i-1\}</tex>. | Рассмотрим работы в порядке не убывания дедлайнов: <tex>d_{1} \leqslant d_{2} \leqslant \ldots \leqslant d_{n}</tex>. Пусть мы нашли решение для работ <tex>1, 2, \ldots, i-1</tex>. Очевидно, что <tex>S \subseteq \{1, \ldots i-1\}</tex>. | ||
− | Пусть <tex>h^S</tex> {{---}} вектор соответствующий множеству <tex>S</tex> из задачи [[Opij1di|<tex> O \mid p_{i,j} = 1, d_i \mid - </tex>]]. Тогда, для добавления работы <tex>i</tex> в множество <tex>S</tex> должно выполняться неравенство: <tex>m(d_i-m)-(km-\sum\limits_{j=1}^m {h^S(d_i-m+j)})+x(d_i) \geqslant m</tex>, где <tex>k=|S|</tex> и <tex>x(d_i)</tex> {{---}} количество периодов времени <tex>t</tex> со свойствами: <tex>d_i-m+1 \leqslant t \leqslant d_i</tex> и <tex>h^S(t) < m</tex>. Чтобы проверить это неравенство, нам нужно <tex>m</tex> чисел <tex>h^S(t), t=d_i-m+1, \ldots, d_i</tex>. | + | Пусть <tex>h^S</tex> {{---}} вектор соответствующий множеству <tex>S</tex> из задачи [[Opij1di|<tex> O \mid p_{i,j} = 1, d_i \mid - </tex>]]. Тогда, для добавления работы <tex>i</tex> в множество <tex>S</tex> должно выполняться неравенство: <tex>m(d_i-m)-(km-\sum\limits_{j=1}^m {h^S(d_i-m+j)})+x(d_i) \geqslant m</tex>, где <tex>k=|S|</tex> и <tex>x(d_i)</tex> {{---}} количество периодов времени <tex>t</tex> со свойствами: <tex>d_i-m+1 \leqslant t \leqslant d_i</tex> и <tex>h^S(t) < m</tex>. Чтобы проверить это неравенство, нам нужно посчитать <tex>m</tex> чисел <tex>h^S(t)</tex>, <tex>t=d_i-m+1, \ldots, d_i</tex>. |
Определим переменные: | Определим переменные: |
Версия 18:23, 14 мая 2016
Задача: |
Дано | одинаковых станков, которые работают параллельно, и работ, которые необходимо выполнить в произвольном порядке на всех станках. Любая работа на любом станке выполняется за единицу времени. Для каждой работы есть время окончания — время, до которого она должна быть выполнена. Требуется минимизировать , то есть суммарный вес всех просроченных работ.
Описание алгоритма
Для решения этой задачи, мы должны найти множество .
, что минимальна. Будем решать эту задачу с помощью динамического программирования с использованием утверждений из решении задачиРассмотрим работы в порядке не убывания дедлайнов:
. Пусть мы нашли решение для работ . Очевидно, что .Пусть . Тогда, для добавления работы в множество должно выполняться неравенство: , где и — количество периодов времени со свойствами: и . Чтобы проверить это неравенство, нам нужно посчитать чисел , .
— вектор соответствующий множеству из задачиОпределим переменные:
.
Тогда можно заметить, что
.Упростим исходное неравенство:
или .Для динамического программирования определим
для минимизации , где и где .Пусть
, тогда определим рекуррентное выражение для :
и начальное условие:
для .Ответ на задачу будет находиться в
Время работы
Для определения времени работы алгоритма надо заметить, что
, где . Из рекуррентной формулы очевидно, что подсчет одного значение нужно времени. Значит алгоритм работает за или для фиксированного .См. также
Источники информации
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — c. 168 - 171. ISBN 978-3-540-69515-8