Приближенные схемы Задачи теории расписаний

реклама
Приближенные схемы
Задачи теории расписаний
Полиномиальная приближенная
схема (PTAS)
Семейство приближенных алгоритмов для
задачи Π, {Aε}ε называется
полиномиальной приближенной схемой,
если алгоритм Aε ― (1+ε)-приближенный
алгоритм и время его работы ограничено
полиномом от размера входа при
фиксированном ε.
Вполне полиномиальная
приближенная схема (FPTAS)
Семейство приближенных алгоритмов для
задачи Π, {Aε}ε называется вполне
полиномиальной приближенной схемой,
если алгоритм Aε ― (1+ε)-приближенный
алгоритм и время его работы ограничено
полиномом от размера входа и 1/ε.
Как построить PTAS
Пример I
Алгоритм A
Решение A(I)
• Упрощение примера I.
• Разбиение пространства решений.
• Структурирование работы алгоритма A.
Упрощение примера I.
Первая идея превратить трудный пример в более простой в котором
легче найти оптимальное решение. Затем мы используем оптимальное
решение простого примера для получения приближенного решения
для трудного примера.
App
OPT
Вернуться
OPT #
Решить
I
Упростить
I#
P2||Cmax
•
•
•
•
J={1,..., n} – работы.
{M1, M2} – одинаковые машины.
j : pj > 0 (i=1,…, n).
Каждая работа должна быть выполнена на одной
из двух машин.
• Минимизировать длину расписания (Cmax).
• Прерывания запрещены.
• Каждая машина обслуживает не более одной
работы одновременно.
Нижняя оценка
n
psum   p j
j 1
C
*
max
pmax  max
n
j 1
 psum

 L  max 
, pmax 
 2

pj
Как упростить пример? ( I I# )
• Big = { j  J| pj ≥ εL}
– Новый пример I# содержит все большие работы
из I.
• Small = { j  J| pj < εL}
– Пусть X= ΣjSmall pj .
– Новый пример I# содержит  X/εL  работ
длины εL.
• Маленькие работы, как бы склеиваются вместе и
разрезаются на маленькие одинаковые кусочки.
Оценка на оптимум
• Лемма 5.1
OPT(I#)  (1+ ε)OPT(I).
Доказательство
• Xi – размер всех маленьких работ, выполняемых
на машине Mi в оптимальном расписании для I.
• Оставим все большие работы на тех машинах, где
они были в оптимальном расписании.
• Заменим все маленькие работы на машине Mi
на Xi /εL работ длины εL.
• X1 /εL + X2 /εL   X1 /εL + X2 /εL  =  X/εL 
• Xi /εLεL – Xi  (Xi /εL + 1) εL – Xi  εL
• OPT(I#)  OPT + εL  (1+ ε)OPT(I)
Как решить упрощенный пример?
•
•
•
•
•
•
•
Как много работ в I#?
pj ≥ εL для всех работ в I#.
Общая длина всех работ в I#  psum  2L.
Число работ в I#  2L/εL= 2/ε.
Число работ в I# не зависит от n!
Найдем все возможные расписания.
Число различных расписаний  22/ε !
Как вернуться к исходной задаче?
•
•
•
•
•
Пусть σ# – оптимальное расписание для I#.
Li# – нагрузка машины Mi в σ#.
Bi# – общая длина больших работ на Mi в σ#.
Xi#– размер всех маленьких работ на Mi в σ#.
Li# = Bi# + Xi#.
X

X  X  L    X  L
L 
#
1
#
2
Процедура ( σ#(I#) σ(I) )
• Большие работы выполняются на той же машине,
что и в σ#.
• Выделим интервал длины X1# + 2εL на машине M1
и X2# на машине M2.
• Будем последовательно упаковывать маленькие
работы в выделенный интервал на M1, пока не
встретим работу, которая туда не поместится.
• Оставшиеся маленькие работы упакуем в
выделенный интервал на M2.
Оценка качества
 psum

OPT  L  max 
, pmax 
 2

L  OPT
#
i
#
 1   OPT
L 5.1
Li  B  X  2L   L  2L 
#
i
#
i
#
i
 1   OPT  2OPT  1  3 OPT
Алгоритм PTAS-1
Input ( J={1,..., n}, p: J → Z+)
1) Определим Big = { j  J| pj ≥ εL} и
Small = { j  J| pj < εL}
2) Заменим все маленькие работы на машине Mi
на X /εL работ длины εL.
3) Найдем оптимальное расписание σ# в новом примере I#,
перебрав все допустимые назначения работ по машинам.
4) По расписанию σ# построим допустимое расписание σ
исходной задачи, используя описанную выше
процедуру ( σ#(I#) σ(I) ).
Output (σ )
Точность алгоритма PTAS-1
• Теорема 5.2
Алгоритма PTAS-1 – (1+ε)-приближенный
алгоритм для задачи P2||Cmax.
Разбиение пространства решений
Вторая идея разбить пространство решений на несколько меньших
областей, в которых проще найти хорошее приближенное решение.
Решив задачу отдельно для каждой маленькой области и взяв среди них
лучшее есть шанс получить хорошее приближенное решение.
*
*
*
*
○*
*
*
*
*
*
*
Общая схема
1. Разбиение на области.
2. Выбор «хорошего» представителя в
каждой области.
3. Выбор из множества хороших
представителей наилучшего.
P2||Cmax
•
•
•
•
J={1,..., n} – работы.
{M1, M2} – одинаковые машины.
j : pj > 0 (i=1,…, n).
Каждая работа должна быть выполнена на одной
из двух машин.
• Минимизировать длину расписания (Cmax).
• Прерывания запрещены.
• Каждая машина обслуживает не более одной
работы одновременно.
Как разбить на области
•
•
•
•
•
Big = { j  J| pj ≥ εL}
Small = { j  J| pj < εL}
Φ – множество допустимых расписаний
Расписание σΦ – назначение работ на машины.
Определим области Φ(1), Φ(2),…согласно
назначению больших работ: σ1 и σ2 лежат в одной
области тогда и только тогда, когда каждая
большая работа выполняется в σ1 на той же
машине, что и в σ2.
Сколько получилось областей?
• Число больших работ  2L/εL= 2/ε.
• Число способов разместить большие
работы по двум машинам  22/ε.
• Число различных областей  22/ε !
• Число различных областей зависит от ε
и не зависит от размера входа!
Как выбрать «хорошего»
представителя?
•
•
•
•
•
•
Назначение больших работ зафиксировано в Φ(l).
OPT(l) – длина оптимального расписания в Φ(l).
Bi(l) – общая длина больших работ на Mi.
T := max{Bi(1), Bi(2)}  OPT(l)
Пусть Bi(l) начальная загрузка машины Mi.
Назначим маленькие работы одну за другой по
следующему правилу: каждый раз работа назначается на
машину с меньшей нагрузкой на этот момент.
• Полученное расписание σ(l) длины A(l) выберем
представителем от Φ(l).
А хорош ли представитель?
1. Если A(l) =T, то A(l) = OPT(l).
2. Пусть A(l) >T.
•
•
•
•
Рассмотрим машину с большей загрузкой в σ(l).
Последняя назначенная на нее работа маленькая и ее
длина меньше εL.
В момент назначения этой работы загрузка этой
машины не превышала psum / 2.
A(l)  (psum / 2) + εL  (1 + ε)OPT  (1 + ε)OPT(l)
Алгоритм PTAS-2
Input ( J={1,..., n}, p: J → Z+)
1) Определим Big = { j  J| pj ≥ εL} и
Small = { j  J| pj < εL}
2) Определим области Φ(1), Φ(2),…, Φ(h) согласно
назначению больших работ по машинам.
3) Сформируем задачи I(1), I(2),…, I(h) , в которых
назначение больших работ по машинам фиксировано
и задано на входе.
4) Решим каждую из задач I(k) , k = 1,…,h, назначая
маленькие работы одну за другой на машину с
меньшей нагрузкой на текущий момент.
5) Пусть σ* - лучшее из полученных расписаний на шаге 4.
Output (σ* )
Точность алгоритма PTAS-2
• Теорема 5.3
Алгоритма PTAS-2 – (1+ε)-приближенный
алгоритм для задачи P2||Cmax.
Структурирование работы алгоритма
• Основная идея рассмотреть точный, но
медленный алгоритм.
• Если алгоритм получает и перерабатывает
огромное количество различных значений,
то мы можем отбросить часть из них и
ускорить работу алгоритма.
P2||Cmax
•
•
•
•
J={1,..., n} – работы.
{M1, M2} – одинаковые машины.
j : pj > 0 (i=1,…, n).
Каждая работа должна быть выполнена на одной
из двух машин.
• Минимизировать длину расписания (Cmax).
• Прерывания запрещены.
• Каждая машина обслуживает не более одной
работы одновременно.
Краткая запись решения
• Обозначим через σk допустимое расписание
k первых работ {1,..., k}.
• Закодируем расписание σk с нагрузками
машин L1 и L2 двумерным вектором [L1, L2].
• Пусть Vk обозначает множество векторов,
соответствующих допустимым
расписаниям k первых работ {1,..., k}.
Алгоритм «Динамическое
программирование»
Input ( J={1,..., n}, p: J → Z+)
1) Положим V0={[0,0]}, i=0.
2) While i  n do:
для каждого вектора [x,y] Vi добавить
вектора [x + pi ,y] и [x,y + pi ] в Vi+1;
i:= i +1;
Найти [x*,y*] Vn , который минимизирует
величину max [x,y]Vn{x,y}
Output ([x*,y*])
3)
Трудоемкость алгоритма
• Координаты всех векторов целые числа от 0 до psum.
• Число различных векторов в Vi ограничено (psum)2.
• Общее количество векторов, вычисляемых
алгоритмом не превосходит n(psum)2.
• Трудоемкость алгоритма O(n(psum)2).
• Размер входа |I| ограничен O(log(psum))=O(ln(psum))
или O(n log pmax).
• Трудоемкость алгоритма не ограничена полиномом
от размера входа!
Как упростить множество векторов?
• Все вектора соответствуют точкам плоскости в
квадрате [0, psum]×[0, psum].
• Разделим этот квадрат вертикальными и
горизонтальными линиями на клетки
(квадратики).
• В обоих направлениях линии имеют координаты
Δi, где Δ = 1+ (ε/2n), i = 1, 2, …, K.
• K = logΔ(psum)= ln(psum)/ln Δ= ((1+2n )/ε) ln(psum)
Отсев векторов
• Пусть два вектора [x1,y1] и [x2,y2] попали в
одну клетку.
• x1/Δ  x2  x1Δ и y1/Δ  y2  y1Δ .
• Из каждой клетки, имеющей непустое
пересечение с Vi , выберем один вектор и
добавим его в «урезанное» множество
векторов Vi#.
Алгоритм FPTAS
Input ( J={1,..., n}, p: J → Z+)
1) Положим V0#={[0,0]}, i=0.
2) While i  n do:
для каждого вектора [x,y] Vi# добавить
вектора [x + pi ,y] и [x,y + pi ] в Vi+1;
i:= i +1;
Преобразовать Vi в Vi#.
3) Найти [x*,y*]Vn# , который минимизирует
величину max [x,y]Vn#{x,y}
Output ([x*,y*])
Трудоемкость алгоритма FPTAS
• Множество векторов в Vi# содержит не
более одного вектора из каждой клетки.
• Всего клеток K2.
• Трудоемкость алгоритма FPTAS O(nK2).
2
2
• nK = n((1+2n )/ε) ln(psum)
• Алгоритм FPTAS – полиномиален от
размера входа и 1/ε.
Оценка на вектора в Vi и Vi#
• Лемма 5.4
Для каждого вектора [x,y] Vi существует
вектор [x#,y#] Vi# , такой что x#  Δix и y#  Δiy.
Точность алгоритма FPTAS
• Теорема 5.5
Алгоритма FPTAS – (1+ε)-приближенный
алгоритм для задачи P2||Cmax.
Доказательство
max x # , y #   max n x, n y  n max x, y  nOPT
L 5.4
n
1  z   1  2 z  0  z  1


 n

nOPT  1   OPT  1   OPT
 2n 
n
Скачать