1ripippmtnsumwu — различия между версиями
| Swanwarp (обсуждение | вклад)  (→Решение) | Swanwarp (обсуждение | вклад)   (→Динамика) | ||
| Строка 44: | Строка 44: | ||
| <tex>\forall t_u, t_v \in \Theta, u <= v, \forall k \in (1, \dots ,n), \forall m \in (1, \dots ,n):</tex> | <tex>\forall t_u, t_v \in \Theta, u <= v, \forall k \in (1, \dots ,n), \forall m \in (1, \dots ,n):</tex> | ||
| * <tex>r_k \notin [t_u, t_v) \Rightarrow W_k(t_u, t_v, m) = W_{k-1}(t_u, t_v, m);</tex> | * <tex>r_k \notin [t_u, t_v) \Rightarrow W_k(t_u, t_v, m) = W_{k-1}(t_u, t_v, m);</tex> | ||
| − | * Иначе <tex>W_k(t_u, t_v, m) = max(W_{k-1}(t_u, t_v, m), W'_k)</tex> | + | * Иначе <tex>W_k(t_u, t_v, m) = \max(W_{k-1}(t_u, t_v, m), W'_k)</tex>, где <tex>W'_k = w_k + \max(W_{k-1}(t_u, t_x, m_1) + W_{k-1}(t_x, t_y, m_2) + W_{k-1}(t_y, t_v, m_3))</tex>. | 
| − | <tex>W'_k = w_k + max(W_{k-1}(t_u, t_x, m_1) + W_{k-1}(t_x, t_y, m_2) + W_{k-1}(t_y, t_v, m_3))</tex> | ||
| |proof= | |proof= | ||
| + | Если <tex>r_k \notin [t_u, t_v)</tex>, то работа <tex>J_k</tex> не может быть поставлена ни в какой <tex>Z</tex> такой, что <tex>JPS</tex> от <tex>Z</tex> разрешимо и <tex>Z \subset U_k(t_u, t_v)</tex>. Тогда, очевидно, что <tex>W_k(t_u, t_v, m) = W_{k-1}(t_u, t_v, m);</tex> | ||
| + | Теперь рассмотрим случай, когда <tex>r_k \in [t_u, t_v)</tex>. Сначала докажем, что <tex>W_k(t_u, t_v, m) \geqslant \max(W_{k-1}(t_u, t_v, m), W'_k)</tex>. | ||
| + | * <tex>W_{k-1}(t_u, t_v, m) > W'_k</tex>  | ||
| + | *:Так как <tex>U_{k-1}(t_u, t_v) \subseteq U_k(t_u, t_v)</tex>, то <tex>W_{k-1}(t_u, t_v, m) \leqslant W_k(t_u, t_v, m)</tex>. | ||
| + | |||
| + | * <tex> W_{k-1}(t_u, t_v, m) < W'_k</tex> | ||
| + | *:Пусть существуют такие <tex>t_x, t_y \in \Theta</tex> и три числа <tex>m_1,m_2,m_3</tex>, такие что | ||
| + | *:# <tex> \max(r_k, t_u) \leqslant t_x < t_y \leqslant \min(d_k, t_v)</tex>, | ||
| + | *:# <tex> m_1 + m_2 + m_3 = m - 1</tex>, | ||
| + | *:# <tex> p \cdot (m_2 + 1) = t_y - t_x</tex>, | ||
| + | *: Очевидно, что <tex>U_{k-1}(t_u, t_x), U_{k-1}(t_x, t_y)</tex> и <tex>U_{k-1}(t_y, t_v)</tex> не пересекаются. Следовательно, <tex>JPS</tex> подмножеств, которые реализуют <tex>W_{k-1}(t_u, t_x, m_1), W_{k-1}(t_x, t_y, m_2)</tex> и <tex>W_{k-1}(t_y, t_v, m_3)</tex>, поставленные друг за другом дадут правильное расписание для <tex>m-1</tex> работ взятых из <tex>U_{k-1}(t_u, t_v)</tex>. Более того, у нас достаточно места чтобы вставить работу <tex>J_k</tex> в промежуток между <tex>t_x</tex> и <tex>t_y</tex>. Это возможно, так как <tex>p \cdot (m_2 + 1) = t_y - t_x</tex> и ровно <tex>m_2</tex> работ распределено для <tex>U_{k-1}(t_x, t_y)</tex>. Таким образом <tex>W'_k \leqslant W_k(t_u, t_v, m)</tex>. | ||
| }} | }} | ||
Версия 22:41, 4 июня 2016
| Задача: | 
| Дано работ и 1 станок. Для каждой работы известны её время появления и вес , а также дедлайн . Время выполнения всех работ равно . Каждую работу можно прервать и продолжить ее выполнение в любой момент времени. Требуется выполнить все работы, чтобы значение (суммарный вес просроченных работ) было минимальным. | 
Содержание
Решение
Постановка цели
Необходимо найти выполнимое множество работ такое, что его суммарный вес максимален. Эта проблема решается с помощью динамического программирования. Предполагается, что работы отсортированы в порядке неубывания дедлайна.
Jackson Preemptive Schedule
- это алгоритм построения расписания работ для одной машины с прерываниями. Пусть у нас есть множества работ , для которых надо составить расписание, и множество , которое состоит из работ, доступных для выполнения на данный момент. Возможны два случая:
- Если машина освободилась, то вставляем в расписание работу с наименьшим . Также удалим из .
- Если машина занята работой и в момент времени появилась работа , тогда если , то прервем и поставим на выполнение , а добавим в . В противном случае просто добавим в .
Можно заметить что, если работа была вставлена в после своего дедлайна, то данное множество работ не является выполнимым. Таким образом, решение задачи сводится к нахождению такого множества работ , которое будет выполнимым по и чей вес будет максимален.
| Лемма: | 
| Пусть . Тогда  время начала  и время окончания  этой работы в  будет принадлежать . | 
| Доказательство: | 
| Сначала докажем лемму для . Пусть - минимальная временная точка такая, что между и не простаивает. По структуре . Работы, которые выполняются между и , не могут выполняться ни до , ни после , даже частично. Это следует из структуры - если работа была прервана работой , то после выполнения мы снова вставляем в расписание . Таким образом, делится на . Возможны следующие два случая: 
 В любом из этих двух случаев есть такое , такое что не простаивает между и . Тогда делится на . Следовательно, не превышает , так как не простаивает. Поэтому . 
 | 
Динамика
| Определение: | 
| 
 | 
| Лемма: | 
| 
 | 
| Доказательство: | 
| Если , то работа не может быть поставлена ни в какой такой, что от разрешимо и . Тогда, очевидно, что 
 
 
 | 
См. также
Источники информации
Philippe Baptiste - Polynomial Time Algorithms for Minimizing the Weighted Number of Late Jobs on a Single Machine with Equal Processing Times
