Линейное программирование Задача теории расписаний

advertisement
Линейное программирование
Задача теории расписаний
Задача линейного программирования
(ЛП)
z  x   c1 x1    cn xn  min
a11 x1    a1n xn  b1

am1 x1    amn xn  bm
xi  0 for i  1,  , n.
Крайние точки
n
c x
j 1
j
j
 min
n
s.t.
a x
 bi ,
i  1, , m
• x ={x1,…,xn
j 1
• Множество S всех векторов x.
x j  0,
j  1, , n
удовлетворяющих ограничениям
задачи ЛП, называется допустимым множеством,
а любое x  S − допустимым решением или допустимой
точкой.
• Если x1, x2  S, то  x1 + (1−) x2  S, 0 ≤  ≤ 1.
• Точка x  S называется крайней точкой выпуклого
множества, если не существует двух отличных от x
точек y, z  S таких, что x = y + (1−)z для
некоторого 0 ≤  ≤ 1.
}Rn
ij
j
Свойства крайних точек
• Если задача ЛП в стандартной форме
имеет оптимальное решение, то существует
оптимальное решение, которое является
крайней точкой.
• Алгоритм эллипсоидов и симплекс метод
находят решения ЛП, которые являются
крайними точками.
Почему ЛП полезно для построения
приближенных алгоритмов?
• Многие комбинаторные задачи могут
быть сформулированы, как задачи ЦЛП.
• ЛП является естественной нижней
границей.
Основные методы
• Округление
– Решить задачу линейного программирования
– Преобразовать полученное дробное решение в
целочисленное
• Прямо-двойственная схема
– Итеративно вычисляются целочисленное
решение прямой задачи и дробное двойственной
– Качество алгоритма оценивается сравнением
этих двух решений
Разрыв двойственности
• Рассмотрим ЛП-релаксацию некоторой
задачи минимизации Π, пусть OPTf (I) –
стоимость оптимального дробного решения
примера I.
• Разрывом двойственности называется
следующая величина.
sup
I
OPT  I 
OPT f  I 
R| |Cmax
•
•
•
•
J={1,..., n} – работы.
M={M1,..., Mm} – параллельные машины.
( j, Mi): pij ≥ 0 (j = 1,…, n; i = 1,…, m).
Каждая работа должна быть выполнена на
одной из m машин.
• Прерывания запрещены.
• Каждая машина обслуживает не более
одной работы одновременно.
ЦЛП (R| |Cmax)
minimize
s.t.
Cmax
x
 1,
x
pij  Cmax , i  1,  , m,
iM
jJ
ij
ij
xij  0, 1
j  1,  , n,
i  1,  , m, j  1,  , n
Замечание
ЦЛП (R| |Cmax) имеет неограниченный
разрыв двойственности.
• Пример: J1 : pi1 = m (i=1,…, m).
• Cmax (ЦЛП) = m.
• Cmax (ЛП) = 1.
ЛП (R| |Cmax)
• Почему ЛП так сильно выигрывает у ЦЛП?
• ЦЛП автоматически полагает xij=0, если pij > t, а
ЛП распределяет по 1/m работе на каждую из
машин.
• i = 1,…,m, j=1,…,n: если pij > t, то xij=0.
• Это нелинейное ограничение!
Бинарный поиск
• TZ+: ST ={(i, j)| pij ≤ T}.
ЛП(T ) :
x

 
i: i , j S t
ij
x

 
j: i , j S t
ij
xij  0
 1,
j  1,  , n
pij  T ,
i  1,  , m
i, j   ST
Свойства решений ЛП(T)
• Лемма 9.1
Любое экстремальное решение ЛП(T) имеет
не более n + m ненулевых переменных.
Доказательство леммы 9.1
• Пусть r = |ST| число переменных в ЛП(T).
• Допустимое решение является экстремальным 
r линейно независимых ограничений обращаются
в равенство.
• По крайней мере r – (n + m) из них будут
выбраны из третьего множества ограничений.
• По крайней мере r – (n + m) соответствующих
переменных равны 0.
• Любое экстремальное решение ЛП(T) имеет не
более n + m ненулевых переменных.
Определение
• Пусть x ― экстремальное решение ЛП(T).
Будем называть работу в решении x целой,
если она назначена ровно на одну машину.
В противном случае, будем называть
работу дробной.
Свойства решений ЛП(T)
• Следствие 9.2
В любом экстремальном решении ЛП(T)
по крайней мере n – m целых работ.
Доказательство следствия
• Пусть
– x ― экстремальная точка
– α ― число целых работ
– β ― число дробных работ
• α+β=n
• Каждая дробная работа дает не менее двух
ненулевых входов в x.
• α + 2β ≤ n + m.
• β ≤ m и α ≥ n – m.
Представление экстремального
решения двудольным графом
G  J  M , E , E  (i, j ) | xij  0.
Машины и Работы
F  J, F – множество дробных работ
H  F  M , E , E  (i, j ) | 0  xij  1.
Машины и Работы
Паросочетание
Паросочетание в H назовем совершенным,
если оно покрывает каждую работу JiF.
Границы бинарного поиска.
Назначим каждую работу на ту машину, на
которой она имеет наименьшее время
выполнения. Пусть α длина полученного
расписания.
α/m ≤ Cmax(σ*) ≤ α
Алгоритм LST (Lenstra, Shmoys,
Tardosh 1990)
Input ( J={1,..., n}, M={M1,..., Mm}, p: J×M → Q+)
1.
2.
3.
4.
5.
Используя бинарный поиск в интервале [α/m,α] найти
наименьшее значение TZ+, для которого ЛП(T) имеет
допустимое решение. Обозначим его T*.
Найти x любое экстремальное решение ЛП(T*) .
Назначить все целые работы на те же машины, что и в x.
Построить граф H и найти совершенное паросочетание в
нем.
Назначить дробные работы на машины согласно этому
паросочетанию. Обозначим полученное расписание σ.
Output (σ)
Псевдолес
• Связный граф на множестве вершин V называется
псевдодеревом, если он имеет не более | V | ребер.
• Граф называется псевдолесом, если каждая его
связная компонента псевдодерево.
Лемма 9.3
Граф G ― псевдолес.
Доказательство леммы 9.3
• Рассмотрим связную компоненту GC .
• Ограничим ЛП(T) и x работами и машинами из
GC , обозначим полученное ЛПC(T) и xC .
• Тогда xC тоже экстремальная точка.
• Лемма 7.1  число ребер не больше чем nC + mC
 GC ― псевдодерево.
Совершенное паросочетание
• Лемма 9.4
Граф H имеет совершенное
паросочетание.
Доказательство леммы 9.4
• Удаляя из G все вершины, соответствующие целым работам,
и инцидентные им ребра, получим H.
• Так как удалено одинаковое количество вершин и ребер H ― псевдолес.
• Все листья (если есть) в H соответствуют машинам.
• Выберем произвольный лист (машину), и добавим инцидентное ему
ребро в паросочетание. Удалим обе вершины (машину и работу) этого
ребра из Н.
• Повторим эту процедуру, пока не получим либо набор четных циклов
либо пустой граф.
• В каждом цикле добавим набор чередующихся ребер в паросочетание.
• В результате получим совершенное паросочетание, покрывающее все
работы.
Алгоритм LST
• Теорема 9.5
Алгоритм LST является 2-приближенным
алгоритмом для R| |Cmax .
Алгоритм LST (Lenstra, Shmoys,
Tardosh 1990)
Input ( J={1,..., n}, M={M1,..., Mm}, p: J×M → Q+)
1.
2.
3.
4.
5.
Используя бинарный поиск в интервале [α/m,α] найти
наименьшее значение TZ+, для которого ЛП(T) имеет
допустимое решение. Обозначим его T*.
Найти x любое экстремальное решение ЛП(T*) .
Назначить все целые работы на те же машины, что и в x.
Построить граф H и найти совершенное паросочетание в
нем.
Назначить дробные работы на машины согласно этому
паросочетанию. Обозначим полученное расписание σ.
Output (σ)
Доказательство теоремы 9.5
• Из шага 1 алгоритма имеем, что T* ≤ OPT.
• Длина расписания на множестве целых работ
не превосходит T* .
• При распределении работ согласно совершенному
паросочетанию на каждую машину добавляется
не больше одной дробной работы.
• Так как pij ≤ T* , то общая длина полученного
расписания не больше 2T* ≤ 2OPT.
Точность
•
•
•
•
J1,..., Jn – работы, n = m2 – m +1.
M1,..., Mm – параллельные машины.
J1 : pi1 = m (i=1,…, m).
(Jj , Mi): pij = 1 (j=2,…, n; i=1,…, m).
Пример
M1
J1
M2
J2
J5
J8
M3
J3
J6
J9 J12
M4
J4
J7 J10 J13
J11
M1
J1
J2
J3
J4
M2
J1
J5
J8
J11
M3
J1
J6
J9 J12
J1
J7 J10 J13
M4
C
*
max
m
M2
M1
C
J1
M3
M4
ЛП
max
 2m  1
Практика
• Можно ли улучшить оценку точности алгоритма
Ленстра-Шмойс-Тардош для задачи, в которой
все машины являются идентичными?
• Доказать, что точка xC , выбранная в
доказательстве леммы 9.3, является
экстремальной точкой в ЛПC(T).
• Доказать, что дробное решение в примере,
доказывающем достижимость оценки алгоритма
Ленстра-Шмойс-Тардош является экстремальной
точкой.
Download