Интервальное планирование — это класс задач в информатике , в частности, в области разработки алгоритмов . В задачах рассматривается набор задач. Каждая задача представлена интервалом, описывающим время, в течение которого она должна быть обработана некоторой машиной (или, что эквивалентно, запланирована на некотором ресурсе). Например, задача A может выполняться с 2:00 до 5:00, задача B может выполняться с 4:00 до 10:00, а задача C может выполняться с 9:00 до 11:00. Подмножество интервалов совместимо, если никакие два интервала не перекрываются на машине/ресурсе. Например, подмножество {A,C} совместимо, как и подмножество {B}; но ни {A,B}, ни {B,C} не являются совместимыми подмножествами, потому что соответствующие интервалы внутри каждого подмножества перекрываются.
Задача максимизации интервального планирования (ISMP) заключается в поиске наибольшего совместимого набора, т. е. набора неперекрывающихся интервалов максимального размера. Цель здесь — выполнить как можно больше задач, т. е. максимизировать пропускную способность . Это эквивалентно поиску максимального независимого набора в интервальном графике .
Обобщение проблемы рассматривает машины/ресурсы. [1] Здесь цель состоит в том, чтобы найти совместимые подмножества, объединение которых является наибольшим.
В улучшенной версии задачи интервалы разбиваются на группы. Подмножество интервалов совместимо , если никакие два интервала не перекрываются, и, более того, никакие два интервала не принадлежат к одной и той же группе (т. е. подмножество содержит не более одного представителя каждой группы). Каждая группа интервалов соответствует одной задаче и представляет собой несколько альтернативных интервалов, в которых она может быть выполнена.
Задача принятия решения о групповом интервальном планировании (GISDP) заключается в том, чтобы решить, существует ли совместимый набор, в котором представлены все группы. Цель здесь — выполнить одну репрезентативную задачу из каждой группы. GISDPk — это ограниченная версия GISDP, в которой число интервалов в каждой группе не превышает k .
Задача группового интервального планирования (GISMP) заключается в поиске наибольшего совместимого набора — набора неперекрывающихся представителей максимального размера. Цель здесь — выполнить представительную задачу из как можно большего числа групп. GISMPk — это ограниченная версия GISMP, в которой количество интервалов в каждой группе не превышает k . Эту задачу часто называют JISPk, где J означает Job .
GISMP — наиболее общая проблема; две другие проблемы можно рассматривать как ее частные случаи:
Все эти проблемы можно обобщить, добавив вес для каждого интервала, представляющий прибыль от выполнения задачи в этом интервале. Затем цель состоит в том, чтобы максимизировать общий вес.
Все эти проблемы являются частными случаями планирования на одной машине , поскольку они предполагают, что все задачи должны выполняться на одном процессоре. Планирование на одной машине является частным случаем оптимального планирования заданий .
Одноинтервальное планирование подразумевает создание интервального расписания, в котором никакие интервалы не перекрываются.
Несколько алгоритмов, которые на первый взгляд кажутся многообещающими, на самом деле не находят оптимального решения: [2]
Следующий жадный алгоритм , называемый планированием по принципу «сначала самый ранний дедлайн» , находит оптимальное решение для невзвешенного одноинтервального планирования:
Всякий раз, когда мы выбираем интервал на шаге 1, нам, возможно, придется удалить много интервалов на шаге 2. Однако все эти интервалы обязательно пересекают время окончания x , и, таким образом, они все пересекают друг друга. Следовательно, не более 1 из этих интервалов может быть в оптимальном решении. Следовательно, для каждого интервала в оптимальном решении существует интервал в жадном решении. Это доказывает, что жадный алгоритм действительно находит оптимальное решение.
Более формальное объяснение дается аргументом обвинения .
Жадный алгоритм может быть выполнен за время O( n log n ), где n — количество задач, с использованием этапа предварительной обработки, на котором задачи сортируются по времени их завершения.
Задачи, связанные с планированием взвешенных интервалов, эквивалентны поиску независимого множества с максимальным весом в интервальном графе . Такие задачи могут быть решены за полиномиальное время. [3]
Предполагая, что векторы отсортированы от самого раннего к самому позднему времени окончания, следующий псевдокод определяет максимальный вес одноинтервального расписания за время Θ(n):
// Векторы уже отсортированы от самого раннего до самого позднего времени окончания.int v [ numOfVectors + 1 ]; // список интервальных векторов int w [ numOfVectors + 1 ]; // w[j] — вес для v[j]. int p [ numOfVectors + 1 ]; // p[j] — это количество векторов, которые заканчиваются до начала v[j]. int M [ numOfVectors + 1 ]; int finalSchedule []; // v[0] не существует, и первый интервальный вектор присваивается v[1].ш [ 0 ] = 0 ; р [ 0 ] = 0 ; М [ 0 ] = 0 ; // Следующий код определяет значение M для каждого вектора.// Максимальный вес расписания равен M[numOfVectors].для ( int i = 1 ; i < numOfVectors + 1 ; i ++ ) { М [ я ] = макс ( w [ я ] + М [ р [ я ]], М [ я - 1 ]); }// Функция построения оптимального расписаниярасписание ( j ) { если ( j == 0 ) { возврат ; } иначе если ( w [ j ] + M [ p [ j ]] >= M [ j - 1 ]){ добавить ( v [ j ], FinalSchedule ); // добавляет v[j] к расписанию. расписание ( p [ j ]); } иначе { расписание ( j - 1 ); } }
[4]
Если у нас есть следующие 9 векторов, отсортированных по времени финиша, с весами над каждым соответствующим интервалом, мы можем определить, какие из этих векторов включены в наш график максимальных весов, который содержит только подмножество следующих векторов.
Здесь мы вводим наш окончательный вектор (где j=9 в этом примере) в нашу функцию расписания из блока кода выше. Мы выполняем действия в таблице ниже, пока j не будет установлено в 0, после чего мы включаем в наше окончательное расписание только те встреченные интервалы, которые соответствуют требованию . Это окончательное расписание — расписание с максимальным весом.
GISDPk является NP-полной, когда , [5] даже когда все интервалы имеют одинаковую длину. [6] Это можно показать с помощью сведения к следующей версии задачи булевой выполнимости , которая, как было показано [7], является NP-полной , как и неограниченная версия.
Учитывая экземпляр этой проблемы выполнимости, постройте следующий экземпляр GISDP. Все интервалы имеют длину 3, поэтому достаточно представить каждый интервал его начальным временем:
Обратите внимание, что нет перекрытия между интервалами в группах, связанных с разными предложениями. Это обеспечивается, поскольку переменная появляется максимум дважды положительно и один раз отрицательно.
Построенный GISDP имеет допустимое решение (т. е. расписание, в котором представлена каждая группа), если и только если заданный набор булевых предложений имеет удовлетворяющее назначение. Следовательно, GISDP3 является NP-полным, и поэтому GISDPk для каждого .
GISDP2 может быть решена за полиномиальное время с помощью следующего сведения к задаче 2-выполнимости : [6]
Эта конструкция содержит не более O( n 2 ) предложений (по одному на каждое пересечение интервалов, плюс два на каждую группу). Каждое предложение содержит 2 литерала. Выполнимость таких формул может быть определена за время, линейное по количеству предложений (см. 2-SAT ). Следовательно, GISDP2 может быть решена за полиномиальное время.
GISMPk является NP-полной, даже когда . [8]
Более того, GISMPk является MaxSNP -полным, т.е. он не имеет PTAS, если P=NP. Это можно доказать, показав сохраняющее приближение сокращение от MAX 3-SAT-3 до GISMP2. [8]
Следующий жадный алгоритм находит решение, которое содержит не менее 1/2 оптимального числа интервалов: [8]
Формальное объяснение дается аргументом обвинения .
Фактор аппроксимации 2 является узким. Например, в следующем примере GISMP2:
Жадный алгоритм выбирает только 1 интервал [0..2] из группы №1, в то время как оптимальное планирование заключается в выборе [1..3] из группы №2, а затем [4..6] из группы №1.
Более общий алгоритм аппроксимации обеспечивает двухфакторную аппроксимацию для взвешенного случая. [3]
Используя технику релаксации линейного программирования , можно приблизиться к оптимальному планированию с немного лучшими факторами аппроксимации. Коэффициент аппроксимации первого такого алгоритма асимптотически равен 2, когда k велико, но когда k=2, алгоритм достигает коэффициента аппроксимации 5/3. [8] Коэффициент аппроксимации для произвольного k был позже улучшен до 1,582. [9]
Задача интервального планирования может быть описана графом пересечений , где каждая вершина является интервалом, и между двумя вершинами есть ребро тогда и только тогда, когда их интервалы перекрываются. В этом представлении задача интервального планирования эквивалентна поиску максимального независимого множества в этом графе пересечений. Поиск максимального независимого множества является NP-трудной задачей в общих графах, но может быть выполнен за полиномиальное время в особом случае графов пересечений (ISMP).
Задача группово-интервального планирования (GISMPk) может быть описана аналогичным графом пересечений интервалов с дополнительными ребрами между каждыми двумя интервалами одной и той же группы, т. е. это объединение ребер интервального графа и графа, состоящего из n непересекающихся клик размера k .
Важным классом алгоритмов планирования является класс алгоритмов динамического приоритета. Когда ни один из интервалов не перекрывается, оптимальное решение является тривиальным. Оптимум для невзвешенной версии может быть найден с самым ранним крайним сроком первым планированием . Взвешенное интервальное планирование является обобщением, в котором значение назначается каждой выполненной задаче, а цель состоит в том, чтобы максимизировать общее значение. Решение не обязательно должно быть уникальным.
Задача интервального планирования является одномерной — только измерение времени имеет значение. Задача о максимальном непересекающемся множестве является обобщением на 2 или более измерений. Это обобщение также является NP-полным.
Другой вариант — распределение ресурсов, в котором набор интервалов s планируется с использованием ресурсов k таким образом, что k минимизируется. То есть все интервалы должны быть запланированы, но цель состоит в том, чтобы минимизировать использование ресурсов.
Другой вариант — когда вместо одного процессора есть m процессоров. То есть, m различных задач могут выполняться параллельно. См. планирование идентичных машин .
Планирование работы одной машины также представляет собой очень похожую проблему.