Opij1sumwu

Материал из Викиконспекты
Перейти к: навигация, поиск

Opi,j=1wiUi

Задача:
Дано m одинаковых станков, которые работают параллельно, и n работ, которые необходимо выполнить в произвольном порядке на всех станках. Любая работа на любом станке выполняется за единицу времени. Для каждой работы есть время окончания di — время, до которого она должна быть выполнена. Требуется минимизировать wiUi, то есть суммарный вес всех просроченных работ.

Описание алгоритма

Для решения этой задачи, мы должны найти множество S, что iSwiUi минимальна. Будем решать эту задачу с помощью динамического программирования с использованием утверждений из решении задачи Opi,j=1,di.

Рассмотрим работы в порядке не убывания дедлайнов: d1d2dn. Пусть мы нашли решение для работ 1,2,,i1. Очевидно, что S{1,i1}.

Пусть hS — вектор соответствующий множеству S из задачи Opi,j=1,di. Тогда, для добавления работы i в множество S должно выполняться неравенство: m(dim)(kmmj=1hS(dim+j))+x(di)m, где k=|S| и x(di) — номер периода времени t, чтобы dim+1tdi и hS(t)<m. Чтобы проверить это неравенство, нам нужно m чисел hS(t),t=dim+1,,di.

Определим переменные:

kj={hS(dim+j)j{1,,m}0j{1,,m}

lj={1j{1,,m};kj<m0otherwise.

Тогда можно заметить, что x(di)=mj=1lj.

Упростим исходное неравенство: m(dim)(kmmj=1kj)+mj=1ljm или m(dimk)+mj=1(kj+lj)m.

Для динамического программирования определим fi(k,k1,km) для минимизации nj=iwjUj, где k=|S|,S{1,,i1} и kj=hS(dim+j) где j=1,,m.

Пусть p=di+1di, тогда определим рекуррентное выражение для fi(k,k1,km):

f(k,k1,km)={fi+1(k,k1+p,k2+p,,km+p)+wi,m(dimk)+mj=1(kj+lj)<mmin

и начальное условие: f_{n+1}(k,k_1,\ldots ,k_m)=0 для k,k_1,\ldots ,k_m = 0,1,\ldots ,m.

Доказательство корректности

Время работы

См. также

Источники информации

  • Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. — c. 168 - 171. ISBN 978-3-540-69515-8