Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KPTASK.DOC
Скачиваний:
7
Добавлен:
23.11.2018
Размер:
361.98 Кб
Скачать
  1. Комбинаторные методы решения задач теории расписаний

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

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

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

Понятие перестановки хорошо рассматривается в [1] — расположение элементов некоторого множества в любом порядке (без повторений) представляет собой перестановку элементов этого множества. Перестановка обычно представляется последовательностью элементов (чисел) из N == {1,2,...,n}. Символической записью этой конструкции является  = (i1,i2,i3,..., in).

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

Пусть Р — некоторое множество (не обязательно всех) перестановок =(i1, i2,i3 . . ., in) элементов множества N = {1, 2, ..., n}.

Под st-окрестностью k-то по порядку элемента в перестановке  (обозначение Qst (, k)) будем понимать упорядоченный набор <Q,s,t >, где s== (imax(1,k-s+i), ... , ik-1,ik) и t== (ik+1,i k+2 ... , imin(n,k+\t))— перестановки длины min(k, s) и min (n-k,t) соответственно и Q— множество (неупорядоченное) элементов { i1, i2,i3 . . ., ik-s }. Если k  s, то Q = . Предполагается, что sO и t0.

Требуется найти перестановку * Р, которой соответствует наименьшее значение функции F (, n), заданной на Р рекуррентным соотношением

F (, k) = Ф [F(, k - 1), Qst (, k)]

где F (, 0)— известная не зависящая от  величина, а функция, стоящая в правой части этого соотношения, неубывающая по F (, k—1).

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

  1. Инициализация. Выбор начальной расстановки . Определение функции F(,n). Запомнить расстановку * как оптимальную.

  2. Пока существуют нерассмотренные варианты перестановки выполнять п.3-4.

  3. Генерировать следующую расстановку *. Вычислить F*(*,n).

  4. Если F*(*,n)> F(,n) запомнить расстановку * как оптимальную.

Задача о следующей перестановке (алгоритм Дейкстры) рассмотрена в [3].

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

с_ниж=1 и с_вер=n

для некоторого постоянного значения n(n>1). Кроме того известно, что упорядоченная последовательность значений с(1),с(2),...,с(n) является некоторой перестановкой значений от 1 до n, но не последней в алфавитном порядке: n, n-1, ...1. Внутренний блок должен преобразовать последовательность c(l), с (2), ..., с(n) в последовательность, являющуюся ее посредственным следующим по алфавиту преемником. Например, при n=9 последовательность

1 4 6 2 9 5 8 7 3

должна быть преобразована в последовательность

1 4 6 2 9 7 3 5 8

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

с (k) сохраняется для 1 k < i

с (k) изменяется для k=i

Значение i определяется как максимальное значение i(<n), такое, что c(i)<c(i+1).

После того как i найдено, необходимо отыскать в «хвосте», т. е. среди значений с(j) при i+ljn, новое значение с(i). Т.е. требуется найти такое значение j в интервале i+ljn, что с(j) есть наименьшее значение, удовлетворяющее условию

c(j)>c(i)

После того как j найдено, с(i) должно получить свое новое значение, для чего используется операция «с: переставить(i, j)». Дополнительным преимуществом этой операции является то, что после ее выполнения вся последовательность продолжает оставаться перестановкой чисел от 1 до n; заключает всю цепочку действий переупорядочивание значений в хвосте последовательности, чтобы монотонно возрастали. Общая структура программы представляется в виде:

  • определение i;

  • определение j;

  • c: переставить (i, j);

  • сортировка хвоста

Операция «с: переставить (i, j)» не нарушает монотонности значений функции в хвосте, и поэтому «сортировка хвоста» сводится к расположению значений в обратном порядке.

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

Переменные:

c : вектор;

i,j : целое;

Начало:

i:=n-1;

Пока (c[i]>=c[i+1]) i:=i-1;

j:=n;

Пока (c[j]<=c[i]) j:=j-1;

c:переставить(i,j);

i:=i+1; j:=n;

Пока (i<j)

н.ц.

c:переставить(i,j);

i:=i+1;

j:=j-1;

к.ц.

Конец.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]