Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Matematika7-1.doc
Скачиваний:
17
Добавлен:
21.03.2016
Размер:
1.14 Mб
Скачать

Порядок выполнения работы

  1. В режиме обучения проследить отображаемый на экране дисплея поэтапный процесс решения задачи о максимальном потоке. При выборе режима обучения предлагается сгенерировать матрицу или ввести её вручную (рис. 5.2) .

Рис. 5.2. Выбор режима

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

Содержание отчета

1. Краткое описание алгоритма.

2. Матрица пропускных способностей.

3. Графическое представление графа с отмеченными на нем путями передачи потока.

4. Выводы. Рекомендации по формированию пояснений на обучающем стенде в соответствии с результатами программного контроля.

Лабораторная работа № 6

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

Цель работы

Теоретическое и практическое изучение алгоритма венгерского метода решения задачи о назначениях.

Теоретическая часть

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

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

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

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

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

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

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

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

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

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

Рис. 6.1. Блок-схема алгоритма

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