Тема №4: «Паросочетания в двудольном графе. Задача о назначениях» (3 часа)




4.1 Паросочетания

 

4.1.1 Не менее важным, чем понятие вершинной независимости (см. тему №5), является понятие рёберной независимости.

Произвольное подмножество попарно несмежных рёбер графа называется паросочетанием (или независимым множеством рёбер). В качестве иллюстрации рассмотрим граф, изображённый на рисунке 4.1. В нём паросочетаниями являются, например, {e2, e6}, {е1, е4, е6}, {e1, e3, e5, e7}.

Паросочетание графа G называется максимальным, если оно не содержится в паросочетании с бóльшим числом рёбер, и наибольшим, если число рёбер в нём наибольшее среди всех паросочетаний графа G. Число рёбер в наибольшем паросочетании графа G называется числом паросочетания и обозначается через α1(G).

Ясно, что независимые множества рёбер графа G находятся во взаимно однозначном соответствии с независимыми множествами вершин рёберного графа L(G), и, следовательно, α1(G)=α0(L(G)). Тем не менее, для нахождения наибóльшего паросочетания в произвольном графе существуют эффективные алгоритмы.

4.1.2 С понятием паросочетания тесно связано понятие рёберного покрытия. Рёберным покрытием графа G называется такое подмножество рёбер Е'ÍEG, которое покрывает все вершины графа, т.е. такое, что каждая вершина в G инцидентна по крайней мере одному ребру из Е'. Из этого определения следует, что лишь графы с изолированными вершинами не имеют рёберных покрытий. Рёберное покрытие графа называется минимальным, если в нём не содержится покрытий с мéньшим числом рёбер, и наименъшим, если число рёбер в нём наименьшее среди всех покрытий. Число рёбер в наименьшем рёберном покрытии графа G называется числом рёберного покрытия и обозначается через β1(G).

Очевидно, что β1(G)≥|G|/2. Например, в графе, изображенном на рисунке 4.2, множество из пяти ребер {{1, 9}, {2, 8}, {3, 7}, {4, 5}, {5, 6}} является рёберным покрытием, а поскольку β1(G)≥4,5, то оно – наименьшее.

4.1.3 Паросочетание называется совершенным (или 1-фактором), если оно одновременно является рёберным покрытием. Иногда сам граф называют паросочетанием – тогда, когда все рёбра графа составляют одно паросочетание.

Так, граф К2 является совершенным паросочетанием (напомним, что граф Кn называется полным, если любые две его вершины из n вершин смежны, т.е. К2 – это граф из двух вершин, соединённых ребром). В графе, изображённом на рисунке 4.1, {е1, ез, e5, е7} – совершенное паросочетание. Очевидно, что если в графе есть совершенное паросочетание, то оно является наименьшим рёберным покрытием.

Кстати, число вершин в наибольшем независимом множестве и число вершин в наименьшем покрытии графа G порядка n связаны соотношением (см. тему 5)

.

Аналогичное верно и для соответствующих рёберных параметров, т.е. справедлива следующая теорема.

Теорема (Т.Галлаи, 1959г.). Для любого графа G порядка n без изолированных вершин верно равенство

.

 

4.2 Паросочетания в двудольном графе

 

4.2.1 Самые разные задачи связаны с построением паросочетаний в двудольных графах. Приведём только два примера. Первый из них – задача о свадьбах. Существование решения этой задачи равносильно существованию в специально построенном двудольном графе (X, Y, Е) паросочетания, покрывающего X. В этом графе вершины из X соответствуют юношам, из Y – девушкам, а ребро соединяет вершины, соответствующие знакомым юноше и девушке. На рисунке 4.3 изображён граф для задачи о свадьбах, заданной таблицей 4.1. Жирными линиями выделены рёбра паросочетания, решающего задачу (одно из возможных решений).

Таблица 4.1

Юноша Девушки, с которыми знакóм юноша
х1 у1, у4, у5
х2 у1
х3 у2, у3, у4
х4 у2, у4

4.2.2 Второй пример – задача о назначениях. Имеется конечное множество исполнителей {х1, x2,..., хn}, каждый из которых может выполнять некоторые из работ {y1, y2,...,yn). Стоимость выполнения работ yi исполнителем xj равна wij. Нужно распределить исполнителей по работам, т.е. назначить по одному исполнителю на каждую работу так, чтобы, во-первых, выполнить все работы и, во-вторых, минимизировать общие затраты. Как и в случае задачи о свадьбах, строится двудольный граф, каждому ребру которого приписывается вес, равный стоимости выполнения исполнителем соответствующей работы. Возможность выполнения всех работ равносильна существованию в графе совершенного паросочетания, а назначение, минимизирующее все затраты, соответствует наибольшему паросочетанию с минимальным суммарным весом.

В следующем подразделе 4.3 мы подробно остановимся на задаче о назначениях и путях её решения.

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

 

4.3.1 Постановка задачи и пути её решения

4.3.1.1 Приведём конкретный пример задачи о назначениях (эту задачу называют также задачей выбора). Пусть n=5 исполнителей с номерами М1, М2,…, М5 способны выполнить пять работ с номерами Т1, Т2,…, Т5. Назначение исполнителя Мi на работу Тj связано с затратами (например, времени) сij. Каждый исполнитель должен быть назначен на одну и только одну работу так, чтобы суммарные затраты на выполнение всех работ были минимальны. Затраты сij приведены в таблице 4.2.

Таблица 4.2

В часах

Исполнитель Работа
Т1 Т2 Т3 Т4 Т5
М1          
М2          
М3          
М4          
М5          

 

Дадим математическую формулировку задачи. Обозначим через хij число, равное единице, если i -й исполнитель назначен на j -ю работу, и нулю – в противном случае. Тогда задача об оптимальном назначении (назначениях) заключается в отыскании целых неотрицательных чисел хij таких, которые минимизируют целевую функцию

(4.1)

при условиях:

; (4.2)

; (4.3)

. (4.4)

Первое условие (4.2) гарантирует, что за каждой работой будет закреплён исполнитель, причём только один; второе [см. (4.3)] – что каждому исполнителю будет предоставлена работа, причём только одна. Вместо условий целочисленности переменных в последнем ограничении [см. (4.4)] записано условие неотрицательности. В данном случае оно достаточно, так как сформулированная задача является частным случаем задачи линейного программирования транспортного типа, для которой всегда имеется целочисленное решение при целых величинах потребностей и запасов.

Поскольку все суммы по строкам и столбцам равны 1, задача вырождена (напомним, задача называется вырожденной, когда часть базисных переменных равна 0; в транспортной задаче число базисных переменных равно n+n-1, а в нашем случае только n переменных будут равны единице, а n-1 – нулю), так что алгоритм решения транспортной задачи (например, метод потенциалов) применим, но неэффективен. В оптимальном решении (целочисленном) транспортной задачи в нашем случае пять из величин хij будут равны 1, а остальные – 0. С другой стороны, в матрице затрат размерностью 5×5 надо найти пять элементов – по одному в каждой строке и каждом столбце, таких, что сумма выбранных элементов минимальна.

4.3.1.2 Рассмотрим два метода решения задачи о назначениях: венгерский метод и метод Мака. Оба метода основаны на том факте, что положения оптимального выбора (назначения) не меняется, если к каждому элементу некоторой строки или столбца матрицы затрат добавить или вычесть одно и то же значение.

Венгерский метод основан на некоторых довольно запутанных и нетривиальных комбинаторных свойствах матриц и его достаточно трудно, хотя и возможно, программировать. Его описание было приведено в подпункте 3.2.2.3 предыдущей темы. Несмотря на это, мы приведём его и в этой теме.

Метод Мака, предложенный К.Маком, имеет преимущество более простого интуитивного обоснования. Это – логический итеративный процесс. Этот метод основан на идее выбора в каждой строке минимального элемента. Вообще говоря, минимальные элементы строк не распределены по всем n столбцам матрицы. Здесь же используется идея сложения (или вычитания) одного и того же значения со всеми элементами строки или столбца с целью распределения минимальных элементов строк по столбцам (в этом случае они образуют оптимальный выбор).

4.3.2 Венгерский метод решения задачи о назначениях

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

Начальный шаг: выполняем эквивалентное преобразование матрицы С так, чтобы получить матрицу, в которой в каждой строке и каждом столбце имеется хотя бы один ноль; для этого просмотрим каждую строку матрицы С, найдём в ней наименьший элемент и вычтем его из элементов этой строки; полученная при этом матрица С1 называется приведенной по строкам; в матрице С1 просмотрим все столбцы, найдём в каждом из них минимальный элемент и вычтем его из элементов просматриваемого столбца; полученная при этом матрица С2 будет приведенной по строкам и столбцам; клетку, содержащую ноль, будем считать допустимой и с нулями будем обращаться так, как с единицами в упрощённой задаче о назначениях, т.е. при каждом назначении нулевую клетку в строке отмечаем, например «звёздочкой» (знáком «*»); закончив просмотр всех строк, переходим к общему шагу.

Общий шаг состоит из двух шагов:

– шаг 1 – решаем упрощённую задачу о назначениях, т.е расставляем звёздочки среди допустимых клеток; при этом возможны два случая:

а) назначения получают все n исполнителей;

б) назначения получают не все n исполнителей.

В случае а исходная задача о назначениях решена; в случае же б переходим к шагу 2, предварительно сделав пометку строк и столбцов матрицы;

– шаг 2 – зачеркнём каждую непомеченную строку и каждый помеченный столбец; далее рассмотрим часть матрицы, состоящую из незачёркнутых элементов и возьмём наименьшее число в ней (т.е. в этой части матрицы); вычтем это число из всех незачёркнутых элементов и прибавим к дважды зачёркнутым элементам (т.е. к элементам, стоящим на пересечении зачёркнутой строки с зачёркнутым столбцом); далее переходим к шагу 1 общего шага.

Примечание – При переходе к шагу 2 необходимо предварительно пометить строки и столбцы матрицы. Пометим чёрточкой все строки, не содержащие звёздочки. Затем возьмём какую-либо помеченную строку, например i -ую, и просмотрим её, отыскивая допустимые непомеченные клетки (т.е. нулевые без звёздочки клетки). Столбцы, содержащие такие клетки, пометим номером просматриваемой строки, в данном случае номером i. Будем повторять это до тех пор, пока не просмотрим все помеченные (чёрточкой) строки. Столбец, уже получивший какую-нибудь пометку, больше не помечается. Теперьвыберем любой помеченный столбец, например j -й, и просмотрим его, отыскивая звёздочку. Если она (звёздочка) будет найдена, пометим строку, в которой стоит эта звёздочка, номером просматриваемого столбца, в данном случае номером j. Снова выберем какой-либо помеченный непросмотренный столбец и повторим эту операцию. После того как будут просмотрены все помеченные столбцы, переходим к просмотру вновь отмеченных строк, отыскивая в них допустимые невыделенные клетки, и т.д. Продолжаем этот процесс, попеременно просматривая строки и столбцы, пока не достигнем следующего: 1) либо будет помечен столбец, не содержащий звёздочки; 2) либо приписать никаких пометок больше нельзя и все помеченные столбцы содержат звёздочки. В случае 1 общее число звёздочек (назначений) увеличиваем следующим образом. В помеченном столбце, не содержащем звёздочки, поставим звёздочку в клетке, указываемой пометкой этого столбца. Затем в строке, где проставлена новая звёздочка, уберём прежнюю из клетки, указываемой пометкой этой строки. В столбце, в котором находится удаляемая звёздочка, перейдём к клетке, указываемой его пометкой и поставим звёздочку и т.д. В конце концов придём к одной из строк, помеченных чёрточкой, и общее число звёздочек в таблице возрастёт на единицу. После этого сотрём пометки, повторим процесс расстановки пометок и вновь переместим звёздочки, продолжая процесс до тех пор, пока не придём к случаю 2, в котором оптимальное закрепление достигнуто. Минимальное число рядов, содержащих все допустимые клетки, состоит из непомеченных строк и помеченных столбцов.

4.3.2.2 Найдём оптимальное распределение исполнителей по работам при матрице затрат С (см. таблицу 4.2), т.е. решим задачу (4.1)-(4.4) венгерским методом (см. подпункт 4.3.2.1).

После приведения матрицы затрат С по строкам получим матрицу С1 (таблица 4.3). Далее, приведя её по столбцам, получим матрицу С2 (таблица 4.4),

Таблица 4.3 – Матрица С1

i j          
           
           
           
           
           

Таблица 4.4 – Матрица С2

i j 1          
  0*          
  3   0*      
  0 0*        
  6     0*    
           
             

где в каждой строке и в каждом столбце имеется хотя бы один ноль.

Рассматриваем в таблице 4.4 клетки с нулями как допустимые и решаем на них упрощённую задачу о назначениях. Назначения получают четыре исполнителя, а минимальное множество рядов, содержащих все допустимые клетки, составляют непомеченные строки 2, 3, 4 и помеченный столбец 1. Зачеркнув их, находим среди элементов, оставшихся незачёркнутыми в таблице 4.4, наименьший, равный 2. Вычитаем его из всех незачёркнутых элементов таблицы 4.4 и прибавляем ко всем дважды зачёркнутым элементам. Получаем таблицу 4.5, в которой назначения получат уже все исполнители – задача решена.

Таблица 4.5

i j          
          0*
      0*    
    0*      
        0*  
  0*        

 

Запишем решение в виде совокупности двойных элементов: (1,5), (2,3), (3,2), (4,4), (5,1), где первый элемент – номер исполнителя Мi, второй – номер поручаемой ему работы Tj. Выбирая из матрицы затрат С (см. таблицу 4.2) соответствующие оптимальным назначениям затраты, получаем минимальные суммарные затраты на выполнение всех работ:

. (4.5)

4.3.3 Метод Мака решения задачи о назначениях

4.3.3.1 Выберем по минимальному элементу в каждой строке. Подчеркнём каждый из этих минимальных элементов. Если в каждом столбце имеется ровно по одному подчёркнутому элементу, то подчёркнутые элементы – базис – определяют оптимальный выбор (назначение). В противном случае переходим к Началу.

Начало. Разделим множество столбцов на два подмножества А и А’, где А – выбранное подмножество, А’ – невыбранное подмножество. В начале (и при последующих возвращениях к Началу) выбранных столбцов нет, так что подмножество А пусто, а подмножество А’ содержит все столбцы. Далее идут следующие шаги;

– шаг 1 – выбрать из подмножества А’ столбец, т.е. один столбец (а не два и более!), содержащий более одного подчёркнутого элемента. Перевести этот столбец из подмножества А’ в подмножество А;

– шаг 2 – пусть подчёркнутый элемент подмножества А из строки i равен bi (рассматриваем строки с подчёркнутыми элементами!), а минимальный элемент множества А’ из строки i равен ai. Пусть

, (4.6)

где r – номер строки, в которой достигается минимум (4.6);

– шаг 3 – увеличить все элементы множества А на arbr;

– шаг 4 – отметить элемент ar точками снизу. Теперь элемент ar – «отмеченный точками элемент»;

– шаг 5 – пусть С – столбец, содержащий элемент ar. Если в С более двух подчёркнутых элементов, то перевести С из множества А’ в множество А и перейти к шагу 2; в противном случае – к следующему шагу. Теперь можно подчеркнуть элементы в ещё одном столбце;

– шаг 6 – подчеркнуть последний элемент ar полностью – это новый подчёркнутый элемент;

– шаг 7 – найти исходный подчёркнутый элемент в той же строке, где находится элемент ar. Удалить подчёркивание. Обозначить столбец, в котором находится этот элемент, через D;

– шаг 8 – Если столбец D не содержит других элементов, он должен содержать элемент, отмеченный точками. Обозначить этот элемент через ar и вернуться к шагу 6.

Если столбец D содержит ещё один подчёркнутый элемент, то полностью подчёркнутые элементы образуют новый базис. Если остался ещё столбец без подчёркнутых элементов, то вернуться к Началу.

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

Примечание – Вычисления могут быть сокращены, если на шаге 3 алгоритма увеличить на arbr только подчёркнутые элементы множества А, отложив до шага 8 увеличение остальных элементов множества А. В этом случае все оставшиеся элементы столбца увеличиваются на то же значение, на которое увеличились подчёркнутые элементы.

4.3.3.2 Найти оптимальное распределение исполнителей по работам при матрице затрат С (см. таблицу 4.2) методом Мака (см. подпункт 4.3.3.1).

 

Варианты заданий

Задание №1

 

 

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

Таблица 4.6

В часах

Исполнитель Работа
Т1 Т2 Т3 Т4 Т5
М1          
М2          
М3          
М4          
М5          

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: