Алгоритм ветвей и границ для задачи составления расписания на параллельных процессорах

ВЕСТНИК САНКТ-ПЕТЕРБУРГСКОГО УНИВЕРСИТЕТА

Сер. 10. 2009. Вып. 1

УДК 519.8

Н. С. Григорьева

АЛГОРИТМ ВЕТВЕЙ И ГРАНИЦ ДЛЯ ЗАДАЧИ СОСТАВЛЕНИЯ РАСПИСАНИЯ НА ПАРАЛЛЕЛЬНЫХ ПРОЦЕССОРАХ

Введение. Целью данной статьи является описание метода ветвей и границ для задачи составления расписания минимальной длины для параллельных процессоров. Эта задача относится к задачам составления расписаний [1, 2], имеет многочисленные приложения и является ЖР-трудной [3]. Метод ветвей и границ позволяет получать точное решение или, при ограничении на время работы алгоритма, достаточно хорошие приближенные решения задачи. Предлагаются новый метод оценки частичного решения, который может применяться с любым генератором допустимых расписаний, и ряд новых способов сокращения перебора.

Выбор продолжения частичного решения играет важную роль в методе ветвей и границ, от него зависит, как быстро будет построено достаточно хорошее приближенное решение, что позволит сократить перебор. Большинство приближенных алгоритмов построения расписаний относится к так называемым списочным алгоритмам. В них предполагается, что процессор не простаивает, если есть готовое к выполнению задание. Известно, что оптимальное расписание для задачи с частичным порядком может содержать простои при наличии готовых к выполнению заданий. В настоящее время проявляется интерес к расписаниям с простоями. В [4] содержится обзор методов составления расписаний с простоями, но для рассматриваемой задачи такой подход ранее не применялся. В [5, 6] был предложен и исследован приближенный метод построения расписания для данной задачи, который был основан на идее включения в расписание невынужденных простоев.

В настоящей статье предлагается генератор допустимых расписаний, который позволяет включать в расписание невынужденные простои. Приводятся результаты вычислительного эксперимента, в котором исследуются возможности этого варианта метода ветвей и границ, а также сравниваются два варианта метода.

Рассмотрим систему заданий U = {ui,u2,...,un}, на которых задано отношение частичного порядка -<, выражение ui -< Uj означает, что выполнение задания Uj может быть начато только после завершения задания ui. Будем считать, что отношение частичного порядка задано в виде графа G = (U, E), в котором есть дуга e = (ui,uj) G E тогда и только тогда, когда ui -< Uj. Задано время выполнения каждого задания t(ui), которое будем считать целым.

Для выполнения заданий имеется m идентичных процессоров, любое задание может выполняться на любом процессоре, и каждый процессор выполняет не более одного задания в каждый момент времени. Прерывания выполнения заданий не допускаются.

Григорьева Наталья Сергеевна — доцент кафедры исследования операций математико-механического факультета Санкт-Петербургского государственного университета. Количество опубликованных работ: 42. Научные направления: дискретная оптимизация, теория расписаний. E-mail: gns@interzet.ru.

© Н. С. Григорьева, 2009

Требуется составить расписание S выполнения заданий процессорами так, чтобы общее время выполнения всех заданий было минимальным.

Построить расписание - значит найти для каждого задания ui время начала выполнения задания т(ui) и номер процессора num(ui), на котором оно выполняется. Назовем длиной расписания S величину

Ts = max{т(ui) + t(ui)\ui G U}.

Требуется построить расписание S минимальной длины Ts .

Алгоритм построения оптимального расписания. Для решения поставленной задачи применим метод ветвей и границ совместно с бинарным поиском. Пусть Topt -длина оптимального расписания. Определим интервал (a, b] такой, что a < Topt ^ b.

Будем называть длиной пути в графе сумму времен выполнения заданий, входящих в этот путь. Путь максимальной длины в графе G называется критическим, пусть tcp - длина критического пути.

Нижняя оценка значения целевой функции в данной задаче

П

Tmin = max{tcp, t(u)/m\ — 1}.

i=1

Поэтому положим a = Tmin — 1.

В качестве верхней оценки возьмем b = ^П=1 t(ui). Тогда Topt G (a, b].

Выберем z = \(a+b)/2\ и будем методом ветвей и границ решать задачу составления допустимого расписания длиной не более z. Если будет найдено допустимое расписание, то возьмем интервал (a, z]; если будет доказано, что такого допустимого расписания не существует, то выберем интервал (z, b] и повторим процесс.

Алгоритм построения расписания SCHEDULE(U; Sopt,Topt):

1. Определим a и b.

2. Пока b — a > е, выполняем:

а) положим z := \(a + b)/2\;

б) выполним процедуру BB(U,z; S,Ts);

в) если расписание S построено, то Srec := S; Trec := Ts и b := Ts, иначе a := z.

3. Sopt := Srec, и Topt := Trec.

В результате получаем расписание S минимальной длины, при этом е выбирается таким образом, чтобы на интервале (a, b] существовало только одно возможное значение длины расписания z. Для целых величин выполнения заданий всегда достаточно е = 1. Выбирая другие значения е, можно получать приближенные решения задачи с требуемой точностью.

Процедура BB(U, z; S, Ts) строит допустимое расписание методом ветвей и границ. Недопустимые частичные решения будут отбраковываться с помощью времен наступления событий. Для каждого задания u определим раннее время начала выполнения задания vmin(u), которое численно равно длине максимального пути в графе G от начальной вершины до задания u. Ранние начала не зависят от заданной длины расписания, но по ходу составления расписания будут увеличиваться, так как назначение заданий на процессоры будут создавать новые отношения порядка на множестве заданий U. Позднее начало задания vmax(u) численно равно разности длины требуемого расписания z и длины максимального пути от задания u, включая длину самого задания, до конечной вершины. Поздние начала заданий зависят от z, но не меняются по протяжении построения расписания. Если какое-то задание u не удается начать

не позднее 'отах(и), то дальнейшее построение расписания прекращается, так как уже не удастся уложиться в заданную длину г.

Прежде всего необходимо получить как можно более точный интервал для поиска г. Верхняя граница Ь берется слишком большой, но при первом решении задачи методом ветвей и границ при большом г метод будет работать без возвратов, построит расписание с достаточно хорошей длиной Тя. Это позволит сразу существенно уменьшить интервал (а, Ь]. Метод ветвей и границ без возвратов представляет собой приближенный метод решения задачи, описанный в [5].

Для уточнения нижней оценки длины расписания будем использовать метод определения интервала концентрации [7]. Он позволяет проанализировать насыщенность графа О = (и,Е), который задает отношения частичного порядка. Выделив наиболее загруженные заданиями временные интервалы, можно соотнести их суммарную потребность в ресурсах с количеством имеющихся процессоров.

Метод ветвей и границ построения допустимого расписания ВВ(и, г; Б, Тя). Требуется построить допустимое расписание Б длиной Тя не более заданного значения 2 или установить невозможность построения расписания такой длины. Расписание будет построено, если для каждого задания щ из множества V будут установлены время начала выполнения т(щ) и номер процессора ииш(щ), выполняющего задание. При этом расписание Б будет допустимым, если выполнены следующие условия: 1) в каждый момент времени должно быть занято не более т процессоров; 2) каждый процессор выполняет не более одного задания в каждый момент времени; 3) прерывания выполнения заданий не допускаются; 4) каждое задание начинает выполняться только после завершения всех предшествующих и

Тя = тах{т(щ) +г(щ)\щ е V} <

Процесс построения расписания будет обладать такими свойствами: часть ограничений будет выполняться автоматически, а именно каждый процессор будет выполнять только одно задание в каждый момент времени, прерывания допускаться не будут и будет задействовано не более т процессоров.

При формальном описании метода ветвей и границ для задачи построения расписания необходимо дать определение частичного решения. Удобно представлять расписание как перестановку заданий.

По каждой перестановке заданий п = (щг, щ2,..., щп) можно построить расписание Бп следующим образом: определяется самое раннее время освобождения процессоров £тт, выбирается первый встретившийся процессор, который освободился в этот момент времени. Далее очередное задание назначается на этот процессор в самый ранний возможный момент времени, но не ранее £тт, тогда каждая перестановка будет однозначно определять расписание Бп.

Так как задания можно назначать на выполнение только в соответствии с частичным порядком в перестановке п = (щг ,щ2 ,...,щп), Ущ,щ, таких что г < ], должно быть выполнено либо щ -< и^, либо задания щ,и^ независимы. Ниже будет предложен ряд правил, по которым можно отсечь существенное количество перестановок.

Частичное решение а к, где к - число заданий, будем рассматривать как частичную перестановку ак = (щг ,щ2 ,...,щк), по которой однозначно определяется частичное расписание.

Определение 1. Решение 7п = (11,12,...,1п) будем называть расширением частичного решения ак = (д\, д2,..., дк), если 1\ = д\, 12 = д2,...,1к = дк

Определение 2. Частичное решение ак будем называть допустимым, если существует его расширение, которое является допустимым расписанием

Для частичного решения а к были определены задания щ, входящие в частичное решение, а для каждого такого задания - время начала его выполнения т(щ), номер процессора пьт^), на котором оно выполняется, и г(щ) - время простоя процессора перед началом выполнения задания щ. Оставшийся резерв простоев 1к = I — ^г=1 г(щ), где I = т  г — ^2П=11(щ). Так как известно время начала каждого задания из частичного решения, то известно и время освобождения процессоров Итвк [1 : т]. Обозначим ^тт(к) = т\п{Итвк[г]\г е 1 : т} - самое раннее время освобождения процессоров после выполнения всех заданий, включенных в частичное решение.

Для того чтобы расписание было допустимым, необходимо, чтобы для каждого задания щ е V время начала его выполнения т(щ) удовлетворяло неравенству

'Утт^г^ ^ тг ^ ^тах(щг).

Для описания метода ветвей и границ требуется определить множество заданий, которые следует проверить на добавление к частичному решению, правило, по которому будет выбираться очередное задание из этого множества, и правила, по которым будут отсеиваться недопустимые частичные решения.

Правило выбора задания. Правило выбора очередного задания для постановки на процессор играет большую роль в алгоритмах составления расписаний. Для списочных алгоритмов способ выбора влияет на качество полученного расписания. Списочными алгоритмами называются такие алгоритмы, в которых сначала все задания получают приоритеты, а затем, как только процессор освобождается, на него назначается невыполненное, но готовое задание с максимальным приоритетом. При этом готовым в данный момент времени называется задание, все предшественники которого закончены к этому моменту.

Основная особенность списочных расписаний - отсутствие простоев, если есть готовое задание. Известно, что гарантированная точность таких алгоритмов Т^/Тор1 ^ 2 — 1/т для любого списка приоритетов [8], но оптимальное расписание может быть не списочным. В [5] предложен алгоритм приближенного решения задачи, который не является списочным. В методе ветвей и границ будем использовать аналогичный способ выбора очередного задания, при котором процессор может простаивать при наличии готовых к выполнению заданий.

На каждом уровне перебора к будем выделять множество заданий ик, которые назовем возможными. Это те задания, которые требуется добавлять к частичному решению ак-1 так, чтобы проверить все возможные продолжения частичного решения. Множество ик должно обладать таким свойством: чтобы частичное решение ак-1 и щ где щ е ик, было допустимым. Сформулируем необходимые условия, которым должны удовлетворять возможные задания.

Определение 3. Задание щ е ак будем называть готовым на уровне перебора к, если все его предшественники включены в частичное решение ак-1

Такое определение готового задания отличается от обычного. Изменение определения готового задания требуется для того, чтобы перебрать все возможные варианты составления расписаний, включая те, в которых процессор простаивает при наличии готовых заданий. Такие простои будем называть невынужденными.

Не каждое готовое задание имеет смысл добавлять к частичному решению, возможно, что простой процессора перед этим заданием будет слишком велик. Длина требуемого расписания фиксирована, следовательно, определено I - общее время простоя

процессоров, которое может быть в расписании при заданной длине. Следующая лемма определяет те задания, которые не требуют слишком большого простоя.

Лемма 1. Пусть задано частичное решение ak, для него известен Ik - резерв простоев процессоров при выполнении заданий, тогда для любого готового задания u, такого, что vmin(u) — tmin(k) > Ik, частичное решение ak U u недопустимо.

Определение 4. Задание u называется возможным заданием на уровне k, если оно готово на данном уровне и выполнено

vmin(u) tmin(k) ^ Ik .

На каждом шаге метода ветвей и границ будем определять множество возможных заданий Uk, которые требуется добавлять к частичному решению o~k-1.

Используем односторонний обход дерева вариантов и, для того чтобы правильно осуществлять обход, будем помнить Rk - множество заданий, запрещенных на уровне перебора k, т. е. тех заданий, которые были возможными, были проверены и привели к недопустимым частичным решениям.

Задания возможные и не запрещенные на уровне перебора k будем называть допустимыми заданиями на уровне k и их множество обозначим U*. Из данных определений следует, что Uk = Щи Rk.

Важным параметром метода ветвей и границ является способ выбора задания из множества допустимых. Предлагаем два способа выбора заданий из множества допустимых. В первом случае выбираем задание с минимальным ранним началом. Для этого сначала рассмотрим расписания, в которых не будет невынужденных простоев. Будем ссылаться на этот алгоритм как на алгоритм FIFO (first in first out).

Второй вариант: сначала выбираем задания с минимальным поздним началом, при этом самые критические задания будут назначаться в первую очередь. Такой вариант алгоритма будем называть ICP (idle critical path). Он может приводить к появлению простоев. Чтобы исключить нерациональное использование времени процессора, будем на время простоя подбирать другое задание, которое можно в это время выполнять. Потому выбор задания будет осуществляться в два этапа.

Процедура выбора задания Select(U*,tmin(k); u0). Из множества допустимых заданий U* выбирается задание uo с минимальным поздним началом. Если перед его выполнением возникает простой процессора, то пытаемся подобрать задание, которое можно выполнять в период простоя.

1. Выберем задание uo, для которого выполнено

vmax (u0) — min{vmax(ui), \ ui G Uk}.

2. Определим величину r0 = vmin(u0) — tmin(k) простоя процессора l0 перед выполнением задания u0.

3. Если Г0 > 0, то из множества допустимых заданий выберем такое задание u*, которое можно будет выполнить в период простоя процессора без увеличения времени начала задания u0, а именно

vmin(u ) + t(u ) ^ vmin(u0).

4. Если такое задание нашлось, то будем назначать на процессор задание u*, т. е. положим u0 := u*, в противном случае будем назначать задание u0.

Рассмотрим более подробно способы определения допустимости частичного решения, которые имеют большое значение для сокращения перебора.

Способы отсева недопустимых частичных решений. Основным способом сокращения перебора будет как можно более раннее определение недопустимости частичного решения. К сожалению, это удается сделать не всегда, и метод может долго развивать частичное решение, пока не удастся определить его недопустимость. Предлагаются следующие способы определения недопустимости частичного решения.

Для того чтобы построенное частичное решение было допустимо, необходимо добавлять к нему только допустимые задания и время начала каждого задания определять таким образом:

т (u) = Утт

тогда каждое задание будет назначаться лишь после завершения всех предшествующих.

Лемма 2. Частичное решение ак-1 недопустимо, если множество допустимых заданий VI пусто

Такая ситуация возникает в методе ветвей и границ, если все возможные задания проверены и запрещены.

Следующий способ определения недопустимого частичного решения связан с определением опоздавшего задания.

Определение 5. Задание щст е ак называется опоздавшим для ак, если vmax

Верно следующее утверждение.

Лемма 3. Если для частичного решения ак существует опоздавшее задание, то частичное решение ак недопустимо

Докажем некоторые свойства опоздавших заданий, которые помогут сформулировать правила по сокращению перебора.

Лемма 4. Опоздавшее задание щст для частичного решения ак является возможным заданием для ак-1 и выполнено гт-т(к — 1) ^ vmin(ucr).

Доказательство. Все предшественники щст включены в ак, так как если бы существовало задание щ, не включенное в частичное решение а к, такое, что щ -< щст, то опоздавшим было бы задание щ. Следовательно, если щст не готово для ак-1, то только, если оно ожидает задание Чк, которое поставлено в расписание на шаге к — 1 на процессор 10.

Предположим, что существует щк ~< щст . Тогда tmin(k — 1) ^ Утах(щк), так как задание Нк поставлено на процессор и не является опоздавшим. По определению

Ытек [10] тах{ут1п (uk), ^тт (к 1)} + ') .

Рассмотрим два случая:

Ытвк [1о] = Утт^к) +Ъ(щк) < Утах^к ) + ^к) < Утах (щст ),

Ит6к[1о] = Ътт(к ^ Утах(щк ) + ^^к ) ^ ^тах^ст) .

В обоих случаях щст не может быть опоздавшей. Следовательно, щст - готовое задание.

Так как все предшественники щст включены в частичное решение ак-1, то его раннее начало определяется следующим образом:

Ут1п(щст) = тах{т(щ) + -< щ^, щ е ак-1}.

Таким образом, существует процессор I такой, что Ут;п(щст) = Итвк-1[1], и гт-1п(к — 1) ^

Утт ^ст ).

Лемма доказана.

В следующей лемме формулируется условие, которое позволяет в случае обнаружения опоздавшего задания запретить сразу группу заданий.

Лемма 5. Пусть для частичного решения ак = ак-1 и щк нашлось опоздавшее задание щст, тогда для любого задания щ, такого что

шах{гт1п(к — ^ Ут1п(щ)} + г('и) >

^тах^ст ^

частичное решение ак-1 и щ недопустимо

Доказательство. Пусть на шаге к процессор 10 освободился раньше остальных и время его освобождения гт1п(к). Так как щст - опоздавшее задание, то vmax(ucт) < гт;п(к) и, следовательно, на любой другой процессор, отличный от 10, это задание заведомо нельзя поставить. После отмены последнего назначенного задания щк возвращаемся к частичному решению ак-1 с минимальным временем освобождения процессоров гт-1п(к — 1), которое достигается на процессоре 11. Любое задание щ добавленное к частичному решению ак-1, должно допускать назначение опоздавшей работы щст на тот же самый процессор 11 и, таким образом, должно быть выполнено

Шах{гт1п(к 1^ Ут1п(щ)} + г(щ) ^

^тах^ст).

В следующеей лемме рассматривается ситуация, когда два задания блокируют друг друга.

Лемма 6. Пусть для продолжения частичного решения выбирается задание с минимальным поздним началом и для частичного решения ак = ак-1 и щк нашлось опоздавшее задание щст. Пусть выполнены неравенства vmax(uk) < гт;п(к) и гт'1п(к — 1) + г(щст) > Утах(щк), тогда недопустимо частичное решение ак-1

Доказательство. Задание щст было готово на шаге к — 1. Пусть на шаге к процессор 10 освободился раньше всех. Рассмотрим два случая.

1. Задание щст не запрещено на уровне перебора к — 1. Оно было готово на уровне к — 1, и его можно было назначить на шаге к — 1; если этого не произошло, то верно vmax(uk) ^ vmax(ucт) и тогда задание щк тоже нельзя будет выполнять на процессоре 10. После отмены задания Нк будет назначено задание щст, которое закончится в момент времени гт[п(к — 1) + г(щсг), так как по лемме 4 простоя перед его началом не будет. В силу условий леммы 6, опоздавшим станет задание щк. Ситуация тем более усугубится, если назначить на шаге к — 1 какое-либо третье задание.

2. Задание щст запрещено на уровне перебора к — 1. Следовательно, оно уже стояло на процессоре и частичное решение оказалось недопустимым, если теперь добавить к частичному решению какое-то третье задание, то задания щк и щст установить не удастся. Лемма доказана.

Рассмотрим способ определения недопустимости частичного решения на основе сравнения потребности заданий в ресурсах и общей мощности процессоров. В [7] было предложено находить нижнюю оценку длины оптимального расписания, определяя интервал концентрации. Модифицируем алгоритм нахождения такого интервала для установления допустимости частичного расписания ак. По мере построения решения с увеличением к оценка будет работать все более эффективно.

Будем рассматривать интервалы времени [г1,г2] С [гт;п(к),^]. Для каждого интервала определим общую мощность процессоров, которые свободны в данном интервале:

т

МР(Ь1,Ь2) = ^^шах{0, (г2 — 1т&х{Ь1,Итек[1]})}.

1=1

Для каждого задания щ / ак вычислим минимальное возможное время начала выполнения задания: у(щ) = шах^^^^^т^к)}. Обозначим Ь([г1,г2]) длину интервала [^1,^2].

Пусть Мк (^1 ,^2) - суммарная минимальная потребность заданий в ресурсах на интервале [г1,г2], тогда

Мк(г1,г2) = ^2 шт{Ь(хк(щ)),Ь(у(щ))},

иъ'/.а'к

где

Хк (щ) = [у(щ),у(щ) +г(щ)] П [Ь1,Ь2],

у ) [Утах(щ ), Утах (щг ) + г П [Ъ 1 ,Ъ2],

Утах(щ) - позднее время начала выполнения задания щ.

Положим евг(ак) = шах[41142]е[4т.п(к)1г]{Мк(Ъ1,Ъ2) — МР(Ъ1,Ъ2)}. Тогда верно следующее утверждение.

Лемма 7. Если евЪ(ак) > 0, то частичное решение ак недопустимо

Для сокращения времени работы процедуры, вычисляющей оценку частичного решения, рассматривались только интервалы [гтт, г], где г меняется от гт;п + 1 до г.

Использование лемм 2-7 позволяет значительно сократить перебор в методе ветвей и границ.

Основные процедуры метода ветвей и границ и его формальное описание. На каждом шаге метода ветвей и границ будем проверять частичное решение на допустимость следующим образом: сначала устанавливаем наличие опоздавшего задания, затем вычисляем оценку частичного решения и сравниваем ее с нулем, далее проверяем непустоту множества допустимых заданий. Если проверка прошла успешно, работает блок выбора задания для продолжения частичного решения, затем делается шаг вперед. Если частичное решение недопустимо, то действия будут различны: если множество допустимых пусто, то переводим все запрещенные на этом шаге задания в множество разрешенных и делаем шаг назад. Если оценка больше нуля, то делаем шаг назад, в случае опоздавшего задания делаем специальный шаг назад, в котором при выполнении условий лемм 5 и 6 делаем еще один шаг назад и запрещаем группу заданий.

Опишем основные процедуры рассматриваемого алгоритма: шаг вперед, шаг назад, специальный шаг назад.

Шаг вперед Гогтаг<1(ак ,щ ак+1). Эта процедура осуществляет добавление к частичному решению а к нового задания щ и формирует новое частичное решение ак+1. Задание щ устанавливается на процессор 10, имеющий минимальное время освобождения гтт(к).

1. Определим г(щ) = шах{0, Утт^) — гт;п(к)} - простой процессора перед выполнением задания щ.

2. Пересчитаем общее время возможных простоев 1к+1 = 1к — г(щ).

3. Найдем время начала выполнения задания т(щ) = шах^^^к^гтщ^)}.

4. Фиксируем номер процессора num[u] = 10.

5. Определим новое время освобождения процессора 10 Итек[10] = т(щ) + г(щ).

6. Для каждого задания щ, которое является непосредственным потомком задания щ, проверим неравенство т(щ) + г(щ) > Ут\п(щ). Если оно выполнено, то пересчитаем

ранние начала заданий, которые являются потомками щ, начиная с задания щ, положив vmin(uj) = т(щ) + Ь(щ), предварительно запомнив массив Ут1п(и) и уровень перебора к.

7. Исключим щ из множества допустимых заданий и£, добавив его в частичное решение ак+1 = а к и щ.

8. к := к +1.

Шаг назад Васк(ак; ак-1 ,щ). С помощью этой процедуры восстанавливаем частичное решение ак-1.

1. Определим последнее назначенное задание щ.

2. Пересчитаем возможное время простоев 1к-1 = 1к + г(щ).

3. Определим номер процессора,который выполнял это задание: I = пщт(щ).

4. Найдем время освобождения процессора I: Ьгтек-1[1] = Ьгтек[I] — г(щ^) — г(щ).

5. Переведем задание щ в множество запрещенных на данном шаге Як = Як и щ.

6. Если на данном шаге к пересчитывались ранние начала Утп(11), то восстановим их прежние значения.

7. к := к — 1 .

Шаг назад при опоздавшем заданиии ВаскЬаЬе(ак ,щст; ак-1,щ).

1. Вызываем процедуру шаг назад Васк(ак; ак-1,щ).

2. Попробуем запретить сразу группу заданий, пусть vmax(ucт) - позднее начало опоздавшего задания. Запретим любое допустимое задание щ, для которого верно

шах{гтт(к — ^ ^тт^^ + г('и) >

^тах^ст).

3. Если выполнено ИтеЩ+Ь^т > Утах(щ4), то делаем еще шаг назад, т. е. вызываем процедуру Васк(ак-1; ак-2,щ).

Теперь можем описать алгоритм построения расписания формально.

Алгоритм построения допустимого расписания ЯШОВ :

к := 1; Ьгте[г] =0; г е 1 : т а0 = 0;

Пока (к > 0) и (к < п +1) выполнить

Начало цикла

1. Найдем процессор 10 с минимальным временем освобождения Ьтт(к).

2. Проверим для всех заданий щ е ак-1 выполнение условия Утах(щ) ^ Ьтт(к). Если нашлось задание, для которого неравенство не выполнено, то запомним его в щст и переходим к п. 10.

3. Вычислим оценку частичного решения; если езЬ(ак-1) > 0, то переходим к п. 9.

4. Определим множество допустимых заданий на данном уровне перебора . Если множество V£ пусто, то перейдем к п. 8.

5. Выберем задание щ0 процедурой выбора задания Бе^сЬ^£; щ).

6. Выполним процедуру Шаг вперед. Добавим задание ^ к частичному решению а к -1 процедурой Гогшат<С(а к -1 ,щ0; а к).

7. Перейдем к п. 1.

8. Аннулируем список заданий, запрещенных на к-м уровне перебора Я к := 0.

9. Выполним процедуру Шаг назад. Вызываем процедуру Васк(ак,; ак-1,щ). Переходим к п. 1.

10. При опоздавшеем задании щст вызываем процедуру ВаскЬаЬе^к^^; ак-1,щ). Переходим к п. 1.

Конец цикла.

Если к = 0, то допустимого расписания с длиной, не выше г, не существует. Если к = п, то получим допустимое расписание Б = ап, с длиной Тз, не превосходящей г.

Для различных процедур выбора заданий можно получать разные варианты метода ветвей и границ.

Приближенный алгоритм. Если метод ветвей и границ BBICP будет выполняться первый раз с большим значением z, то он выполнится без возвратов и будет построено приближенное расписание. Этот метод отличается от метода критического пути включением в расписание невынужденных простоев. В работе [6] доказано, что гарантированная оценка точности этого алгоритма такая же, как у любого списочного алгоритма Ts/Topt ^ 2 — 1/m, но качество получаемых решений разное для различных исходных данных. В ней приведены два примера. В одном из них FIFO строит самое плохое расписание, а алгоритм ICP - оптимальное. В другом ситуация обратная: алгоритм критического пути строит оптимальное расписание, а ICP - самое плохое. Из данных примеров видно, что эти алгоритмы лучше приспособлены для совершенно разных задач. Можно рекомендовать применять их для каждой конкретной задачи последовательно и выбирать лучшее решение, тогда качество построенных расписаний будет лучше, чем для каждого отдельного алгоритма. В вычислительных экспериментах мы будем сравнивать приближенные расписания, построенные этими алгоритмами.

Вычислительный эксперимент. Для того чтобы проверить работоспособность метода и эффективность оценок, был проведен вычислительный эксперимент. Программы, реализующие алгоритмы, были написаны на Паскале. В вычислительном эксперименте предполагалось проверить работоспособность алгоритма с простоями BBICP и сравнить его с алгоритмом BBFIFO. Также проверялась эффективность работы оценки частичного решения и способов отсева недопустимых частичных решений.

Граф заданий генерировался случайным образом, число работ менялось от 50 до 100, время выполнения заданий выбиралось случайно из диапазона [1:30]. Всего было просчитано 5 серий тестов по 100 задач в каждой серии.

Для метода ветвей и границ на построение допустимого решения при заданном z выделялось не более 60 с. Если допустимое расписание для данного z не было получено за 60 с, то считалось, что его не существует и значение z увеличивалось. Такой подход позволил построить расписание для всех тестовых задач, но при этом оставался открытым вопрос, какое получено решение - точное или приближенное? Поэтому качество решения оценивалось отклонением длины построенного расписания от нижней оценки длины расписания.

Результаты эксперимента сведены в табл. 1-4. В каждом тесте фиксировали EST -число частичных решений, отсеянных по условию леммы 7, LATE - число частичных решений, отброшенных при обнаружении опоздавшей работы, и DEL - число решений, отброшенных вместе с опоздавшей работой по условию леммы 6. Эксперимент показал высокую эффективность предложенных процедур. В табл. 1-3: серия - имя серии тестов, в каждой серии 100 тестов, M - число процессоров, ITER - число итераций.

Таблица 1. Средние показатели для правил отсева частичных решений

Серия M EST/ITER LATE/ITER DEL/ITER

si 3 0.2304 0.062 0.080

s2 4 0.2810 0.095 0.111

s3 5 0.1902 0.077 0.098

s4 5 0.2111 0.048 0.123

s5 5 0.2677 0.055 0.082

Среднее 0.2401 0.067 0.099

В табл. 2 приведены средние значения показателей по серии, в табл. 3 - их худшие значения. В табл. 2, 3: ЬВ - нижняя оценка длины расписания, Z0 - длина первого

построенного расписания алгоритмом ВВ1СР, Т - длина расписания ВВ1СР, Zf - длина начального расписания, полученного методом BBFIFO, Tf - длина расписания, полученного методом BBFIFO. Последний столбец в табл. 2 показывает отношение числа итераций в двух методах ветвей и границ следующим образом: для каждого теста фиксировалось число итераций, которое требовалось для построения наилучшего расписания, 1Т - среднее значение этого показателя по всем тестам серии для алгоритма BBICP, ITf - среднее значение для алгоритма BBFIFO.

Таблица 2. Средние показатели для каждой серии тестов

Серия M ZO/LB T/LB Zf/LB Tf/LB IT/ITf

si 3 1.087 1.006 1.062 1.004 6.79

s2 4 1.062 1.013 1.095 1.011 1.37

s3 5 1.161 1.021 1.177 1.028 4.10

s4 5 1.128 1.057 1.248 1.143 0.46

s5 5 1.042 1.007 1.105 1.022 7.19

Среднее 1.096 1.021 1.137 1.042 3.99

Как видно из табл. 2, алгоритм ICP выигрывает у алгоритма FIFO 4% на начальном расписании и 2% на окончательном. По значению целевой функции не очень много, но среднее число итераций, которое требуется алгоритму ICP для построения решения, примерно в 4 раза меньше, чем у алгоритма FIFO. Только в одной серии тестов преимущество по числу итераций было у алгоритма FIFO.

Таблица 3. Худшие показатели для каждой серии тестов

Серия M ZO/LB T/LB Zf/LB Tf/LB

si 3 1.179 1.053 1.144 1.018

s2 4 1.171 1.054 1.255 1.092

s3 5 1.328 1.056 1.279 1.125

s4 5 1.242 1.147 1.572 1.449

s5 5 1.237 1.129 1.486 1.391

Из табл. З видно, что самое большое отклонение длины расписания от нижней оценки для алгоритма ICP составляет 14%, а для алгоритма FIFO - 45%.

В табл. 4 приведены число задач, решенных точно (в %), и лучших решений (в %) для каждого алгоритма: NT - число задач, решенных точно алгоритмом BBICP, NTf - число задач, решенных точно алгоритмом BBFIFO, L - число тестов (в %), в которых получены лучшие решения алгоритмом BBICP, Lf - алгоритмом BBFIFO.

Таблица 4. Число точных и лучших решений для двух алгоритмов

Серия NT NTf L Lf

si 68 53 42 21

s2 71 57 71 57

s3 50 0 70 30

s4 37 0 62 37

s5 70 25 70 15

Среднее 59.2 27 63 32

Число задач, в которых было получено точное решение алгоритмом ICP, лежит в диапазоне от З7 до 71%, алгоритмом FIFO - от 0 до 57%. В среднем примерно в 2 раза чаще алгоритм ICP дает точное решение. В последних столбцах табл. 4 приведено число задач в процентах, в которых были получены лучшие решения каждым

из рассматриваемых алгоритмов. Из них видно, что алгоритм ICP примерно в 2 раза чаще строит более короткое расписание. Для того чтобы максимально использовать возможности методов, можно рекомендовать решать задачу последовательно каждым из методов и выбирать лучшее решение.

Заключение. С увеличением числа заданий метод ветвей и границ требует все больше времени на получение оптимального решения. Представляется оправданным и перспективным использовать его для получения приближенного решения путем ограничения числа итераций на построения расписания при каждом заданном значении z. Вычислительный эксперимент подтвердил работоспособность метода ветвей и границ при таком ограничении. Метод строит расписание достаточно быстро, при этом улучшение качества по сравнению с первым расписанием составляет до 30%.

Summary

Grigoryeva N. S. Branch and bound algorithm for multiprocessor scheduling problem.

The multiprocessor scheduling problem is defined as follows: the tasks have to be executed on several parallel identical processors; we have to find where and when each task will be executed, such that the total completion time is minimum. The duration of each task is known as well as precedence relations among tasks. Preemption on processors is not allowed. Scheduling parallel tasks among parallel processors is a NP-hard problem. The great majority of research in scheduling study no delay schedules. We define an IIT (inserted idle time) schedule as a feasible schedule in which a processor is kept idle at a time when it could begin processing an operation. The branch and bound algorithm produces a feasible IIT schedule for a fixed length T. In order to optimize over T we must iterate the scheduling process over possible values of T. The upper and lower bound on T is defined. New dominance criteria are introduced to curtail the enumeration tree. By this approach it is generally possible to eliminate most of the useless nodes generated at the lowest levels of decision tree. To illustrate the efficiency of our approach we tested it on randomly generated task graphs.

Key words: multiprocessor scheduling; inserted idle time schedule; branch-and-bound.

Литература

1. Теория расписаний и вычислительные машины / Под ред. Э. Г. Коффмана М.: Наука, 1984. 334 c.

2. Brucker P. Schduling Algorithms. Heidelberg: Springer, 1998. 259 p.

3. Ullman J. D. NP-complete scheduling problems// J. Comput. System Sci. 1975. Vol. 10. P. 384-393.

4. Kanet J. J. ,Sridharan V. Scheduling with inserted idle time: problem taxonomy and literature review// Operation Research. 2000. Vol. 48. Issue 1. P. 99-100.

5. Григорьева Н. С. Эвристический алгоритм построения расписания для многопроцессорной системы //Тез. докл. конференции «Дискретная математика и приложения». М.: Изд-во Моск. ун-та, 2001. С. 99-100.

6. Григорьева Н. С. Оценка точности алгоритма построения расписания для многопроцессорной системы// Избр. труды второй междунар. конференции по проблемам управления: В 2 т. М.: Изд-во ИПУ РАН, 2003. T. 1. С. 127-135.

7. Fernandez E., Bussell B. Bounds the number of processors and time for multiprocessor optimal schedules//IEEE Trans. on Computers. 1973. P. 745-751.

8. Graham R. L. Bounds for certain multiprocessing Anomalies// Bell System Tecnical Jornal. 1966. Vol. 45. Issue 9. P. 1563-1581.

Статья рекомендована к печати проф. Г. А. Леоновым.

Статья принята к печати 7 октября 2008 г.