J2pij1Lmax — различия между версиями
| System29a (обсуждение | вклад)  (→Источники) | System29a (обсуждение | вклад)   (→Условие задачи) | ||
| Строка 3: | Строка 3: | ||
| В нотации Грэхема задача носит название <tex>J2\mid p_{ij} = 1\mid L_{max}</tex> | В нотации Грэхема задача носит название <tex>J2\mid p_{ij} = 1\mid L_{max}</tex> | ||
| − | Дано <tex>n</tex> работ <tex>i = 1,\ldots,n</tex> и две машины, обозначенные как <tex>A</tex> и <tex>B | + | Дано <tex>n</tex> работ <tex>i = 1,\ldots,n</tex> и две машины, обозначенные как <tex>A</tex> и <tex>B</tex>.   | 
| − | Задача заключается в том, что для данного каждой  | + | <tex>i</tex>-тая работа состоит из <tex>n_i</tex> операций <tex>O_{ij}</tex> <tex>(j = 1,\ldots n_i)</tex>, которые должны быть выполнены последовательно и, при этом, если  <tex>O_{ij} </tex> операция была совершена на машине <tex>A (B)</tex>, то операция <tex>O_{i,j-1}</tex> должна быть совершена на машине <tex>B (A)</tex>. | 
| + | |||
| + | Задача заключается в том, что для данного каждой <tex>i</tex>-той работе дедлайна <tex>d_i \ge 0</tex> необходимо найти достижимое расписание с наименьшими максимальным временем опоздания: | ||
| <tex>max\{C_i - d_i | i = 1, \ldots, n\}</tex> | <tex>max\{C_i - d_i | i = 1, \ldots, n\}</tex> | ||
Версия 21:52, 21 июня 2012
Содержание
Условие задачи
В нотации Грэхема задача носит название
Дано работ и две машины, обозначенные как и .
-тая работа состоит из операций , которые должны быть выполнены последовательно и, при этом, если операция была совершена на машине , то операция должна быть совершена на машине .
Задача заключается в том, что для данного каждой -той работе дедлайна необходимо найти достижимое расписание с наименьшими максимальным временем опоздания:
Описание решения
Таким образом, -тая работа может характеризоваться двумя значениями: количество операций и машина, на которой была совершена первая операция. Пусть — общее количество операций.
Допустим, самым ранним моментом, когда операция может начать выполняться, будет момент времени 0, а верхняя граница момента начала выполнения последней операции обозначим за . К примеру, мы можем выбрать . Тогда расписание можно представить как два массива и , где , если операция должна выполниться на машине в момент времени и , если машина простаивает в этот момент. Будем называть пустой операцией. И для каждой операции , выполняющейся на машине существует , для которого . Аналогично для . Расписание достижимо тогда и только тогда, когда из следует для некоторого , и первая операция для каждой работы запланирована на нужной машине. Перестановку всех операций будем называть списком. Для данный списка осуществимое расписание может быть создано следующим способом: планируем выполнять операции в порядке, соответствующим , причем каждую операцию стараемся выполнить как можно раньше. Подобное расписание будем называть соответствующим расписанием. — время окончания работы в достижимом расписании можно рассчитать как:
или — операция -той работы}
Задача заключается в том, что для данного каждой работе дедлайна мы хотим найти достижимое расписание с наименьшими максимальным временем опоздания:
Следующий алгоритм решает эту задачу:
- Введём для каждой операции величину
- Создадим список всех операций , упорядоченный в порядке неубывания значений
- Найдем соответствующее списку расписание.
Этот алгоритм может быть реализованным с асимптотикой . Однако, мы будем использовать эвристику с хешами и улучшим асимптотику алгоритма до .
Мы предполагаем, что для и хотя бы для одной работы . Иначе, вычтем из всех минимальное значение по
Так как для всех и справедливо как минимум для одной работы . К тому же, можно предположить, что . Таким образом, работы с , то есть c можно смело игнорировать. Они не влияют на значение улучшаемой функции , так как для некого Можно выполнять эти работы в любом порядке после всех остальных. Для оставшихся операций мы имеем:
Каждую операцию мы кладём в соответствующую корзину , где . На втором шаге мы планируем операции соответственно возрастающему по номеру корзины порядку, где операции из одной корзины могут выполнятся в произвольном порядке.
Алгоритм
Давайте детально рассмотрим алгоритм. и обозначают первый период времени , когда соответствующие машины и бездействуют. обозначает время окончания последней запланированной операции -той работы. — множество работ, где
main()
  for k: -r + 1 to r - 1
     = ;
    Z = ;
  for i: 1 to n
    if  < r
      for j: 1 to n_i
        добавить  в 
    else
      добавить работу i в Z
  for i: 1 to n
    LAST(i) = 0;
  T1 = 0;
  T2 = 0;
  for k: -r + 1 to r - 1
    while 
      Выбрать задание  из 
       = ;
      schedule() 
  while 
    Выбрать работу i из Z
    Z = ;
    for j: 1 to 
      schedule() 	
schedule() if == A if T1 < LAST(i) t = LAST(i) A(t) = else t = T1; A(t) = ; while T1 = T1 + 1; else if T2 < LAST(i) t = LAST(i) B(t) = else t = T2; A(t) = ; while T2 = T2 + 1; LAST(i) = t + 1
Очевидно, что количество шагов алгоритма ограничено
Источники
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — 180 стр. — ISBN 978-3-540-69515-8
