Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
15.04.2015
Размер:
508.93 Кб
Скачать

3.6.4. Определение кратчайшего остова неориентированного

графа на основе упорядочения ребер графа

(алгоритм Прима-Краскала)

Такая задача возникает при прокладке дорог, газопроводов, линий электропередач и т.д., когда необходимо связать nточек так, чтобы общая длина «линий связи» была минимальной. Следует отметить, что «кратчайший остов графа» не имеет никакого отношения к дереву, дающему все кратчайшие пути, выходящие из некоторой выбранной вершины. Так, для графа (рис. 3.4), где числа, стоящие около ребер, являются их весами, дерево, дающее все кратчайшие пути, выходящие из вершиных1, изображено на рис. 3.5, а кратчайший остов графа представлен на рис. 3.6.

X1

Рис. 3.4

X1

Рис. 3.5

Рис. 3.6

Итак, кратчайший остов графа связывает кратчайшим образом все вершины графа, а не только х1с другими вершинами.

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

3.6.5. Решение задачи о кратчайшем пути в графе

на основе линейного программирования [1,4]

Рассмотрим решение задачи на примере исходного графа, изображённого на рис. 3.7. Необходимо для него сформировать минимальное остовное дерево.

Рис. 3.7 Исходный граф

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

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

Для исходной вершины: ,

где все xi выходят из исходной вершины, аN число вершин графа.

Для остальных вершин: сумма дуг (переменных), прилегающих к рассматриваемой вершине, равна единице, причём дуги, входящие в вершину, берутся со знаком “+”, а выходящиесо знаком.

Вид целевой функции будет следующим:

,

где значения коэффициентов целевой функции Сiхарактеризуют стоимости потоков (рис. 3.7) .

На переменные xi­ необходимо наложить условия неотрицательности и целочисленности.

Cистема ограничений и целевая функция для данной задачи имеют вид:

x1 + x2 + x3 = 4

x1 + x5 x4 = 1

x2 x5 x6 + x7 = 1

x3 x7 x8 = 1

x4 + x6 + x8 = 1

xi 0

xi целые

F = 2x1 + 2x2 + 3x3 + 5x4 + 4x5 + 3x6 + x7 + 0x8 min

Решение задачи имеет вид:

x1 = 1

x2 = 1

x3 = 2

x4 = 0

x5 = 0

x6 = 0

x7 = 0

x8 = 1

Fmin = 10

Вэтом случае получаем граф оптимального решения, изображённый на рис. 3.8.

Рис. 3.8. Граф оптимального решения

Дуги, не принадлежащие остовному дереву, имеют поток по ним равным нулю (переменные Xi=0) .

3.7. Задача о назначениях

3.7.1. Матричная формулировка задачи

Задача о назначениях может быть сформулирована следующим образом: необходимо наилучшим образом назначить Nработников{ C1, C2,, CN }наNработ{B1, B2,, BN }. Наилучшим назначением считается такое, которое обеспечивает максимальную выработку суммарной продукции ( или минимальные затраты). Необходимая информация для решения задачи о назначениях содержится в квадратной матрице производительностейА={aij}, гдеaij – производительностьi-го работника (машины) при выполненииj-ой работы. В случае минимизации затрат коэффициентaij означает затраты при выполненииi-ым работником (машиной)j-ой работы.

Должно выполняться дополнительное условие: на каждую работу назначается только один работник и все работы должны быть выполнены.

3.7.2. Венгерский метод решения задачи о назначениях в матричной форме

Метод был предложен венгерским математиком Эгервари. Прежде чем перейти к рассмотрению венгерского метода, условимся элементы матрицы, образующие некоторое множество, называть независимыми, если никакие два элемента этого множества не лежат на одной и той же линии (строке, столбце). Так, например, элементы вида ajj (j=1,N)независимы. Задача фактически сводится к определениюNнезависимых элементов матрицы{aij}так, чтобы сумма этих элементов была максимальной. В процессе решения задачи приходится выделять отдельные линии матрицы (строки или столбцы). Выделенные линии отмечаются знаком +. Элементы, находящиеся в выделенных строках или столбцах, называются выделенными, а остальные - невыделенными. Алгоритм состоит из подготовительного этапа и ряда последовательно выполняемых итераций.

Подготовительный этап. При решении задач на максимум в каждом столбце матрицы выбирается максимальный элемент, из которого вычитаются все элементы этого столбца. Затем в каждой строке матрицы выбирается минимальный элемент, который вычитается из всех элементов этой строки. В результате этого в каждой строке и каждом столбце матрицы будет не менее одного нуля. В первом столбце матрицы выбирается произвольный нуль и отмечается звездочкой (*). Затем рассматриваются нули второго столбца, и если среди них есть такие, которые находятся не в одной строке с нулем первого столбца, и уже отмеченные звездочкой, то один из них отмечается звездочкой. Аналогично рассматриваются нули всех других столбцов. Отмеченные звездочкой нули являются независимыми, так как в каждой строке и каждом столбце может быть не более одного нуля со звездочкой.

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

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

Этап 1. Над найденным невыделенным нулем ставится штрих('), соответствующая строка отмечается справа знаком(+), а знак выделения столбца, содержащего нуль со звездочкой, снимается.

Этап 2. Производится построение цепочки элементов. Цепочка начинается от нуля со штрихом и по столбцу проходит к нулю со звездочкой, затем к нулю со штрихом в той же строке и т.д. Начало и конец цепочки - нули со штрихом. После этого звездочки над нулями, входящие в цепочку, зачеркиваются, а над нулями со штрихом ставятся звездочки. Зачеркиваются также все знаки выделения в матрице (кроме звездочек). На этом заканчивается построение цепочки. Так как концы цепочки - нули со штрихами, то в результате итерации число нулей со звездочкой увеличивается на 1.

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

Рис. 3.4

Соседние файлы в папке ДМ4