Планирование рабочих мест или проблема рабочих мест (JSP ) - это задача оптимизации в информатике и исследовании операций, в которой задания назначаются ресурсам в определенное время. Самая простая версия выглядит следующим образом: нам даны n заданий J 1, J 2,..., J n с различным временем обработки, для которых требуется быть запланированным на m машинах с различной вычислительной мощностью, пытаясь минимизировать время изготовления. Продолжительность изготовления - это общая длина расписания (то есть, когда все задания закончили обработку).
Стандартная версия проблемы - это когда у вас есть n заданий J 1, J 2,..., J n. В каждом задании есть набор операций O 1, O 2,..., O n, которые необходимо обрабатывать в определенном порядке (известном как ограничения приоритета). У каждой операции есть определенный компьютер, на котором она должна выполняться, и только одна операция в задании может быть обработана в данный момент времени. Обычное ослабление - это гибкий цех заданий, где каждая операция может быть обработана на любом станке из данного набора (станки в наборе идентичны).
Эта проблема является одной из наиболее известных задач комбинаторной оптимизации и была первой проблемой, для которой конкурентный анализ был представлен Грэхемом в 1966 году. Лучшие примеры задач для базовой модели с целевым временем изготовления принадлежат Тайярду.
Первоначально название произошло от планирования заданий в мастерской, но тема имеет широкое применение за пределами этого типа экземпляра.
Систематическая нотация была введена для представления различных вариантов этой задачи планирования и связанных с ней проблем, названных трехполевой нотацией.
Многие варианты существует проблема, в том числе следующая:
Поскольку задача коммивояжера является NP-сложной, очевидно, что проблема Job-Shop также NP-сложна, поскольку TSP является частным случаем JSP с отдельная работа (города - это машины, а продавец - это рабочие места).
дизъюнктивный граф - одна из популярных моделей, используемых для описания экземпляров задач планирования работы цеха.
Математическая формулировка проблема может быть решена следующим образом:
Пусть и быть двумя конечными наборами. Из-за промышленного происхождения проблемы машины называются машинами, а называются jobs .
Пусть обозначает набор всех последовательных назначений заданий машинам, так что каждое задание выполняется каждой машиной ровно один раз; элементы могут быть записаны как матрицы, в которых в столбце перечислены задания, которые машина будет делаю, по порядку. Например, матрица
означает, что машина выполнит три задания в порядке , а машина будет выполнять задания в порядке .
Предположим также, что существует некоторая функция стоимости . Функция стоимости может интерпретироваться как «общее время обработки» и может иметь некоторое выражение в единицах времени , затраты / время для машины на выполнение задания .
задача мастерской состоит в том, чтобы найти распределение вакансий такой, что является минимумом, то есть не существует так, что .
Эффективность планирования может быть определена для расписания через отношение общего времени простоя машины к общему время обработки, как показано ниже:
Здесь - время простоя машины , - продолжительность изготовления, а - количество машин. Обратите внимание, что согласно приведенному выше определению эффективность планирования - это просто время изготовления, нормированное на количество машин и общее время обработки. Это позволяет сравнивать использование ресурсов экземплярами JSP разного размера.
Одна из первых проблем, которую необходимо решить в JSP, - это то, что многие предлагаемые решения имеют бесконечную стоимость: то есть существует такое, что . Фактически, довольно просто придумать примеры таких , убедившись, что две машины будут заблокированы, так что каждая будет ждать для вывода следующего шага другого.
Грэм уже представил алгоритм составления списков в 1966 году, который является (2 - 1 / m) -конкурентным, где m - количество машин. Также было доказано, что планирование списков является оптимальным онлайн-алгоритмом для 2-х и 3-х машин. Алгоритм Коффмана – Грэма (1972) для заданий постоянной длины также оптимален для двух машин и является (2–2 / м) -конкурентоспособным. В 1992 году Бартал, Фиат, Карлофф и Вохра представили алгоритм, способный конкурировать с 1.986. Соревновательный алгоритм 1.945 был представлен Каргером, Филипсом и Торнгом в 1994 году. В 1992 году Альберс представил другой алгоритм, который конкурирует с 1.923. В настоящее время наиболее известным результатом является алгоритм Флейшера и Валя, который обеспечивает коэффициент конкуренции 1,9201.
Нижняя граница 1,852 была представлена Альберсом. Экземпляры Taillard играют важную роль в разработке расписания работы цеха с целью увеличения продолжительности работы.
В 1976 году Гэри представил доказательство того, что эта задача NP-полная для m>2, то есть оптимальное решение не может быть вычислено за полиномиальное время для трех или более машин (если P = NP ).
В 2011 г. Xin Chen et al. предоставляет оптимальные алгоритмы для онлайн-планирования на двух связанных машинах, улучшая предыдущие результаты.
Простейшая форма задачи минимизации времени выполнения в автономном режиме связана с атомарными заданиями, то есть задания, не разделенные на несколько операций. Это эквивалентно упаковке нескольких предметов различных размеров в фиксированное количество ящиков, так что максимальный необходимый размер ящика будет как можно меньше. (Если вместо этого количество ящиков должно быть минимизировано, а размер ящика фиксирован, проблема становится другой проблемой, известной как проблема упаковки ящиков.)
Дорит С. Хохбаум и Дэвид Шмойс представил схему полиномиальной аппроксимации в 1987 году, которая находит приближенное решение проблемы минимизации времени автономной работы с атомарными заданиями с любой желаемой степенью точности.
Основная форма задачи планирования заданий с несколькими (M) операциями на M машинах, так что все первые операции должны выполняться на первой машине, все вторые операции над вторыми и т. д. и одно задание не может выполняться параллельно, это известно как проблема планирования потокового цеха. Существуют различные алгоритмы, в том числе генетические алгоритмы.
Эвристический алгоритм С.М. Джонсона может использоваться для решения задачи 2-х машинных заданий N, когда все задания должны обрабатываться в такой же порядок. Шаги алгоритма следующие:
Задание P i имеет две операции длительностью P i1, P i2, которые необходимо выполнить. на машине M1, M2 в этой последовательности.
Если минимум принадлежит P k1,
Удалить K из списка A; Добавьте K в конец списка L1.
Если минимум принадлежит P k2,
Удалить K из списка A; Добавить K в начало списка L2.
Метод Джонсона оптимально работает только для двух машин. Однако, поскольку это оптимально и легко вычисляется, некоторые исследователи пытались адаптировать его для M машин, (M>2.)
Идея заключается в следующем: представьте, что каждое задание требует m операций в последовательности, на М1, М2… мм. Мы объединяем первые машины m / 2 в (воображаемый) обрабатывающий центр MC1, а остальные машины в обрабатывающий центр MC2. Тогда общее время обработки для задания P на MC1 = сумма (время работы на первых m / 2 машинах), а время обработки для Job P на MC2 = sum (время обработки на последних m / 2 машинах).
Таким образом, мы свели проблему m-Machine к задаче планирования для двух обрабатывающих центров. Мы можем решить эту проблему с помощью метода Джонсона.
Машинное обучение недавно использовалось для прогнозирования оптимального времени выполнения экземпляра JSP без фактического создания оптимального расписания. Предварительные результаты показывают точность около 80% при применении контролируемых методов машинного обучения для классификации небольших случайно сгенерированных экземпляров JSP на основе их оптимальной эффективности планирования по сравнению со средней.
Вот пример задачи планирования работы цеха, сформулированной в AMPL как задача смешанного целочисленного программирования с ограничениями индикатора:
параметр N_JOBS; param N_MACHINES; установить JOBS orders = 1..N_JOBS; установить MACHINES orders = 1..N_MACHINES; param ProcessingTime {JOBS, MACHINES}>0; param CumulativeTime {i в ЗАДАНИЯХ, j в МАШИНАХ} = сумма {jj в МАШИНАХ: ord (jj) <= ord(j)} ProcessingTime[i,jj]; param TimeOffset{i1 in JOBS, i2 in JOBS: i1 <>i2} = max {j в МАШИНАХ} (CumulativeTime [i1, j] - CumulativeTime [i2, j] + Время обработки [i2, j]); вар конец>= 0; var start {JOBS}>= 0; var предшествует {i1 в JOBS, i2 в JOBS: ord (i1) < ord(i2)} binary; minimize makespan: end; subj to makespan_def{i in JOBS}: end>= start [i] + sum {j в МАШИНАХ} ProcessingTime [i, j]; subj к no12_conflict {i1 в JOBS, i2 в JOBS: ord (i1) < ord(i2)}: precedes[i1,i2] ==>start [i2]>= start [i1] + TimeOffset [i1, i2]; subj к no21_conflict {i1 в JOBS, i2 в JOBS: ord (i1) < ord(i2)}: !precedes[i1,i2] ==>start [i1]>= start [i2] + TimeOffset [i2, i1]; данные; параметр N_JOBS: = 4; параметр N_MACHINES: = 4; param ProcessingTime: 1 2 3 4: = 1 4 2 1 2 3 6 2 3 7 2 3 4 1 5 8;