Задача об оптимальном планировании работы

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Задача об оптимальном планировании работы (англ. Optimal job scheduling) — сильно NP-трудная задача комбинаторной оптимизации, заключающаяся в составлении расписаний. Входными данными задачи является список из задач и их продолжительностей и количество машин , на которых эти задачи могут выполняться. В зависимости от вариации проблемы могут быть добавлены дополнительные ограничения на скорость выполнения машинами задач. В результате алгоритм должен найти такое распределение задач по машинам, что задачи будут выполнены за минимально возможное время. Задачи не предусматривают наличие дедлайнов, поэтому последовательность их обработки может быть любой. NP-полнота задачи доказывается через редукцию к задаче о сумме подмножеств, так как она является частным случаем задачи об оптимальном планировании работы для количества машин .

Варианты задачи[править | править код]

Идентичные машины[править | править код]

Классический вариант задачи об оптимальном планировании, принимающий на вход количество машин , количество задач и целочисленную продолжительность каждой задачи . Необходимо найти такое отображение , что минимально. Настоящий вариант задачи имеет приближенную схему полиномиального времени.

Методы решения[править | править код]

Least Loaded[править | править код]

Эвристика Least Loaded по очереди присваивает все задачи машинам, имеющим наименьшую нагрузку. Очевидно, что оптимальность такого варианта решения проблемы зависит от порядка задач в поданном на вход списке.

  1. Выбери машину, имеющую наименьшую нагрузку.
  2. Для от до :
    1. Выбери такое, что минимально.
    2. Установи .

Фактор аппроксимации такой эвристики равен . Перед доказательством определим границу продолжительности для оптимального решения . Теперь рассмотрим задачу, которая будет выполнена последней и ситуацию, происходящую перед тем, как такая задача будет распределена. Пусть  — задача, которая будет выполнена последней, а  — машина, которой такая задача будет присвоена. До того, как задача была присвоена машине , нагрузка на машине была минимальной и составляла максимум . таким образом время работы машины будет равно .

Longest Processing Time[править | править код]

Данная эвристка уже не учитывает порядок задач на входе и располагает их, присваивая самой разгруженной машине самую продолжительную задачу:

  1. Выбери для самой продолжительной работы машину, имеющую наименьшую нагрузку.
  2. Пусть .
  3. Для от до :
    1. Выбери такое, что минимально.
    2. Установи .

Фактор аппроксимации эвристики равен , что намного лучше, чем у прошлого метода, так как не зависит от входных данных. Доказательство происходит от противного: Пусть максимальное время работы некоторой машины на некоторых входных данных больше и задача имеет минимальную продолжительность, а также . Так как имеет минимальное время выполнения,  — задача, которая будет выполнена последней и будет распределена машине, имеющей наименьшую нагрузку. К этому моменту нагрузка машины равна максимум . Для того, чтобы коэффициент имел значение , должен быть строго больше . Так как задачи отсортированы, для любой задачи справедливо , а значит, каждая машина может обработать не более двух задач и количество задач . Однако при этом оптимальным решением будет распределить задачи с номерами машинам с номерами , а задачи с номерами машинам с номерами , что и является распределением согласно эвристике Longest Processing Time. Противоречие.

PTAS Алгоритм[править | править код]

Идея алгоритма заключается в скалировании и округлении вверх продолжительности «долгих» задач, что приводит к появлению некоторой погрешности и уменьшению временной сложности.

  1. Оракул приводит значение  — максимальной оптимальной загруженности машин.
  2. Фаза 1:
    1. Рассматриваются «долгие задачи» .
    2. Масштабируй продолжительность задач из : .
    3. Определи планирование с продолжительностью задач и максимальной загруженностью машин
  3. Фаза 2:
    1. Рассматриваются «короткие» задачи .
    2. Распредели задачи согласно эвристике Least Loaded.

Лемма. Относительная погрешность округления не превосходит для .

Доказательство. Пусть , то есть «большая» задача, а значит . Из этого следует, что , а учитывая, что , получим . Доказательство леммы показывает, что при округлении скалированных «больших» задач, они изменяются с фактором не более .

Первая фаза заканчивается поиском планирования, учитывающего максимальную загруженность машин, что может быть решено методами динамического программирования, схожими с динамическим решением над ценностями предметов задачи о рюкзаке. Как следствие, временная сложность алгоритма с оракулом составляет , а фактор аппроксимации .

Однако оракул не может существовать. Иначе задача об оптимальном планировании имела бы эффективное решение. Тем не менее так как алгоритм аппроксимирует, нет нужды знать точное значение , поэтому его можно найти используя алгоритм бинарного поиска, начиная с верхнего порога продолжительности работы машины . Если длина входных данных в битах равна , то , а значит, общее время работы алгоритма равно .

Машины с разными скоростями[править | править код]

Следующий вариант задачи принимает на вход число машин , скорость каждой машины , количество задач и продолжительность каждой задачи . В отличие от предидущего варианта, необходимо найти такое отображение , что минимально. Решение такого варианта задачи аналогично решению варианта с идентичными машинами.

Машины общего назначения[править | править код]

На вход подается количество задач , количество машин и целочисленные продолжительности задач , кодирующие продолжительность задачи на машине . Найти требуется такое отображение , что минимально.

Методы решения[править | править код]

Целочисленное линейное программирование[править | править код]

Задачу можно представить как систему уравнений, но так как продолжительности задач целочисленные, мы получим целочисленную линейную программу (ЦЛП) вида:

Исходя из неравенства классов P и NP, ЦЛП не может быть решена за полиномиальное время. Если же убрать требование целочисленности, то решения при и будут приводить к максимальной загруженности машин , что плохо с точки зрения аппроксимации.

Однако если изменить ЦЛП следующим образом:

и обозначить , а за оптимальную максимальную нагрузку, получаемую у оракула, то можно получить более приемлемую ЛП. Решение ЛП не будет целочисленным, но его можно округлить, используя следующие правила:

  • Каждая задача может быть присвоена только одной машине.
  • Каждой машине может быть присвоено несколько задач.

Лемма. В решении вышеописанной ЛП максимум переменных больше нуля.

Доказательство. Пусть  — количество переменных, а  — количество неравенств ЛП. Тогда справедливы выражения и . Базисное решение ЛП точно удовлетворяет максимум неравенствам, а значит ограничений вида не выполнены минимум переменных равны нулю.

Из полученного решения ЛП можно построить связный граф распределения ресурсов, где , и . Такой граф будет иметь вершин, рёбер и максимум один цикл, так как граф связный. Чтобы правильно округлить решение с помощью графа , необходимо сначала удалить из графа все вершины задач, точно распредленных какой-либо машине (). В результате в графе не останется листьев из множества и можно будет найти на нем совершенное паросочетание, по результатам которого и будут распределены задачи.

Такой алгоритм обеспечивает -аппроксимацию для решения проблемы, потому что для нераспределённыx однозначно задач () действительно и каждая машина получит максимум одну такую нераспределённую задачу. Так каждая машина будет иметь максимальную нагрузку .