Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зандер Е. В. Исследование операций в экономике...doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
2.31 Mб
Скачать

Лекция 2.2.3. Целочисленные задачи исследования операций. Метод Гомори для нахождения их решения. Задача о назначениях и венгерский метод

В ряде экономических задач требование целочисленности — свойство решения, оно естественно возникает в задачах размещения производства, о закупках парка машин для выполнения производственной программы, при определении количества сезонных рабочих и т. д.

Исторически первой задачей целочисленного типа является опублико­ванная 1932 г. венгерским математикам Е. Эгервари задача о назначениях персонала. Приведем ниже аналогичную указанной задачу о распределении механизмов по видам работ.

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

Пусть требуется выполнить n различных работ и имеется n механизмов (машин) для их выполнения, причем каждый механизм может использовать­ся на любой работе. Производительность механизма на различных работах, вообще говоря, различна. Обозначим через Су производительность i-го меха­низма наj-й работе. Задача заключается в таком распределении механизмов по работам, при котором суммарная производительность максимальна.

Построим математическую модель этой задачи. Сопоставим каждому из возможных вариантов распределения машин по работам набор значений неизвестных xij, относительно которых условимся, что ху = 1, если в данном варианте iмеханизм назначается наj-ю работу, и ху = 0, если iмеханизм назначается не наj-ю работу. Для любого варианта среди чисел ху должно быть точно n единиц, причем должны выполняться условия:

п

ij=1, j =1,2,...,n

(каждый механизм назначается на одну работу) и

j=1, i = 1,2,...,n

i=1

117

(на каждую работу назначен один механизм). Суммарная производитель­ность при данном варианте назначения машин на работы выразится суммой:

i=\ j=\

Математическая модель задачи:

п п

(4.9)

п

xij =1, i=1, n

i=1

{1, если / - й исполнитель назначен на j - ю работу; 0, если ij-й исполнитель не назначен на -юработу.

i = 1,n; j = 1,n.

Условия выводят задачу о назначениях из класса задач линейного про­граммирования, так как они нелинейны. Задачи математического программи­рования, в которых на переменные наложены такие условия, называются за­дачами с булевыми переменными. Поскольку все остальные условия и целе­вая функция нашей задачи линейны, мы должны формально отнести сё к классу задач линейного программирования с булевыми переменными. Одна­ко задачу можно рассмотреть как частный случай транспортной (и, следова­тельно, просто линейной) задачи. В самом деле, если отбросить последнее условие, заменив его условиями неотрицательности переменных, то задача превращается в обычную транспортную задачу, имеющую ту особенность, что в ней все ai (i= 1,2,..., n) и все bj (j=1, 2,..., n) равны единице.

Если решить эту задачу методом потенциалов или любым другим ме­тодом, который при целых ai и bj приводит к целочисленному оптимальному решению, то полученное решение автоматически будет удовлетворять не уч-

118

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

С =

222

- с!"

Сп2

Спп J

матрица эффективностей (например, производительностей) задачи о назна­чениях. В соответствии с постановкой этой задачи, решить её — значит вы­брать в матрице C n элементов, по одному из каждой строки и каждого столбца (строки соответствуют назначенным объектам, например механиз­мам, а столбцы — объектам, на которые производится назначение, например работам) так, чтобы сумма выбранных элементов, которая равна общей эф­фективности, соответствующей данному выбору, была наибольшей по срав­нению с её значениями при всех других таких выборах. Мы сейчас увидим, что эту задачу можно свести к выбору n нулевых элементов, по одному в ка­ждом столбце и каждой строке («правильному выбору»), в некоторой матри­це с неотрицательными элементами, у которой в каждой строке и каждом столбце есть нули.

Две матрицы С = (сij) и D = (dij) назовем здесь эквивалентными, если одна из них получается из другой прибавлением к элементам каждой строки одного и того же числа (может быть, для разных строк эти числа различ­ны) и к элементам каждого столбца одного и того же числа (может быть, для разных столбцов эти числа различны), например при dij=cij+ei+fj,

i=1, 2,…, n; j = 1, 2,…, n.

119

Ясно, что тогда и вторая матрица получается из первой прибавлением к ее строкам и столбцам постоянных чисел i и fj соответственно), так что свойство эквивалентности взаимно.

Например, матрицы

О

3

1

С =

О

2

4 2 1

2 −2 −3

1 3 О

6 3 3 6

4 6 4 0

4 5 7 5

0 0 0 0

эквивалентны, так как D получается из С прибавлением к строкам С чисел 0, 0, 1, -1, а к столбцам — чисел 2, 3, 4, 1 соответственно.

ТЕОРЕМА. Множества оптимальных назначений двух задач выбора с эквивалентными матрицами совпадают.

Доказательство. Пусть матрица С эквивалентна матрице D и пусть (1,j1), (2,j2) ,…, (n,jn) — оптимальное назначение в задаче выбора с матрицей С (первый механизм назначается на j1-ю работу, второй — на j2-ю, и т. д.) Допустим от противного, что для задачи с матрицей D это назначение не яв­ляется оптимальным, т.е. существует другой выбор (1,j1), (2,j2), …, (n,jn), что общая эффективность при этом выборе превышает общую эффективность при первом выборе:

d

l

2j2

' ≥d1j +d2j +... + dnj .

nJn Vl 2J2 nJn

Так как по условию dij=cij + ei +fj, то отсюда:

1j

h nJn П JJn

Очевидно, что

--1 ; Т tl T I ; ~Г С") ; ~\~ е^ ~\~ Т ; ~\~ . .. ~Ь С„; "Ь б„ "Ь / ;

120

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

c +c +... + c >c +c +... + c

У lA 2h

1j

а это противоречит тому, что для задачи с матрицей С выбор

(1,j1), (2,j2), …, (n,jn) — оптимальный.

Так как свойство эквивалентности матриц взаимное, то так же доказы­вается, что любой оптимальный выбор задачи с матрицей D является и опти­мальным выбором задачи с матрицей С. Теорема доказана. ■

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

Нам будет удобно предварительно перейти от данной задачи выбора на максимум к задаче выбора с теми же условиями, но на минимум, т. е. от мат­рицы С = (сij) перейти к матрице С = (-cij) и искать выбор, дающий мини­мальную сумму элементов.

Теперь перейдем от задачи на минимум с матрицей к задаче на ми­нимум с эквивалентной ей матрицей, которая имела бы только неотрицатель­ные элементы и в каждом столбце и каждой строке которой было бы хотя бы по одному нулевому элементу. Для этого сначала прибавим к каждому столбцу матрицы наибольший из элементов соответствующего столбца матрицы С (или, что то же самое, вычтем элементы каждого столбца матри­цы С из наибольшего элемента этого столбца). Получится неотрицательная матрица С1, в каждом столбце которой есть хотя бы один нуль. Теперь вы­чтем из каждой строки матрицы С1 минимальный элемент этой строки. По­лученная матрица D и будет неотрицательной, в каждом столбце и каждой строке которой есть хотя бы один нуль.

121

Итак, проделываем последовательные преобразования матрицы С:

Н азовем эти преобразования предварительными. Если в каждой строке матрицы Q = ij ′ полученной после первого преобразования матрицы С,

есть хотя бы один нуль, то второе преобразование, конечно, не изменит мат­рицу С и практически не производится.

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

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

1. Отмечаем (например, звездочкой) какой-нибудь нуль в первом столбце матрицы D, (0*); отмечаем звездочкой какой-нибудь нуль во втором столбце, не лежащий в той строке, в которой находится 0* из первого столбца (если такой нуль во втором столбце найдется); отмечаем звез­дочкой один из нулей третьего столбца, лежащий в строке, где нет еще нулей со звездочкой (если такой нуль в третьем столбце найдется); и так далее, пока не пройдем все столбцы матрицы. Если число отме­ченных звездочкой нулей равно n, то процесс окончен: места, занимае­мые нулями со звездочкой, соответствуют n переменным ху , равным 1, в оптимальном решении исходной задачи. Если нулей со звездочкой меньше n, то поступаем следующим образом:

122

                  1. Помечаем (например, знаком «+» сверху) столбцы матрицы, в которых есть 0*, и считаем эти столбцы занятыми. В ходе процесса будут появ­ ляться и занятые строки. Элементы, стоящие на пересечении незанято­ го столбца и незанятой строки, будут считаться незанятыми, остальные элементы - занятыми. Если в матрице нет незанятых нулей, то перехо­ дим к п. 5. Если незанятые нули есть, то выбираем первый из них (про­ сматривая поочередно строки матрицы слева направо). Отмечаем его каким-нибудь промежуточным значком (например, штрихом — 0). Ес­ ли в его строке нет нуля со звездочкой, то переходим к п. 4; если в его строке 0* есть, то делаем следующее:

                  1. Освобождаем (снимаем знак «+» и считаем снова незанятым) столбец, в котором находится 0*, лежащий в той же строке, что и отмеченный только что штрихом нуль. Помечаем (например, знаком «+» справа) строку, в которой находится 0, и считаем её занятой. Возвращаемся ко второй части п. 2.

                  1. Начиная с только что отмеченного 0, строим цепочку из нулей: от это­ го 0, по столбцу к 0*, от него по строке к 0 и т. д., пока это возможно. Цепочка оборвется (может быть, на первом же 0) на некотором 0. Снимаем звездочки у нулей из цепочки и заменяем звездочками штри­ хи у нулей из цепочки. Новый набор нулей со звездочками содержит на один больше чем предыдущий и является также правильным. Снимаем все пометки, кроме звездочек, и возвращаемся ко второй части п. 1.

                  1. Отыскиваем минимальный элемент среди незанятых элементов матри­ цы (пусть он равен h) и вычитаем его из всех незанятых строк, а затем прибавляем ко всем занятым столбцам. Никакие пометки при этом не снимаются. Получается матрица, эквивалентная предыдущей и содер­ жащая незанятые нули. Возвращаемся к третьей части п. 2. Рассмотрим пример использования алгоритма.

123

Пример. Найти оптимальный вариант назначений, если матрица эф-фективностей такова:

2 3 3 5 4

4 2 4 6 2

О 2 2 2 4 3

4 3 4 3 5

0 10 2 0

ч /

Решение. Приведем цепочку матриц, получающихся в процессе реше­ния задачи, с соответствующими проектами. Снятие значка отмечено заклю­чением его в прямоугольник. Над стрелками переходов от матрицы указаны пункты алгоритма, которые использовались при соответствующих преобра­зованиях.

Процесс окончен, так как получилось n = 5 нулей со звездочкой. Опти­мальный вариант назначений: x15=x24=x31=х43=x52=1, остальные хij=0, т. е. первый механизм назначается на пятую работу, второй — на четвертую, тре­тий — на первую, четвертый — на третью, пятый — на вторую.

Изложенный алгоритм в литературе называется венгерским алгорит­мом (венгерский метод) решения задачи о назначениях.

2 3 3 5 4

4 2 4 6 2

2 2 2 4 3

4 3 4 3 5

0 10 2 0

2 0 111

0 10 0 3

2 12 2 2

0 0 0 3 0

V4 2 4 4 5,

2 0* 1 1 1

0* 1 0 0΄ 3

10 111

0΄ 0 0* 3 0

2 0 2 2 3

1 0* 0΄ 0 0

0* 2 0 0΄ 3

-> 0' 0 0 0 0

0΄ 1 0* 3 0

10 112

124

1 0*0 0 100

0 2 0 0* 3 0* 0' 0 0 0 0΄ 1 0* 3 0

1 0΄ 1 12

результат

1 0 0 0 0*

О 2 0 0* 3

О* О О О О

0 1 0* 3 0

1 0* 1 1 2

Общая модель целочисленной задачи и метод Гомори для её решения

Задача о назначениях относится к частному случаю задачи целочис­ленного программирования.

Математическая модель задачи: в области, определенной условиями

a ijxj = bi, i = 1,m, найти решение х=(х1,х2,..., xn), при котором максимизи-руется значение функции

п

F(x) = ∑cjxj и при этом хj — целое (j=1, n).