Методы решения задач теории расписаний
Сведение к другой задаче
При сведении текущей задачи теории расписаний
к какой-то другой (не обязательно задаче теории расписаний) необходимо доказать два пункта:- Допустимость расписания, построенного с помощью задачи , или существование способа его трансформации в допустимое без нарушения оптимальности.
- Следствие того, что если мы оптимизируем , мы также оптимизируем ответ для (обратное в общем случае неверно).
Примечание — если требуется полиномиальное время для решения задачи, требуется, чтобы сведение к другой задаче и трансформация расписания в допустимое также происходили за полиномиальное время.
Примеры
1 | intree | Sum(w_i C_i)
Предположим, что мы уже умеем решать задачу [1]. Сведем нашу задачу к ней следующим образом:
- Развернем все ребра, теперь если работа зависела от работы , работа будет зависеть от .
- Заменим все стоимости на противоположные .
Утверждается, что решив соответствующую задачу
и развернув полученное расписание, мы получим ответ для текущей задачи.- Полученное расписание будет допустимым, так как расписание для было допустимым, и в нем никакие две работы не пересекались и не прерывались. Развернув, мы не могли нарушить это свойство. Также из-за того, что мы развернули расписание, мы добились того, что все работы выполняются в правильном порядке (в расписании для из-за того, что расписание было развернуто, порядок был нарушен для всех работ). Таким образом, получили что расписание — допустимое.
- Пусть с помощью задачи
- Заметим, что первое слагаемое соответствует целевой функции для последовательности , а второе и третье слагаемые — константы, зависящие только от начальных данных и не зависящие от перестановки работ. Таким образом, оптимальное значение для также минимизирует , ч.т.д.
мы получили последовательность работ (не теряя общности, занумеруем их от 1 до n). Распишем по определению значение целевой функции для :
R || Sum(C_i)
В этой задаче дано
работ и машин, причем для каждой машины длительность выполнения на ней -й работы своя и равна .Рассмотрим произвольное допустимое расписание для этой задачи. Рассмотрим какую-то машину
, пусть на ней выполняется работ. Тогда вклад этой машины в целевую функцию (не теряя общности, пронумеруем работы на этой машине от до ) рассчитывается как:
Заметим, что в каждом допустимом расписании перед каждой работой окажется коэффициент
, означающий, что соответствующая работа выпллняется -й с конца. Понятно, что в различных расписаниях может принимать значения от до .Сведем задачу к назначению каждой работы mincost-maxflow. Поместим в левую долю графа работы, в правую долю — пары из машины и коэффициента и проведем соответствующие ребра пропускной способности и стоимости , соответствующие вкладу работы в целевую функцию, если она окажется в позиции с конца на машине . Проведем из стока в левую долю ребра стоимости и пропускной способности , из правой доли в сток — также ребра стоимости и пропускной способности . Найдем в этой сети максимальный поток минимальной стоимости. Утверждается, что если ребро насыщено потоком, то работа в оптимальном расписании должна стоять на машине в позиции с конца.
позиции с конца на машине с помощью задачи- Целевые функции задачи mincost-maxflow и текущей задачи совпадают, так как у ребер между долями пропускная способность 1, а у дополнительных ребер из истока и в сток нулевая стоимость, и они не могут внести вклад в целевую функцию.
- Расписание, построенное по вышепредставленному способу действительно будет допустимым.
- Благодаря ограничениям на поток, входящий в левую долю, каждая работа будет назначена только один раз.
- Благодаря ограничениям на поток, выходящий из правой доли, на каждую позицию будет назначено не более одной работы.
- Докажем, что не возникает ситуации такой, что существует такая позиция , что в этой позиции с конца стоит какая-то работа, а в позиции с конца — нет (это противоречит определению -й с конца работы). Такая ситуация означает, что ребро оказалось насышено потоком, а ребро — не насыщено. Но стоимость ребра меньше стоимости ребра , поэтому можем переместить поток с ребра на ребро , не нарушив свойства потока и улучшив целевую функцию, что противоречит оптимальности ответа для mincost-maxflow. Следовательно, такой позиции не возникнет и расписание будет допустимым.
O | p_ij=1 | Sum(w_i C_i)
Докажем, что оптимальный ответ для
равен оптимальному ответу к задаче , где прерывания позволено делать только в целые моменты времени.- Целевые функции задач совпадают, поэтому из оптимальности следует оптимальность .
- Покажем, как получить из расписания
- Построим двудольный граф, в левую долю которого поместим работы, а в правую — возможные моменты времени. Из вершины, соответствующей работе будет идти ребро в вершину, соответствующую временному моменту , если работа в расписании для претендует на выполнение в момент времени .
- Раскрасим ребра этого графа в цветов, из теории графов известно, что это можно сделать.
- Назначим выполнение единичного элемента работы в момент времени на машине , если соответствующее ребро раскрашено в цвет .
- После данного преобразования мы не изменим значение целевой функции (так как мы переставляем только элементы работ, выполняющихся в один и тот же момент времени). Также расписание станет допустимым для , так как по определению реберной раскраски, не будет ни одной работы, два единичных блока которых выполняется на одной машине и во все моменты времени не окажется того, что на одну машину назначено две работы.
допустимое расписание для (в расписании для допустимость нарушает то, что на одной машине выполняется несколько блоков одной работы):
Чтобы непосредственно решить эту задачу, воспользуемся теоремой о том, что для задачи [2]. Известно, что для того, чтобы получить оптимальное расписание для такой задачи без прерываний, надо помещать работы по очереди на машины в порядке убывания весов. Длительности у всех работ совпадают, поэтому расписание будет состоять из блоков по работ и, возможно, одного неполного блока из работ. Таким образом, аналогично задаче , чтобы получить допустимое расписание, можно не строить раскраску графа, а просто циклически сдвигать последовательности работ внутри каждого блока, что позволяет достичь асимптотики .
существует оптимальное расписание без прерыванийМетод сведения задачи к задаче на параллельных машинах также работает для некоторых других open-shop задач.
Построение расписания по нижней оценке
Этот метод обычно применим к задачам, в которых целевая функция —
. Построим какой-то набор нижних ограничений на произвольное расписание для задачи и возьмем из них максимальное. Затем построим произвольное допустимое расписание, достигающее этой оценки.С помощью этого метода решаются:
Примеры
P | pmtn | C_max
- В допустимом расписании выполнение всех работ не может завершиться раньше одной из них, поэтому .
- Если все станки работали время , на них могло выполниться не больше работы, то есть и .
- Тогда .
Построим расписание, подходящее под эту границу: будем по очереди заполнять машины работами в произвольном порядке, и если очередная работа не помещается на текущей машине полностью, перенесем ее выходящую за
часть на следующую машину. Благодаря первому ограничению никакая работа не будет выполняться одновременно на двух станках, а благодаря второму — не останется работы, которую мы не сможем выполнить.O | p_ij=1 | C_max
- В допустимом расписании на каждом станке надо обработать каждую работу, поэтому .
- В допустимом расписании каждую работу нужно обработать на всех станках, причем ее нельзя обрабатывать на двух станках одновременно, поэтому .
- Тогда
Оптимальное расписание получается циклическими сдвигами последовательности
и выглядит следующим образом:- Для :
0 1 2 ... n-1 n n+1 ... m-1 m M_1 1 2 3 ... n-1 n - ... - - M_2 - 1 2 ... n-2 n-1 n ... - - . ... ... ... ... ... ... ... ... ... ... M_m-1 - - - ... ... ... ... ... n - M_m - - - ... ... ... ... ... n-1 n
- Для :
0 1 2 ... k k+1 ... n-1 n M_1 1 2 3 ... k k+1 ... n-1 n M_2 n 1 2 ... k-1 k ... n-2 n-1 . ... ... ... ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... M_m n-m+2 n-m+3 ... ... ... ... ... n-m n-m+1
Бинарный поиск по ответу
Этот способ часто подходит для задач, в которых надо минимизировать
. Важно помнить, что если требуется полиномиальное по решение, оно не должно зависеть от логарифма ответа, но иногда ответ ограничен полиномом от (в частности, в ), и мы можем применить этот метод.Примеры
O | p_ij = 1| Sum(U_i)
Перенумеруем работы по возрастанию их дедлайнов, то есть
.Утверждение: |
Если мы можем выполнить каких-то работ, мы можем выполнить последних работ. |
Действительно, если в допустимом расписании все периоды выполнения | работы заменить на периоды выполнения работы , оно останется допустимым, так как .
Таким образом, будем брать последние [3]). Получили решение за , где — время решения задачи .
работ и пытаться составить из них допустимое расписание (для этого известен полиномиальный алгоритм