P2precpi1Lmax
Версия от 05:36, 10 июня 2012; 217.66.152.17 (обсуждение)
Описание алгоритма
Полагаем, что ребра в графе ориентированы от работы, к работам, зависимым от нее. Введем понятие вынужденного дедлайна
— время, до которого необходимо выполнить -ую работу, чтобы успеть выполнить все работы из , где — множество работ, зависящих (не обязательно непосредственно) от -ой работы. Заметим, что эта величина может принимать отрицательные значения. Обозначим через количество работ из , таких что .Утверждение: |
Пусть уже посчитаны работы для всех . Тогда, если , то -ая работа
должна быть закончена до . |
Рассмотрим все работы , для которых . Все эти работы будут выполнены после окончания обработки детали с номером . Для них . Пусть работу закончили выполнять в момент времени . Нужно до момента времени выполнить ещё работ. Так как в нашем распоряжении находятся две машины, то время их выполнения будет не менее, чем . Поскольку необходимо выполнить все эти работы до , то -ая работа должна быть закончена до момента времени . |
Тогда финально получаем формулу для вычисления «вынужденного» дедлайна для
-ой работы: , где . Для вершин, исходящая степень которых равна нулю, по определению вынужденного дедлайна, считаем его равным обычному дедлайну. Для подсчета вынужденных дедлайнов будем поддерживать список , содержащий вершины, отсортированные в порядке неубывания дедлайнов. Дедлайн равен вынужденному дедлайну, если он уже посчитан, и обычному — в противном случае. Будем рассматривать вершины в порядке, обратном топологической сортировке графа, то есть, начиная с вершин нулевой исходящей степени. Пусть на текущем шаге мы рассматриваем работу с номером . Перебирая вершины из в порядке списка , пересчитываем вынужденный дедлайн для -ой вершины по формуле, указанной выше, после чего обновляем дедлайн этой вершины в списке .После подсчета вынужденных дедлайнов, оптимальное расписание считается жадным алгоритмом. На каждом шаге на для обработки на станках выбираются работы с минимальным вынужденным дедлайном, для которых все необходимые работы уже выполнены. Одновременно с этим считается максимальное опоздание.
Доказательство корректности
Утверждение: |
В расписании с обычными дедлайнами нет опозданий тогда и только тогда, когда нет опозданий в расписании с
"вынужденными" дедлайнами. |
Так как "вынужденные" дедлайны меньше обычных, то в эту сторону утверждение очевидно. Напрямую следует из определения вынужденного дедлайна. |
Утверждение: |
Если существует расписание без опоздание, то приведенный выше алгоритм найдет такое расписание. |
Пусть ни один станок не простаивал в течении этого периода. ~---расписание, построенное этим алгоритмом, где ~--- время начала обработки -ой детали. Пусть в этом расписании существует работа, опаздывающая по обычным дедлайнам. Согласно утверждению 1, в этом расписании также существует работа, опаздывающая по "вынужденным" дедлайнам. Пусть работа с минимальным временем начала, удолетворяющая следующему условию: . Следуя алгоритму, в каждый момент времени , такой что , хотя бы одна работа с номером , такая что должна быть выполнена. Рассмотрим два случая. Первый случай: в какой-то момент времени только одна работа с номером , такая что выполнена. Выберем максимальное время , такое что , обладающее таким свойством. Тогда для всех работ c номером , которые выполнялись в момент времени с до выполняется , кроме того |