Изменения

Перейти к: навигация, поиск

1outtreesumwc

1281 байт добавлено, 14:33, 10 июня 2013
Нет описания правки
Мы должны составить расписание с произвольными временами обработки на одном станке. Минимизировать нужно взвешенную сумму времен завершения работ. Зависимости между работами заданы исходящим деревом {{---}} работа, которая соответствует корню, доступна в начале, все другие работы зависят от одной работы {{---}} отца в дереве. Тривиальным примером подобной задачи является демонтаж сложного механизма.
== Алгоритм Свойства оптимального расписания ==
Решение данной задачи было предложено Адольфсоном и Ху<ref>D. Adolphson and T.C. Hu. Optimal linear ordering. SIAM Journalof Applied MathematicsДокажем некоторые свойства оптимального расписания, 25:403–423, 1973.</ref> которые мы будем использовать в 1973 годудоказательстве корректности алгоритма.
Докажем Введем некоторые свойства оптимального расписанияобозначения для удобства. За <tex> E </tex> обозначим список всех ребёр дерева. Для всех работ <tex>i = 1, которые мы будем использовать ..., n</tex> обозначим обозначим за <tex>S(i)</tex> всех потомков <tex>i</tex> в доказательстве корректности алгоритмадереве зависимостей, включая саму работу <tex>i</tex>, введём новый парамерт работы <tex dpi = 150>q_i = \frac{w_i}{p_i}</tex>.
Введем некоторые обозначения для удобства. Обозначим за <tex>S(i)</tex> поддерево работы <tex>i</tex> в дереве зависимостей. Для всех работ <tex>i = 1, ..., n</tex> обозначим <tex>q_i = \frac{w_i}{p_i}</tex>. Для множества подмножества работ <tex>I \subseteq \{1, ..., n\}</tex>определим:
<texdpi = 150>w(I) = \sum\limits_{i \in I} w_i, p(I) = \sum\limits_{i \in I} p_i, q(I) = \frac{w(I)}{p(I)}</tex>
Два непересекающихся множества работ <tex>I, J \subseteq \{1, ..., n\}</tex> будем называть ''параллельными'' (<tex>I \sim J</tex>), если для всех <tex>i \in I, j \in J</tex> выполняется: <tex>i</tex> не является ни предком, ни потомком <tex>j</tex>. Если множества состоят из одной работы <tex>I = \{i\}, J = \{j\}</tex>, будем писать <tex>i \sim j</tex>. Каждое расписание представлено перестановкой <tex>\pi</tex>.
{{Лемма
|id=46lemma1|about=1|statement= Пусть <tex>\pi</tex> {{---}} оптимальное расписание, <tex>I</tex> и <tex>J</tex> {{---}} два таких параллельных блока (множества работ, выполняемых последовательно) из <tex>\pi</tex>, что <tex>J</tex> выполняется сразу после <tex>I</tex>. Пусть <tex>\pi'</tex> {{---}} расписание, полученное из <tex>\pi</tex> перестановкой <tex>I</tex> и <tex>J</tex>. Тогда выполяются следующие пункты:а) <tex> (a)~ I \sim J \Rightarrow q(I) \ge q(J)</tex> б<tex>(b) </tex> Если <tex>I \sim J</tex> и <tex>q(I) = q(J)</tex>, то <tex>\pi'</tex> {{---}} оптимальное расписание.
|proof=
а<tex>(a) </tex> Пусть <tex>f = \sum w_i C_i</tex>. Так как <tex>\pi</tex> {{---}} оптимальное расписание, то <tex>f(\pi) \le f(\pi')</tex>. Таким образом:
<tex>0 \le f(\pi') - f(\pi) = w(I) p(J) - w(J) p(I)</tex>
Поделим на <tex>p(I)p(J)</tex>:
<texdpi = 150>q(I) = \frac{w(I) / }{p(I) } \ge \frac{w(J) / }{p(J) } = q(J) </tex>
б<tex>(b) </tex> Если <tex>q(I) = q(J) </tex>, то <tex>f(\pi) = f(\pi') </tex>, следовательно расписание <tex>\pi'</tex> оптимально.
}}
{{Теорема
|id = theorem1
|statement = Пусть <tex>i, ~j</tex> работы такие, что <tex>i</tex> {{---}} потомок <tex>j</tex>, и <tex> q_j = \max \{q_k \mid ~ (i, k) \in E \}</tex>. <br>
Тогда существует оптимальное расписание, в котором работа <tex>j</tex> идёт сразу после работы <tex>i</tex>
|proof =
Каждое расписание может быть представлено последовательностью работ в порядке, в котором они выполняются. Пусть <tex> \pi </tex> будет оптимальной такой последовательностью со свойством, что количество работ между <tex> i </tex> и <tex> j </tex> равное <tex> l </tex> было бы минимальным. Можно считать, что <tex> l > 0 </tex>. Тогда расписание можно представить следующим образом:
}}
== Литература ==
* P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 73 - 78
[[Категория: Дискретная математика и алгоритмы]]== Примечания ==<references/>[[Категория: Теория расписаний]]

Навигация