Метод Магу-Вейсмана для поиска НВУП

advertisement
Санкт-Петербургский государственный университет
информационных технологий, механики и оптики
(СПбГУ ИТМО)
Кафедра «Компьютерные образовательные технологии»
Р.В. Койнов, Л.С. Лисицына
Практикум по дискретной математике
в среде виртуальной лаборатории системы ДО ИТМО
Учебно-методическое пособие
Санкт-Петербург
2004
УДК 681.3
Койнов Р.В., Лисицына Л.С. Практикум по дискретной математике.
Учебно-методическое пособие. – СПб., 2004. - 78 с.
Рецензенты:
С.К. Стафеев, д.т.н., профессор, декан ЕНФ СПбГУ ИТМО,
А.А. Бобцов, к.т.н., доцент каф. СУиИ СПбГУ ИТМО
Учебно-методическое пособие подготовлено на кафедре «Компьютерные
образовательные технологии» (КОТ) факультета ИТиП и предназначено для
студентов специальностей 073700 – «Информационные технологии в
образовании» и 071900 – «Информационные системы и технологии»,
изучающих курс «Дискретная математика». Пособие служит для поддержки
практических занятий и аттестаций в среде виртуальной лаборатории по
данному курсу в системе дистанционного обучения (ДО) ИТМО.
Печатается по решению УМС факультета ИТиП СПбГУ ИТМО.
© Санкт-Петербургский государственный
институт точной механики и оптики
(технический университет), 2003
ОГЛАВЛЕНИЕ
Введение.
1. План занятий и форма отчетности в среде виртуальной лаборатории по
«Дискретной математике» системы ДО ИТМО.
2. Методические указания по темам практических занятий.
2.1.
Тема № 1 «Связность в графе». Волновой метод поиска
минимального маршрута в связном графе.
2.2.
Тема № 2 «Циклы в графе». Циклы Гамильтона и задача
коммивояжера.
2.2.1. Метод Робертса и Флореса.
2.2.2. Метод ветвей и границ.
2.2.3. Эвристические методы.
2.3.
Тема № 3 «Деревья в графе». Минимальные остовные деревья во
взвешенном графе.
2.3.1. Метод Прима.
2.3.2. Метод Краскала.
2.4.
Тема № 4 «Внутренняя и внешняя устойчивость в графе».
2.4.1. Метод Магу-Вейсмана для поиска НВУП.
2.4.2. Метод Брона-Кербоша для поиска НВУП.
2.4.3. Метод разборки графа для поиска НПП.
2.5.
Тема № 5 «Операции над графами». Минимальная раскраска.
2.5.1. Алгоритм раскраски на основе метода Магу-Вейсмана.
2.5.2. Алгоритм раскраски А1.
2.5.3. Алгоритм раскраски А2.
2.6.
Тема № 6 «Изоморфизм графов». Метод на основе обобщения
локальных характеристик вершин.
2.7.
Тема № 7 «Транспортная задача».
2.7.1. Метод «северо-западного угла».
2.7.2. Метод минимальной стоимости.
2.7.3. Метод потенциалов.
2.8.
Тема № 8 « Задача линейного назначения».
2.8.1. Венгерский алгоритм.
2.8.2. Метод на основе принципа максимина.
2.8.3. Метод на основе принципа минимального риска.
3. Методические указания для подготовки к аттестующим тестам.
3.1. Тест № 1 «Экстремальные числа графа».
3.2. Тест № 2 «Сети Петри».
Литература.
ВВЕДЕНИЕ
Целью данного пособия является:
 методическая поддержка практических занятий по курсу
«Дискретная математика», проводимых в среде виртуальной
лаборатории системы ДО ИТМО,
 методическая поддержка подготовки к аттестующим тестам по
лекционному курсу «Дискретная математика».
Виртуальная лаборатория по «Дискретной математике» представляет
собой комплекс программ, моделирующих работу ряда изучаемых методов
курса с целью проверки правильности решения задач. Результаты проверки
заносятся в электронный журнал системы ДО ИТМО и являются основанием
для зачета по данной теме занятий. При этом, система ДО ИТМО позволяет
отслеживать студенту, преподавателю и деканату текущую успеваемость по
предмету.
Тестирование по лекционному курсу «Дискретная математика» проводится
в системе ДО ИТМО в рамках расписания практических занятий. Студенты
должны пройти тестирование по двум темам: «Экстремальные числа графа»
и «Сети Петри». Оба теста – с оценкой.
Аттестация по курсу «Дискретная математика» включает в себя:
 для студентов по специальности 071900 в форме зачета, который
определяется на основании всех сданных зачетов по темам практикума
и аттестующих тестов,
 для студентов по специальности 071900 в форме экзамена, допуском к
которому является зачет по практическим занятиям и положительные
оценки по аттестующим тестам.
1. План занятий и форма отчетности в среде виртуальной
лаборатории по «Дискретной математике» системы ДО ИТМО
№ Тема занятия
задания
«Связность в графе»
1
2
3
4
5
6
7
8
9
10
11
12
13
Волновой метод поиска минимального
маршрута в связном графе.
«Циклы в графе»
Метод Робертса и Флореса.
Метод ветвей и границ.
Эвристические методы.
«Деревья в графе»
Метод Прима.
Метод Краскала.
«Внутренняя и внешняя устойчивость в
графе»
Метод Магу-Вейсмана для поиска НВУП.
Метод Брона-Кербоша для поиска НВУП.
Метод разборки графа для поиска НПП.
«Операции над графами»
Алгоритм раскраски на основе метода МагуВейсмана.
Алгоритм раскраски А1.
Алгоритм раскраски А2.
«Изоморфизм графов»
Метод на основе обобщения локальных
характеристик вершин графов.
вариант
073700 071900
Форма отчетности
*
зачет
*
*
**
*
зачет
зачет
зачет
*
**
*
*
зачет
зачет
*
**
*
*
зачет
зачет
зачет
**
зачет
**
**
зачет
зачет
*
зачет
оценка
*
**
*
18
Тест № 1 «Экстремальные числа графа»
«Транспортная задача»
Метод «северо-западного угла».
Метод минимальной стоимости.
Метод потенциалов.
«Задача линейного назначения»
Венгерский алгоритм.
19
Метод на основе принципа максимина.
**
зачет
20
Метод на основе принципа минимального
риска.
**
зачет
21
Тест № 2 «Сети Петри»
*
14
15
16
17
*
*
*
зачет
зачет
зачет
*
*
зачет
оценка
В приведенной выше таблице представлен план проведения практических
занятий в 2-ух вариантах: 32 часа занятий - для студентов специальности
073700 и 16 часов – для студентов специальности 071900. Символом «*»
отмечены обязательные темы для изучения и зачета, а символами «**» - темы
для самостоятельного изучения и зачета.
Для изучения и получения зачета по каждой теме практических занятий
занятий студент должен выполнить следующие действия:
1. Зайти
на
сервер
центра
дистанционного
обучения
ГУИТМО
(de.ifmo.ru), и в левой части окна страницы в меню выбрать пункт
«Обучение и аттестация».
2. В открывшемся списке предметов выберите учебный план
«Дискретная математика».
3. В появившемся окне выберите ссылку теоретического курса и
выберите из предложенного списка изучаемую тему.
4. Ознакомтесь
рассмотрите
с
предлагаемым
пример
решения
теоретическим
типовой
задачи
материалом
с
и
применением
изучаемого метода.
5. Вернитесь назад и выберите страницу практикума. Получите у
преподавателя номер своего варианта и перейдите на страницу выбора
практического задания.
6. С помощью выпадающего списка в верхней части страницы выберите
вариант задачи согласно номеру, полученному Вами у преподавателя.
7. Решите полученный вариант используя изучаемый метод.
8. Запустите систему проверки результатов и укажите в ней:
 Свою фамилию, номер группы;
 Название изучаемой темы;
 Номер решенного варианта;
 Полученный в результате вычислений результат.
9. При отрицательном ответе системы повторно ознакомтесь с теорией по
изучаемому методу и проверьте свое решение. Повторите ввод
результата в систему проверки. Обратите внимание, на то, как и какие
данные Вы вводите!
10. При возникновении вопросов, оформите отчет о проделанной работе и
обратитесь к преподавателю за консультацией.
11.Информация в электронный журнал по дисциплине «Дискретная
математика»
добавляется
результата проверки решения.
только
в
случае
положительного(!)
2. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ТЕМАМ ПРАКТИЧЕСКИХ
ЗАНЯТИЙ
2.1.
Тема №1 «Связность в графе». Волновой метод поиска
минимального маршрута в связном графе.
Орграф – граф, состоящий из вершин и дуг (направленных ребер).
Маршрут. Для графа G(V,X) (для орграфа - путь) последовательность
v1 x1v 2 x 2 ...x k v k 1 (где k  1, vi V , i  1,...k  1, x j  X , j  1,...k ), в которой чередуются
вершины и ребра (дуги) и для каждого j=1, …, k, ребро xj имеет вид
называется
маршрутом,
соединяющим
вершины
{v j , v j 1 }((v j , v j 1 )) ,
v j , v j 1 (путем из v1 в vk+1). При этом v1 называется начальной, vk+1 – конечной
вершинами маршрута (пути), а остальные вершины внутренними.
Длина маршрута – число ребер (дуг) в маршруте (пути).
Маршрут минимальной длины – маршрут с минимальным количеством
ребер (дуг) между заданными начальной и конечной вершинами.
Взвешенный граф – граф, в котором ребрам (дугам) присвоены некоторые
веса.
Минимальный маршрут – маршрут, соединяющий начальную и конечную
вершину во взвешенном графе и имеющий минимальный суммарный вес
ребер (дуг) маршрута.
Волновой метод
Пусть D=(V,X) – орграф с n  2 вершинами и v,w – заданные вершины из V,
где v  w . Опишем алгоритм поиска минимального пути из v в w в орграфе D
(алгоритм фронта волны).
1. Помечаем вершину v индексом 0. Затем помечаем вершины,
принадлежащие образу вершины v, индексом 1. Множество вершин с
индексом 1 обозначаем FW1(v).
2. Если FWk (v)   или выполняется k  n  2, w  FWk (v) , то вершина w
недостижима из v, и работа алгоритма на этом заканчивается. В
противном случае переходим к шагу 3.
3. Если w  FWk (v) , то переходим к шагу 4. В противном случае
существует путь из v в w длины k, и этот путь является минимальным.
Последовательность вершин
vw1 w2 ...wk 1 w , где
wk 1  FWk 1 (v)  D 1 ( w);
wk  2  FWk  2 (v)  D 1 ( wk 1 );
(*)

w1  FW1 (v)  D 1 ( w2 )
и есть искомый минимальный путь из v в w. На этом работа алгоритма
заканчивается.
4. Помечаем индексом k+1 все непомеченные вершины, которые
принадлежат образу множества вершин с индексом k. Множество
вершин с индексом k обозначаем FWk+1(v).Присваиваем k=k+1 и
переходим к шагу 2.
Замечание 1. Множество FWk(v) в алгоритме называют фронтом волны k-го
уровня.
Замечание 2. Вершины w1,…,wk-1 из (*) могут быть выделены неоднозначно.
Эта неоднозначность соответствует случаям, когда существует несколько
различных минимальных путей из v в w.
Пример:
Используя алгоритм[10], определим минимальный путь из v1 в v6 в орграфе D,
заданном матрицей смежности:
V1
V2
V3
V4
V5
V6
V1
0
1
1
0
1
1
V2
0
0
1
1
1
1
V3
0
0
0
1
1
1
V4
1
1
1
0
1
1
V5
1
1
1
1
0
1
V6
0
1
1
0
0
0
Действуя согласно алгоритму определим :
FW1 (v1 )  {v 4 , v5 }; FW2 (v1 )  D( FW1 (v1 )) \ {v1 , v 4 , v5 }  {v 2 , v3 }
FW3 (v1 )  D( FW2 (v1 )) \ {v1 , v 2 , v3 , v 4 , v5 }  {v 6 }
Таким образом v6  FW3 (v1 ) , а значит (см. шаг 3), существует путь из v1 в v6 длины 3,
и этот путь является минимальным. Найдем теперь минимальный путь из v1 в v6.
Определим множество:
FW2 (v1 )  D 1 (v6 )  {v 2 , v3 }  {v 2 , v3 }  {v 2 , v3 } .
Выберем любую вершину из найденного множества, например v3. Определим далее
множество:
FW1 (v1 )  D 1 (v6 )  {v 4 , v5 }  {v 4 , v5 }  {v 4 , v5 } .
Выберем любую вершину из найденного множества, например v5. Тогда v1v5v3v6 –
искомый минимальный путь из v1 в v6 (длины 3) в орграфе D.
2.2.
Тема № 2 «Циклы в графе». Циклы Гамильтона и задача
коммивояжера.
Простой цикл, содержащий все вершины графа, называют циклом
Гамильтона [9].
Рассмотрим две задачи, связанные с понятием цикла Гамильтона.
Задача 1. Дан ориентированный граф G, требуется найти в нем циклы
Гамильтона, если они существуют.
Задача 2. Дан полный граф G, ребрам которого приписаны произвольные
веса сij. Требуется найти такой цикл Гамильтона, который имеет наименьший
суммарный вес ребер.
Замечание. Если граф G - неполный, то его можно рассматривать как
полный, приписывая недостающим дугам (ребрам) бесконечный вес.
Задача нахождения цикла Гамильтона с наименьшим весом хорошо известна
в литературе как задача коммивояжера. В этой задаче коммивояжер
должен посетить N городов и возвратиться в исходный пункт, при этом
требуется минимизировать общую стоимость путешествия.
Метод Робертса и Флореса
Для исходного орграфа G строим матрицу М = [mij], где элемент mij есть i-я
вершина (скажем, xg), для которой в графе G существует дуга (хj, хg).
Вершины хg во множестве Г (хj) можно упорядочить произвольно, образовав
элементы j-го столбца матрицы М. Заметим, что для проверки правильности
построения матрицы следует помнить, что число строк матрицы М будет
равно наибольшей полустепени исхода вершины.
Метод Робертса и Флореса основан на переборе возможных решений,
позволяет найти все варианты циклов Гамильтона в орграфе, и состоит в
следующем. Некоторая вершина, например, х1 выбирается в качестве
начальной вершины множества S. Это множество S будет служить для
хранения вершин строящейся цепи Гамильтона путем включения на каждом
следующем шаге возможной вершины: под возможной вершиной мы будем
понимать вершину, ранее не вошедшую в S. Итак, в S добавляется из столбца
х1 очередная возможная вершина, например, «а». Затем к множеству S
добавляется очередная возможная вершина из столбца «а», например, «b».
Затем к S добавляется очередная возможная вершина из столбца «b»,
например, «с» и т.д.
Существуют две причины, препятствующие включению некоторой вершины
на шаге r во множество S, где S = {х1 ,а,b,с,..., хr-1, хr}:
Случай 1. В столбце хr нет возможной вершины.
Случай 2. Множество S содержит (n-1) вершин. Это означает, что мы нашли
цепь Гамильтона. Для того, чтобы достроить ее до цикла Гамильтона, надо
рассмотреть дугу (хr, х1):
a) если в графе существует дуга (хr, х1), то найден цикл Гамильтона;
b) если дуга (хr, х1) отсутствует, то в данном графе не существует цикла
Гамильтона на основе найденной цепи.
В случаях 1 и 2(б) следует возврат к варианту без вершины х r. После
исключения данной вершины остается множество S ={ х1 ,а,b,с,..., хr-1 }.
Теперь в S добавляется очередная возможная вершина, следующая за х r-1 в
столбце хr матрицы М. Далее процедура поиска повторяется: осуществляется
включение возможных вершин до тех пор, пока не будет найдена цепь
Гамильтона или пока не потребуется очередной возврат.
Пример.
Пусть дан следующий орграф[14] на 6-ти вершинах:
a
b
f
c
e
d
Матрица М для данного графа выглядит следующим образом:
1
2
3
a
b
-
b
c
e
-
Поиск циклов Гамильтона методом
последовательности следующих шагов:
c
a
d
-
d
c
f
-
e
c
d
-
f
a
b
с
Робертса
и
Флореса
состоит
в
№
шага
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Действие
В качестве начальной вершины выбираем вершину «а».
Добавляем очередную возможную вершину из столбца «а»:
вершину «b».
Добавляем очередную возможную вершину из столбца «b»:
вершину «с».
Рассмотрим столбец «с»: вершина «а» не является
возможной (уже есть в S), добавляем вершину «d».
Рассмотрим столбец «d»: вершина «с» не является
возможной (уже есть в S), добавляем вершину «f».
Столбец «f» не содержит возможных вершин. Исключаем
вершину «f».
Столбец «d» не содержит возможных вершин. Исключаем
вершину «d».
Столбец «c» не содержит возможных вершин. Исключаем
вершину «c».
Добавляем очередную возможную вершину из столбца «b»:
вершину «e».
Добавляем очередную возможную вершину из столбца «e»:
вершину «c».
Добавляем очередную возможную вершину из столбца «c»:
вершину «d».
Добавляем очередную возможную вершину из столбца «d»:
вершину «f».
Количество вершин в S равно 5, т.е. (n-1). Проверяем
наличие дуги (f,a). Так как она существует, то найден
первый вариант цикла Гамильтона (a, b, e, c, d, f , а).
Удаляем вершину «f» и продолжим поиск других вариантов
цикла Гамильтона.
Столбец «d» не содержит отличных от «f» возможных
вершин. Исключаем вершину «d».
Столбец «с» не содержит отличных от «d» возможных
вершин. Исключаем вершину «с».
Добавляем очередную возможную отличную от «с»
вершину из столбца «e»: вершину «d».
Добавляем очередную возможную вершину из столбца «d»:
вершину «f».
Добавляем очередную возможную вершину из столбца «f»:
вершину «с».
Количество вершин в S равно 5, т.е. (n-1). Проверяем
наличие дуги (f,с). Так как она существует, то найден
второй вариант цикла Гамильтона (a, b, e, d, f, c). Удаляем
вершину «с» и продолжим поиск других вариантов цикла
Гамильтона.
Столбец «f» не содержит других возможных вершин.
Исключаем вершину «f».
Столбец «d» не содержит других возможных вершин.
Исключаем вершину «d».
Столбец «е» не содержит других возможных вершин.
Исключаем вершину «e».
Множество S
а
а, b
a, b, c
a, b, c, d
a, b, c, d, f
a, b, c, d
a, b, c
а, b
a, b, e
a, b, e, c
a, b, e, c, d
a, b, e, c, d, f
a, b, e, c, d
a, b, e, c
a, b, e
a, b, e, d
a, b, e, d, f
a, b, e, d, f, c
a, b, e, d, f
а, b, e, d
а, b, e
а, b
23.
24.
Столбец «b» не содержит других возможных вершин. a
Исключаем вершину «b».
Столбец «a» не содержит других возможных вершин.
Поиск закончен.
Циклы Гамильтона: (a, b, e, c, d, f ), (a, b, e, d, f, c ).
Метод ветвей и границ
Метод ветвей и границ относится к группе оптимизационных методов
поиска с возвращением и может применяться также и для решения задачи
коммивояжера. Сокращение перебора достигается за счет отсечения
неперспективных ветвей в дереве решений: чем ближе к корневой вершине
отсекается ветвь, тем быстрее уменьшается число просматриваемых
вариантов.
Метод заключается в следующем. Вначале строится дерево возможных
решений. По нему произвольно выбирается базовый вариант, и затем
относительно него производится выбор лучшего решения. При этом
оценивается соответствующая ему совокупность параметров: для задачи
коммивояжера - суммарный вес дуг (ребер) цикла Гамильтона.
Рассмотрим особенности метода ветвей и границ применительно к задаче
коммивояжера, иллюстрируя примером взвешенного неографа на 4-х
вершинах:
2
9
6
8
1
3
10
4
7
4
Т.к. при построении циклов выбор первой вершины не принципиален, то
положим, что это будет вершина с №1. Для данного графа цикл Гамильтона
будет содержать 4-ре ребра, поэтому дерево решений для него выглядит
следующим образом (всего шесть различных вариантов решения):
1
2
3
4
3
4
2
4
2
3
4
3
4
2
3
2
1
1
1
1
1
1
Примем за начальный "базовый" 4-ый вариант
соответствует циклу Гамильтона (1,3,2,4,1) с весом Lб:
решения,
который
Lб=с(1,3)+ с(3,2)+ с(2,4)+ с(4,1) = 10+6+8+4 = 28 ед.
Первым (в ходе поиска) ребром цикла для базового варианта решения
является ребро (1, 3). В других вариантах могут быть также ребра (1, 2) и
(1, 4). Для них можно вычислить оптимистические оценки нижней границы
суммарного веса ребер цикла
(далее просто веса соответствующего
варианта).
 Если значение оценки больше Lб, то соответствующий вариант
решения считается бесперспективным и исключается из дальнейшего
рассмотрения.
 Если значение оценки меньше Lб, то за базовый принимается этот
вариант и процесс поиска продолжается.
Поиск прекращается, когда будет получено решение, включающее все
вершины графа, т.е. найден цикл Гамильтона с минимальным суммарным
весом ребер.
Эффективность метода ветвей и границ во многом зависит от способа
получения оптимистических оценок строящегося цикла. Одна из подобных
процедур при выборе начального участка X1 = { x1 (1), x2 (1), ..., x1 (1) } сводится
к следующему. Из матрицы весов С, характеризующей граф решений,
вычеркиваются строки {1, 2, ..., k-1} и столбцы {2, 3, ..., k}, определяемые
номерами ветвей, образующих рассматриваемый участок нового варианта. В
оставшейся части матрицы С' на первом этапе оценки в каждой строке
матрицы С' отыскивается min c'ij, который запоминается. Этот минимальный
элемент вычитается из оставшихся ненулевых элементов в каждой строке.
Получаем новую матрицу - С". На втором этапе - в каждом столбце матрицы
С" отыскивается min c"ij, который запоминается и затем вычитается из всех
ненулевых элементов соответствующих столбцов. При этом оптимистическая
Lo оценка длины цикла определяется как:
Lo = L (1,2,...,k) + min c'ij + min c"ij
Пример: Построим матрицу весов[14]:
1
1 x
2 9
3 10
4 4
2
9
x
6
8
3
10
6
x
7
4
4
8
7
x
Если в качестве начального ребра выбрано ребро (1,2), то в соответствии с
процедурой получения оптимистической оценки Lo получаем матрицу:
1
2
3
4
1
9
10
4
2
-
3
6
x
7
4
8
7
x
min c’_ij
0
6
7
4
1
2
3
4
min c’’_ij
1
2
3
4
3
3
0
0
-
0
x
3
0
2
0
x
0
Lo = c12 + min c'ij + min c"ij = 9+6+7+4+0+0+0 = 26 единиц < Lб .
Для начального ребра (1,4):
1
2
3
4
1
9
10
4
2
x
6
8
3
6
x
7
4
-
min c’_ij
0
6
6
4
1
2
3
4
min c’’_ij
1
2
3
4
3
3
0
0
x
0
4
0
0
x
3
0
-
Lо = c14 + min cij + min c"ij= 4+6+6+0+0+0 = 20 < Lб .
Оба пути 1,2 и 1,4 являются перспективными Lo < Lб. Для продолжения решения в
качестве начальных участков могут быть выбраны 1,2,3; 1,2,4; 1,4,2; 1,4,3.
Оценка Lo для начального участка 1,2,3.
1
2
3
4
1
10
4
2
-
3
-
4
7
x
min c’_ij
0
7
4
1
2
3
4
min c’’_ij
1
2
3
4
3
0
0
-
-
0
x
0
Lo = L(1,2,3) + min c'ij + min c"ij = 15+7+4 = 26 < Lб
Оценка Lo для начального участка 1,2,4.
1
2
3
4
1
10
4
2
-
3
x
7
4
-
min c’_ij
0
10
4
1
2
3
4
min c’’_ij
1
2
3
4
3
0
0
-
x
3
3
-
Lo = L(1,2,4) + min c'+ min c"= 17+10+4+3=34 > Lб .
Оценка Lo для участка 1,4,2.
1
2
3
4
1
9
10
-
2
-
3
6
x
-
4
-
min c’_ij
6
10
-
1
2
3
4
min c’’_ij
1
2
3
4
3
0
0
-
0
x
0
-
1
2
3
4
0
4
0
x
0
0
-
-
Lo = 12+6+10+0+0=28 = Lб.
Оценка Lo для участка 1,4,3.
1
2
3
4
1
9
10
-
2
x
6
-
3
-
4
-
min c’_ij
9
6
-
1
2
3
4
min c’’_ij
В результате преобразований в матрице весов получаем
Lo = 11 + 9 + 6 + 0 +0 = 26 < Lэ.
Из всех полученных вариантов два являются перспективными. Это варианты 1,2,3 и
1,4,3. Продолжаем рассматривать эти варианты аналогично предыдущему шагу.
Полностью дерево решений для заданного примера имеет вид:
Два полученных решения отличаются только направлением маршрута.
Эвристические методы
На практике чаще используют приближенные эвристические алгоритмы,
дающие решения, близкие к оптимальным. Рассмотрим один из таких
алгоритмов, известный под названием "метод (или алгоритм) ближайшего
соседа".
1. В качестве начальной точки произвольно выбираем один из городов.
2. Следующим городом для посещения выбирается ближайший к
последнему городу.
3. Если все города уже посещались, возвращаемся в начальный город.
Можно получить лучшие результаты, используя более искусную локальнооптимальную стратегию. Алгоритм "включения ближайшего города"
проводит маршрут по подмножеству из n городов. Алгоритм начинает работу
с одного произвольно выбранного города. Новый город, добавляемый на
каждом шаге, выбирается из городов, еще не вошедших в маршрут, как
город, ближайший к некоторому городу, уже принадлежащему маршруту.
2.3.
Тема № 3 «Деревья в графе». Минимальные остовные деревья во
взвешенном графе.
Дерево – связный граф, не содержащий циклов.
Остовное дерево графа – граф G*(X,U*), построенный на множестве
вершин X и некотором подмножестве U* ребер исходного графа G(V,U) и
являющийся деревом. По отношению к исходному графу такое дерево
является остовом или каркасом. Если исходный граф является несвязным,
то его остовом является лес, каждое дерево которого является остовом
соответствующей компоненты связности.
Минимальное остовные дерево графа (или дерево Прима) – остов
взвешенного исходного графа с минимальным суммарным весом ребер
остова.
Метод Прима
Метод Прима является последовательным и наращивает дерево, состоящее из
одной компоненты связности по матрице расстояний D={dij}nxn (n-количество
вершин графа). Элемент матрицы dij равен расстоянию между i и j
вершинами графа , рассчитанному, например, для ортогональной метрики, по
формуле :
dij = mod(xi - xj) + mod(yi - yj),
где: хi, xj, yi, yj - координаты вершин i и j,
mod(p) - функция, дающая абсолютное значение выражения p.
Алгоритм состоит из следующей последовательности действий:
1. В матрице D просматриваются элементы первой строки и выбирается
минимальный элемент (например, элемент g-го столбца).
2. Исключаются из рассмотрения 1-й и g-й столбцы и строится ребро,
соединяющее 1-ю и g-ю вершины.
3. Просматриваются 1-я и g-я строки и выбирается в одной из них
минимальный элемент (если минимальных элементов несколько, то
выбирается любой из них).
4. Прежде чем построить ребро, соответствующее выбранному
минимальному элементу, проверяется степень инцидентных ему
вершин (например, g-й и r-й ). Если степени данных вершин не
превышают заданного ограничения, то данное ребро включается в
строящееся дерево, в матрице вычеркивается r-й столбец, а к строкам, в
которых ищется минимальный элемент, добавляется r-я строка и
повторяются п.п. 3 и 4.
5. Если ограничение на степень вершины нарушено, то соответствующий
минимальный элемент вычеркивается из рассмотрения и повторяется
выполнение п.3, т.е. ищется новый минимум.
6. Матрица просматривается до тех пор, пока не будут включены все
строки.
Пример:
Пусть дан взвешенный псевдограф G(X,U). Достроим его до полного, присвоив
добавленным ребрам (на рисунке эти ребра показаны прерывистыми линиями) веса
равные . Присвоим также имеющимся петлям веса равные .
7
X1
3
4
X3 9 
2
5
X2



X4
X5
Рассмотрим решение задачи по шагам . Для этого построим матрицу весов полного
графа D, порожденного исходным псевдографом. Обозначим: X* - множество вершин
остовного дерева, а U* - множество его ребер. Положим вначале, что X* = { x1 }.
1. Помечаем в матрице D 1-ую строку "*" и находим min в этой строке:
1
2 3 4 5
*1
Б
7 3 4 4
2
7
Б Б Б 9
3
3
Б Б Б 2
4
4
Б Б Б 5
5
4
9 2 5 Б
*Здесь и далее Б - обозначает .
Т.к. d13 = 3 - min, то U* = {(x1, x3)} и X* = {x1, х3)}.
2. Вычеркиваем 1-ый и 3-ий столбцы, а 3-ью строку помечаем "*". Находим
минимальный элемент в строках, отмеченных символом "*":
1 2 3 4 5
*1 - 7 - 4 4
2 - Б - Б 9
*3 - Б - Б 2
4 - Б - Б 5
5 - 9 - 5 Б
Т.к. d35 = 2 - min, то U* = {(x1, x3), (х3, х5)} и X* = {x1 ,х3 ,х5 }
3. Отмечаем 5-ую строку и вычеркиваем 5-ый столбец:
1 2 3 4 5
*1 - 7 - 4 2 - Б - Б *3 - Б - Б 4 - Б - Б *5 - 9 - 5 Т.к. d14 = 4 - min, то U* = {(x1, x3), (х3, х5), (х1, х4)} и X* = {x1 ,х3 ,х4 ,х5 }
4. Отмечаем 4-ую строку и вычеркиваем 4-ый столбец:
1 2 3 4 5
*1 - 7 - - 2 - Б - - *3 - Б - - *4 - Б - - *5 - 9 - - Т.к. d12 = 7 - min, то U* = {(x1, x3), (х3, х5), (х1, х4), (х1, х2)} и X* = {x1, х2, х3, х4, х5}
5. Дерево построено, суммарный вес= d13 +d35 +d14 +d12 =3+2+4+7=16.
7
X1
X2
4
3
X3
2

9



X4
5
Метод Краскала
Метод Краскала может строить дерево Прима одновременно для нескольких
компонент связности, которые в процессе решения объединяются в одно
связанное дерево. Полный граф задается списком ребер. Перед работой
список ребер сортируется по возрастанию длины. На каждом шаге
просматривается список ребер, начиная с ребра, следующего за вошедшим в
решение на предыдущем шаге, и к строящемуся поддереву присоединяют то
ребро, которое не образует цикла с ребрами, уже включенными в решение.
Алгоритм состоит из следующей последовательности действий:
1. Создается список ребер R, содержащий длину ребра, номер исходной
вершины ребра (i), номер конечной вершины ребра (j),признак
включения данного ребра в дерево.
2. Данный список упорядочивается в порядке возрастания длин ребер.
3. Просматривается список R и выбирается из него ребро с минимальной
длиной, еще не включенное в результирующее дерево и не образующее
цикла с уже построенными ребрами.
4. Если все вершины включены в дерево и количество ребер на единицу
меньше количества вершин, то алгоритм свою работу закончил. В
противном случае осуществляется возврат к п. 3.
Пример:
Вначале полагают, что количество деревьев равно n. Каждый шаг алгоритма попытка добавить из отсортированного списка ребер очередное ребра. Ребро
включается, если оно не образует цикла. Каждое включенное ребро уменьшает
количество деревьев в списке на 1, пока в списке не останется ровно одно дерево.
Это дерево и есть решение, минимальное остовные дерево графа или дерево Прима,
полученное с помощью алгоритма Краскала.
Проиллюстрируем все сказанное примером. Пусть исходный граф тот же, что и
выше в алгоритме Прима:
7
X1
X2
4
3
X3
2

9



X4
5
X5
Отсортированный по возрастанию список ребер этого графа:
N
1
2
3
4
5
6
ребро
(х3 ,х5 ) (х1 ,х3 ) (х1 ,х4 ) (х1 ,х5 ) (х4 ,х5 ) (х1 ,х2 )
длина
2
3
4
4
5
7
7
(х2 ,х5 )
9
Решение задачи по шагам приведено в следующей таблице:
N
Список минимальных
добавляемое
Добавить?
шага деревьев
ребро
1
{x1 },{x2 },{x3 },{x4 },{x5 }
(х3 ,х5 )
да
2
{x1 },{x2 },{x3 ,х5 },{x4 }
(х1 ,х3 )
да
3
{x1 ,x3 ,х5 },{x2 },{x4 }
(х1 ,х4 )
да
4
{x1 ,x3 ,х4 ,х5},{x2 }
(х1 ,х5 )
нет
5
{x1 ,x3 ,х4 ,х5},{x2 }
(х4 ,х5 )
нет
6
{x1 ,x3 ,х4 ,х5},{x2 }
(х1 ,х2 )
да
{x1 ,x2 ,х3 ,х4 ,x5 }
2.4.
вес
ребер
2
5
9
9
9
16
16
Тема № 4 «Внутренняя и внешняя устойчивость в графе»
Устойчивость в графе может быть вершинная и реберная, внутренняя и
внешняя. Большее прикладное значение имеет вершинная внутренняя
устойчивость, поэтому далее мы будем рассматривать понятия устойчивости
в этом смысле.
Наибольшее внутренне устойчивое подмножество (НВУП) – такое
подмножество вершин в графе, которое является самым большим по
количеству вершин среди всех ВУП (подмножеств несвязанных между собой
вершин) графа.
Мощность (количество вершин) НВУП определяет экстремальное число
внутренней устойчивости (неплотности) графа -  0(G).
Каждое ВУП определяет пустой подграф в графе, т.е. подграф без ребер.
Часто в задачах интересуют не пустые, а полные подграфы (ПП). Эти две
задачи – задача поиска пустых и задача поиска полных подграфов – являются
дополнительными друг к другу. Решая задачу поиска ВУП для графа
G(X,U*), который получается из исходного путем замены ребер U на
U*=Uполн.\U (Uполн. – множество ребер полного графа на множестве Х),
мы получим ПП исходного графа. Поэтому приведенные здесь методы могут
быть использованы как для поиска ВУП, та и для поиска ПП.
Наибольший полный подграф (НПП) – наибольший по количеству вершин
полный подграф графа. Кликой графа будет любой максимальный ПП, т.е.
подграф, который нельзя увеличить за счет других вершин без нарушения
свойства полноты.
Количество вершин в НПП определяет экстремальное кликовое число
(число плотности) графа –  (G).
Метод Магу-Вейсмана для поиска НВУП
Данный метод основан на булевой алгебре и дает точное решение задачи
поиска НВУП, а также обратной к этой задаче – задаче поиска клик в графе.
В методе Магу - Вейссмана по матрице инциденций S=||Sij||nxm, где n - число
вершин графа, m - число ребер графа G=(X,U) вычисляется произведение Пg :

m
n
g   S ij X i ,
J 1 i 1
в котором j-й сомножитель представляет собой сумму вершин, инцидентных
ребру uj U.
Теорема. Подмножество вершин Fg является внутренне устойчивым тогда и
только тогда, когда произведение Пg равно 1 для системы переменных {Xi},
определяемых следующим образом:
Xi = 1, если Xi Fg
Xi = 0, если Xi Fg.
В полученном произведении раскрывают скобки и для полученной суммы
выполняют минимизацию по законам булевой алгебры [9]:
Хi = Xi;
Хi + Хi +...+ Хi = Хi;
Хi + 1 = 1;
Хi * Хi *...* Хi = Хi;
Хi * 1 = Хi .
В полученной минимальной форме записи Пg каждому слагаемому Кg
соответствует внутренне устойчивое подмножество Fg = X \ Kg, где Kg слагаемое из полученного Пg.
Пример: Рассмотрим в качестве примера следующий граф на 7-ми вершинах для
нахождения максимальных ВУП (МВУП) [14]:
X3
X2
X1
X6
X7
X4
X5
Используем в качестве сомножителей суммы пар вершин, инцидентных ребрам
графа:
Пg = (Х1+Х3)*(Х1+Х5)*(Х1+Х7)*(Х2+Х3)*(Х2+Х4)*(Х4+Х6)*(Х5+Х6)=
(Х1+Х3*Х5*Х7)*(X2+X3*Х4)*(Х6+Х4*Х5)=
(Х1*Х2+Х1*Х3*Х4+Х2*Х3*Х5*Х7+Х3*Х4*Х5*Х7)*(Х6+Х4*Х5)=
Х1*Х2*Х6 + Х1*Х2*Х4*Х5 + Х1*Х3*Х4*Х6 + Х1*Х3*Х4*Х5 +
Х2*Х3*Х5*Х6*Х7 +Х3*Х4*Х5*Х7 + X2*X3*X5*X7*X4 +
X3*X4*X5*X7*X6
Последнее выражение состоит из 8-ми слагаемых K1, K2,…, K8 , каждое из которых
определяет ВУП в графе. В результате получаем семейство МВУП:
F1=X\K1=Х\{X1,Х2,X6}={X3,X4,X5,X7};
F2={X3,X6,X7};
F3={X2,X5,X7};
F4={X2,X6,X7};
F5={X1,X4};
F6={X1,X6}.
НВУП здесь только одно - F1={X3,X4,X5,X7}.
Следовательно, число внутренней устойчивости графа  0(G)=4.
Метод Брона-Кербоша для поиска НВУП
Данный метод относится к методам последовательного поиска с
возвращением и дает точное решение задачи поиска НВУП. В процессе
поиска на некотором k-м этапе все множество вершин разбивают на три
подмножества: Sk, Qk+, Qk-, где:
 Sk - вершины формируемого ВУП;
 Qk+ - подмножество возможных вершин на включение в Sk+1;
 Qk- - подмножество вершин, которые использовались для
расширения Sk.
Ветвление в дереве поиска включает в себя выбор вершин Xik Qk+ и
выполнение следующих преобразований:
Sk+1 = Sk Xik
Q(k+1)- = Qk- \ ГXik
(1)
+
+
Q(k+1) = Qk \ { ГXik Xik }
где ГXik - окрестность вершины Xik (вершины, смежные с Xik).
Из вершин Qk+ в подмножество Sk+1 следует включить вершину, для которой
 (Х*) = min |ГX Qk+|, X  Qk+
(2)
Если |ГХ|= 0, то выбирают любую вершину из Qk+. Возврат в подмножество
возникает в том случае, когда
X  Qk-, ГX Qk+=  ,
(3)
т.е. существует вершина Х в подмножестве Qk+, такая, что в ее окрестности
нет вершин, принадлежащих подмножеству Qk+ .
При этом возникают следующие преобразования:
Sk = Sk+1 \ Xik+1;
Qk+ = Qk+ \ Xik+1;
(4)
Qk = Qk  Xik+1.
Необходимым и достаточным условием того, что Sk - НВУП, является
выполнение равенства
Qk+ =Qk- = 
(5)
Алгоритма Брона–Кэрбоша состоит из следующих шагов.
1. Пусть S0 = ; Q0- = ; Q0+ = X; k=0.
2. Выбираем вершину Xik Qk+, строим Sk+1, Q(k+1)-, Q(k+1)+. Присвоим
k=k+1.
3. Если выполняется условие (3), то переходим к п.5, иначе - к п.4
4. Если Qk- = Qk+= , то запоминаем Sk, которое является НВУП, и
переходим к п.5. Если Qk+= , Qk- , то переходим к п.5, иначе - к
п.2.
5. Положим k=k-1. Выполняем преобразование (4). Если k=0 и Q0 += , то
решение получено; если k=0 и Q0+ , то переходим к п.2 и если k 0,
переходим к п.3.
Пример: Проиллюстрируем работу алгоритма Брона-Кербоша на том же графе, что и
в примере метода Магу-Вейсмана [14].
X3
X2
X1
X6
X7
X4
X5
Сформируем первоначальные подмножества:
S0 =; Q0- = ; Q0+={X1,X2,X3,X4,X5,X6,X7}; k=0.
Так как Qk- = , то выбираем любую вершину из Q0+, например Х1; k:=k+1=1.
Построим S1={X1}; Q1- = ;
Q1+ = Q0+ \{ ГX1 X1}={X1,X2,X3,X4,X5,X6,X7}\{X3,X5,X7} X1}={X2,X4,X6}.
Проверяем условие (3), Так как Qk- = , то условие не выполняется, переходим к п.4.
Проверяем условие (5). Оно не выполняется, поэтому переходим к п.2.
Выбираем вершину Xi2 Q1+, k=k+1=2; Xi2 = X2.
Cтроим:



S2={X1,X2};
Q2- = ;
Q2+= Q1+ \{ ГX2 X2}= {X2,X4,X6}\{X3,X4} X2}= {X2,X4,X6}\{X3,X4,X2}={X6}.
Проверяем условие (3). Так как условие не выполняется: Qk- = , то переходим к п.4.
Проверяем условие (5), так как оно не выполняется, то переходим к п.2.
Выбираем вершину Xi3 Q2+; k=k+1=3, Xi3=X6.
Строим:



S3 = {X1,X2,X6};
Q3- = ;
Q3+ = Q2+ \{ ГX6 X6}= {X6}\{X4,X5, X6} = .
Условие (3) не выполняется, - переходим к п.4. Q3+ =Q3- = .
Запоминаем S3={X1,X2,X6} в F1. Переходим к п.5. k=k-1=2.
Выполняем преобразование (4):



S2=S3\Xi3 = {X1,X2,X6}\{X6}={X1,X2};
Q2+ = Q2+ \ Xik = {X6}\{X6} = ;
Q2- = Q2- Xi3 = {X6}.
Так как k=0, то переходим к п.3.
Проверяем условие (3): Х6 Q2- и ГX2Q2+ = .
Оно выполняется, - переходим к п.5. k=k-1=1.
Выполняем преобразование (4):



S1=S2\Xi2 ={X1,X2}\{X2};
Q1+ = Q1+ \ Xi2 ={X2,X4,X6}\{X2}= {X4,X6};
Q1- = Q1- Xi2 = {X2}.
Так как k 0 , то переходим к п.3.
ГX2 Q1+ = {X3,X4} {X4,X6}= {X4}.
Q1+ Q1-. Переходим к п.2.
Выбираем вершину Xi2 Q1+, Xi2= {X4}.
Строим новые множества:




S2 =S1 {X4}={X1} {X4}={X1,X4};
Q2- = Q1-\ГXik= {X2}\Г{X4}= {X2}\{X2,X6} = ;
Q2+ = Q1+\{ГXi2 Xi2}={X4,X6}\{X2,X4,X6} = ;
k=2.
Проверяем условие (3). Оно не выполняется, - переходим к п.4. Q2+ = Q2- = .
Подмножество S2={X1,X4} запоминаем в F2.
Переходим к п.5. k=1;
Определяем:



S1=S2\Xi2 = {X1,X4}\{X4}={X1};
Q1- = Q1- Xi2= {X4,X2};
Q1+ ={X4,X6}\{X4}={X6}.
Проверяем условие (3):


X4 Q1- и Г{X4}Q1+ = Г{X4}{X6} ={X2,X6}{X6}={X6};
X2 Q1- и Г{X3}Q1+ ={X3,X4}{X6} = .
Оно выполняется, - переходим к п.5.
k=0;



S0=S1\{X1} = ;
Q0+ = Q0+ \ {Xik}={X2,X3,X4,X5,X6,X7};
Q0- ={X1}.
Выбираем Xik из Q0+ по условию (2).



X* = Г{X2} Q0+ = {X3,X4}; X* = Г{X3} Q0+ ={X2};
X* = Г{X4} Q0+ ={X2,X6}; X* = Г{X5} Q0+ ={X6};
X* = Г{X6} Q0+ ={X4,X5}; X* = Г{X7} Q0+ = { }.
Минимальное значение X*у вершины Xi0= {X7}.
Строим новые подмножества (1):




S1={X7};
Q1- = Q0- \ Г{X7} = ;
Q1+ = Q0+ \ { Г{X7} {X7}}={X2,X3,X4,X5,X6,X7}\{X1 X7}={X2,X3,X4,X5,X6};
k=k+1=1.
Проверяем условие (3).
Оно не выполняется так как Q1- = ; Qk+ ; k=0.
Переходим к п.2.
Выбираем вершину Xi2 Q1+ по условию (2). Это вершина Х3.
Определяем:



S2=S1 Xi2 = {X7,X3};
Q2- = ;
Q2+ = Q1+ \{ГXi2 Xi2}={X2,X3,X4,X5,X6}\{X1,X2, X3}={X4,X5,X6}.
Проверяем условие (3).
Оно не выполняется, - переходим к п.4.
Так как Q2+ , то переходим к п.2.
Выбираем Xi3 из Q2+ по условию (2):



X* = Г{X4} Q2+ = {X6};
X* = Г{X5} Q2+ = {X6};
X* = Г{X6} Q2+ = {X5}.
Можно выбрать любую вершину из подмножества Q2+.
Выбираем Xik ={X4} , тогда:




S3=S2 Xi3={X7,X3, X4};
Q3- = ;
Q3+ = {X4,X5,X6}\{X2,X6,X4}={X5};
k=3.
Проверяем условие (3), так как оно не выполняется, то переходим к п.4.
Q3- = ; Q3+ = ; k=0, поэтому переходим к п.2.
Выбираем:







Xi4 Q3+;
Xi4 ={X5};
S4=S3,
Xi4= {X7,X3,X4,X5};
Q4- = ;
Q4+ = ,
k=4.
Проверяем условие (3).
Так как Qk-=, то переходим к п.4.
Так как Q4- = Q4+ = , то запоминаем новое ВУП: S4={X7,X3,X4,X5} в F3.
Подобный процесс продолжается до тех пор, пока не будут получены все ВУП графа.
Метод разборки графа для поиска НПП
Рассмотрим еще один алгоритм этой группы, предназначенный для поиска
НПП, основанный на операции разборки f(G) обыкновенного графа
G=(X,U), определяемый следующим образом:
Gi+1= f(Gi - Xi),
 f(Gi - Xi) - процедура удаления вершины Xi, имеющей минимальную
степень в графе Gi 0 на i-ом шаге разборки;
 k- такой первый шаг разборки (i=1,2,...,k), на котором Gi+1 = Fn-k,
 Fn-k - полный подграф с числом вершин (n-k),
 n - число вершин графа G.
В результате однократного выполнения операции разборки получаем
решение задачи определения НПП в первом приближении. Значение
плотности (G) исходного графа G в этом случае удовлетворяет неравенству:
(n-k) < (G) < max S(Xi) + 1,
где S(Xi)- степень вершины Xi, удаляемой на i-м шаге разборки; i-1,2,...,k.
Для получения точного решения задачи определения НПП в графе операцию
разборки f(G) последовательно применяем к окрестностям всех вершин,
которые удалялись в процессе разборки и степень которых удовлетворяет
неравенству при их удалении:
S(Xi) >  (G) – 1.
Для получения всего множества НПП операцию разборки f(G) необходимо
применить к окрестностям всех вершин, степень которых S(Xi) в момент
удаления их из графа удовлетворяет неравенству:
S(Xi) >  (G) - 1
А для получения множества всех МПП коррекцию необходимо применять
для всех удаленных вершин.
Для сокращения числа вершин, к которым применяется операция разборки в
процессе коррекции, и исключения повторного получения одинаковых НПП
воспользуемся теоремами.
Теорема 1. Если для вершины Хi получены все НПП (МПП), то на шаге
коррекции m необходимо исключить ее из окрестности вершин, для которых
проводится коррекция.
Теорема 2. Если для вершины Xi на шаге коррекции l (1< l < m) уже
получены все НПП, то данная вершина на шаге m может не рассматриваться.
Приближенный алгоритм поиска НПП на основе операции разборки.
1. k:=1, k-шаг разборки; nk - количество вершин в графе G=(X,U) на k-м шаге
разборке. Первоначально nk :=n, X'=X.
2. Для каждой вершины xi X' определяем значение ее степени S(xI) =|Г xi|,
i=1,2,...,nk.
3. Проверяем условие: S(xi) = n-1, для всех i=1,2,...,nk, определяющее полный
подграф. Если условие выполняется, то k:=k-1 и переходим к п.6, в
противном случае - к п.4.
4. Определяем вершину xj X', имеющую минимальное значение степени
S(xj). Удаляем xj вместе с инцидентными ей ребрами. X'=X'\{xj}, nk+1 :=nk-1
5. S(xj):=0. Степень каждой вершины xt Г xj уменьшаем на 1. S(xt):=S(xt)-1;
k:=k+1. Переходим к п.3.
6. Все неудаленные вершины образуют полный подграф Fn-k=(X',U') с
числом вершин |X'|=n-k. Плотность  (G)=n-k.
Пример:
Рассмотрим работу алгоритма на примере разборки графа G* - дополнительного к
исходному графу G из предыдущего примера [14].
X2
X1
X3
X7
X4
X6
X3
X2
X7
X1
X5
X6
X4
X5
Рис. 1.
Рис. 2.
Граф-дополнение G*(X, U*)
Исходный граф G(X,U)
Процесс разборки данного графа представлен в табл. 1 и на рис. а, б, в.
Процесс удаления вершин из графа заканчивается при условии, что значения
степеней неудаленных вершин равны между собой и на единицу меньше числа
оставшихся вершин. Все неудаленные вершины образуют первый полный подграф
F1={X3,X4,X5,X7} графа G*, который точно соответствует ВУМ графа G. Плотность
графа G* равна неплотности графа G, т.е.  0(G), φ(G*)=4.
Таблица 1.
Вершины графа
Изменение
значений
степеней
X1


X2
4


X3
4
X4
4
3
X5
4
X6
4
3


3
3
X7
5
4
3
x
- процедура удаления вершины со степенью равной x из графа

X3
X1
X4
X6
X7
X3
X4
X6
X5
рис. А
X4
X3
X7
X5
рис. б
X7
X5
рис. в
Для получения всех МПП в графе G* проводим операцию разборки для тех вершин,
которые удалялись в процессе первой разборки, т.е. для вершин Х1, Х2, Х6.
Выбираем вершину Х1 и строим подграф G1(рис. г) с множеством вершин
X1=Г{X1}{X1} ={X1,X2,X4,X6} и множеством ребер U1, инцидентным только
вершинам из подмножества Х1 и принадлежащим множеству ребер исходного графа
G*. Процесс разборки графа G1 представлен в табл.2.
Таблица 2
Вершины
графа
Изменение
значений
степеней
X1
X2
X4
X6
3
2
2


2
X2
X1
X6
X4 X1
X2
рис. г
рис. д
Получили второй полный подграф F2= {X1, X2, X6}, но значение плотности не
изменилось. В процессе разборки графа G1 была удалена вершина Х4, поэтому
проводим коррекцию решения для этой вершины и строим подграф G 2 на основе
подграфа G1 (рис. д). Получаем F3={X1,X2}.
Выбираем следующую вершину для коррекции - Х2. Строим под граф с множеством
вершин Х2={X2}Г{X2}={X2,X1,X5,X6,X7}. Согласно теореме 1 вершина Х1 из
множества Х2 исключается, так как для нее уже получены все полные подграфы на
предыдущем шаге.
Удаляем из полученного подграфа (рис. е) вершину Х5, после чего получаем
F4={X2,X6,X7}. Применяем операцию коррекции к вершине Х5 и строим для неё
новый подграф на основе подграфа, изображенного на рис. е. Полученный подграф
представлен на рис. ж. Получили еще один полный подграф F5={X2,X5,X7}.
X2
X5
X5
X6
X2
X7
рис. е
рис. ж
X7
Выбираем последнюю из удаленных в процессе первой разборки вершину - Х6.
Строим подграф с множеством вершин X3={X6}Г{X6}= {X6}{X1,X2,X3,X7}=
{X1,X2,X3,X6,X7}. Вершины Х1 и Х2 из рассматриваемого множества Х3 удаляем, так
как они уже исследованы. Оставшиеся вершины образуют очередной полный
подграф F6={X3,X6,X7} (рис.з). Решение закончено.
X3
X6
X7
рис. з
2.5.
Тема № 5 «Операции над графами». Методы минимальной
раскраски вершин.
Раскраской вершин графа G называется разбиение множества вершин X на
l непересекающихся подмножеств
X1, X2 ,..., Xl: X =  Xi; Xi  Xj = ; i,j  I={1,2,...,l},
таких, что внутри каждого подмножества Xi не должно содержаться
смежных вершин (Xi - внутренне устойчивые подмножества).
Если каждому подмножеству Xi поставить в соответствие определенный
цвет, то вершины внутри этого подмножества можно раскрасить в один цвет,
вершины другого подмножества Xj - в другой цвет и т.д. по всем
подмножествам.
В этом случае граф называется l-раскрашиваемым.
Методы, направленные на использовании минимума цветов для раскраски
вершин графа, называются методами минимальной раскраски.
Наименьшее число подмножеств, на которое разбивается граф при
раскраске, называется хроматическим числом (G).
2.5.1. Метод раскраски на основе метода Магу-Вейсмана
1. Для графа G = (X,U) построим семейство МВУП:
F ={Fj}, где j = 1,...,l; l - число МВУП.
2. Составим матрицу C =Cijnxn, где n = X, l=F,
1, åñëè x i  Fj
Cij  
0, åñëè x i  Fj
3. Для каждой вершины графа G = (X,U) по матрице C находим суммы тех
Fj  F, в которые она входит, и записываем произведение этих сумм.
4. Раскрываем скобки по правилам булевой алгебры и выбираем слагаемое,
состоящее из наименьшего числа сомножителей.
Пример: Рассмотрим работу алгоритма минимальной раскраски вершин для
графа [14]:
X1
X2
X7
X4
X3
X6
X5
По методу Магу - Вейссмана для поиска семейства МВУП составим произведение ПG
:
ПG = (X1+X2)(X1+X3)(X2+X3)(X2+X5)(X2+X7)(X3+X5)(X3+X6)(X3+X7)х
х(X4+X5)(X4+X6)(X4+X7)=
(X1+X2X3)x(X2+X3X5X7)(X3+X5X6X7)(X4+X5X6X7)=
(X1X2+X1X3X5X7+X2X3+X2X3X5X7) (X3X4+X3X5X6X7+ +X4X5X6X7+X5X6X7)=
X1X2X3X4+X1X2X5X6X7+X1X3X4X5X7+X1X3X5X6X7+X2X3X4+X2X3X5X6X7.
P1 = X1X2X3X4 поглощается подмножеством P5 = X2X3X4.
Используя условие, что в ПG в качестве сомножителей будут вершины X\Pj,
получаем следующее семейство МВУП:
F={F1,F2,F3,F4,F5};
F1 = X\{X1,X2,X5,X6,X7} = {X3,X4};
F2 = {X2,X6};
F3 = {X2,X4};
F4 = {X1,X5,X6,X7};
F5 = {X1,X4}.
Составляем матрицу C:
X1
X2
X3
X4
X5
X6
X7
F1 F2 F3 F4 F5
1 1
1 1
1
1
1
1
1
1
1
1
Для каждой вершины Xi  X по матрице C составим суммы тех Fj  F, в которые
оно входит,и запишем произведение этих сумм:
ПG=(F4+F5)(F2+F3)F1х(F1+F3+F5)F4х(F2+F4)F4=(F2+F3F4)F1F4=F1F2F4 + F1F3F4.
Каждое из двух полученных слагаемых содержит в неявном виде все вершины графа
G(X,U). Таким образом, для раскраски требуется минимум 3 цвета.
Раскроем слагаемые и удалим дублирующие вершины.
В результате получаем два варианта минимальной раскраски вершин графа:
F1F2F4={X3,X4;X2;X1,X5,X6,X7} или F1F2F4={X3,X4;X2,X6;X1,X5,X7};
F1F3F4={X3;X2,X4;X1,X5,X6,X7} или F1F3F4={X3,X4;X2;X1,X5,X6,X7}.
На рисунке приведен первый вариант раскраски:
X1-кр.
X2-син.
X7-кр.
X4-черн.
X3-черн.
X6-кр.
X5-кр.
2.5.2. Алгоритм раскраски А1.
Данный алгоритм является представителем большой группы эвристических
алгоритмов минимальной раскраски и основан на процедуре упорядочения
вершин. Идея этой эвристики легко раскрывается в следующем пошаговом
описании алгоритма:
1. Составим упорядоченный список вершин графа по убыванию
значений их локальных степеней. Пусть цвет p = 1.
2. Раскрасим первую неокрашенную вершину xi из упорядоченного
списка в цвет p.
3. Просмотрим
все последующие неокрашенные вершины из
упорядоченного списка и раскрасим в цвет p те вершины, которые не
смежны с xi и между собой.
4. Удалим окрашенные вершины вместе с инцидентными им ребрами.
5. Если в упорядоченном списке есть неокрашенные вершины, то
увеличим p=p+1 и переходим к п.2.
Пример: Рассмотрим работу алгоритма А1 для графа [14]:
X1
X2
X7
X4
X3
X6
X5
Определяем локальные степени вершин (xi) :
Xi
(xi)
X1
2
X2
4
X3
5
X4
3
X5
3
X6
2
X7
3
X5
3
X7
3
X1
2
X6
2
Упорядоченный список имеет вид :
Xi
(xi)
X3
5
X2
4
X4
3
Выбираем первую неокрашенную вершину - x3 и раскрашиваем в цвет p = 1.
Далее просматриваем список:
- вершина x2 смежна с x3, пропускаем ее;
- вершину x4 окрашиваем в цвет p=1;
- оставшиеся вершины x5,x7,x1 и x6 смежны x2, пропускаем их.
Удаляем вершины x3 и x4 из графа G :
X2
X1
X6
X7
p=p+1 => p=2; Возвращаемся к п.2.
Выбираем вершину x2 и окрашиваем в цвет p=2. В этот же цвет можно окрасить x6.
Оставшиеся вершины окрашиваются в цвет p=3.
Таким образом, получаем три цвета и следующую раскраску вершин:
X1-кр.
X2-син.
X7-кр.
X4-черн.
X3-черн.
X6-син.
X5-кр.
2.5.3. Алгоритм раскраски А2.
Еще одна эффективная эвристика для минимальной раскраски, основанная на
последовательном удалении вершин из графа:
1. Введем счетчик цветов p и положим: р=1.
2. Определяем локальные степени вершин.
3. Выбираем вершину xi с максимальной локальной степенью и удаляем еe
из графа вместе с инцидентными ребрами.
4. Если множество ребер U  , то переходим к п.3. В противном случае
вершины, которые не удалялись, окрашиваем в цвет p.
5. Если в графе есть неокрашенные вершины, то p=p+1 и переходим к п.2.
Пример [14]:
X1
X2
X7
X4
X3
X6
X5
Установим p=1. Определяем локальные степени вершин:
Xi
(xi)
X1
2
X2
4
X3
5
X4
3
X5
3
X6
2
X7
3
Выбираем и удаляем из графа вершину x3, т.к. (x3)=5 - максимум:
X2
X1
X4
X7
X5
X6
Так как U  , - переходим к п.3.
Выбираем и удаляем вершину x2:
X4
X1
X7
X6
X5
Так как U   , переходим к п.3.
Выбираем и удаляем вершину x4.
Условие U =  выполняется, поэтому в цвет p = 1(красный) окрашиваем все
неудаленные вершины - X1,X5 ,X6,X7.
Так как в графе имеются неокрашенные вершины, то p=2 и переходим к п.2.
Определяем локальные степени вершин:
Xi
(xi)
X2
1
X3
1
X4
0
Выбираем и удаляем вершину x2:
X3
X4
X2
Т.к. U = , то в синий цвет р=2 окрашиваем вершины х3 и х4.
Устанавливаем новый (черный) цвет р:=р+1=3.
Осталась одна вершина x2, окрашиваем ее в черный цвет.
Решение задачи по алгоритму А2 выглядит следующим образом:
X1-кр.
X2-черн.
X7-кр.
X4-син.
X3-син.
X6-кр.
X5-кр.
2.6.
Тема № 6 «Изоморфизм графов». Метод на основе локальных
характеристик вершин.
Два графа G(X,U) и H(Y,R) называются изоморфными, когда существует
отображение t: X Y такое, что для любых вершин xi и xj графа G их образы
t (xi ) и t (xj ) смежны в Н тогда и только тогда, когда xi и xj смежны в G.
Математическая запись для обозначения изоморфизма двух графов: GH.
Из определения изоморфизма двух графов следует, что:
 Изоморфизм – отношение эквивалентности на множестве графов.
 Изоморфные орграфы отличаются лишь обозначением вершин.
 В псевдографах изоморфизм устанавливается с учетом кратности
ребер.
 Для того чтобы два графа были изоморфными необходимо, чтобы
количество вершин и ребер у них совпадало, а также было равное
количество вершин с одинаковыми степенями.
Ниже приведен пример двух изоморфных графов, для которых отображение
t: хi  y i
X1
X2
Y1
X3
Y4
Y6
X4
X5
X6
Граф G(X, U)
Y2
Y3
Y5
Граф H(Y, R)
Метод на основе локальных характеристик вершин
В методе формируются так называемые интегральные характеристики
вершин графов, каждая из которых в рамках принятого исходного множества
локальных характеристик (ЛК) полностью определяет структуру отношений
данной вершины со всеми другими вершинами графа с учетом их локальных
и промежуточных интегральных характеристик. Определение изоморфизма
графов осуществляется на основе анализа процессов обобщения
характеристик, выполняемых одновременно для обоих графов, и
сопоставления вершин с одинаковыми интегральными характеристиками.
Для определения отношений между упорядоченной парой вершин (x i, xj)
псевдографа G=(X,U) введем следующие обозначения:
Eij - число дуг, исходящих из вершины xi и входящих в вершину xj,
причем ij;
Oij - число ребер, связывающих вершины xi и xj,
Zij - число петель при вершине xi.
Обобщенную
количественную
характеристику
отношений
между
упорядоченной парой вершин (xi, xj) определим следующим образом:
 E  10 q
S ij0   ij
 Z ij
ïðè i  j,
ïðè i  j.
(1)
где q - число десятичных разрядов величины Qij; i,j=1, 2, ..., n.
Матрица S0(G) =  S0ij  называется обобщенной матрицей связности.
Каждая i-я строка этой матрицы является ЛХ i-й вершины, определяющей
отношения i-й вершины с другими вершинами графа.
Пусть на графе G определена некоторая функция S0(I), значения которой
представляют собой числа натурального ряда в интервале 1, 2 ,..., n и
кодирует значения совокупности ЛХ вершин множества X. Кодирование
осуществляется последовательно по каждой ЛХ таким образом, что
вершинам с различными значениями ЛХ присваиваются числа из ряда 1, 2
,..., n. Процесс кодирования заканчивается, когда все ЛХ будут перебраны
или когда все вершины графа получат различные кодовые числа. Таким
образом, каждой вершине графа будет поставлено в соответствие некоторое
число s0i функции S0(I), а каждой дуге (xi, xj)  G будет поставлено в
соответствие значение s(1)ij , вычисленное по формуле:
s(1)ij = s0ij * 102*w + s0i *10w + s0j,
(2)
где w - число десятичных разрядов величины n.
Характеристики s(1)ij дуг графа G записываются в S1(G)=  S(1)ij nxn, эту
матрицу назовем характеристической. Вектор-строку s(1)i матрицы S1(G)
будем называть характеристическим вектором вершины xi.
Два характеристических вектора s(1)i и s(1)k вершин хi и xk будем считать
равными s(1)i = s(1)k, если между их элементами s(1)i и s(1)k можно установить
взаимно-однозначное соответствие, т.е справедливо равенство s(1)ij = s(1)kl.
Если в матрице S1(G) имеются совпадающие характеристические векторы, то
делается попытка дифференциации соответствующих вершин путем
построения матриц S2(G),..., Sf(G).
Каждому вектору S(f)i ставится в соответствие интегральная характеристика
s(f)i такая, что при S(f)i = S(f)k, s(f)i = s(f)k. В качестве значений характеристик s(f)i
принимаются числа натурального ряда 1,2,...,n (так же, как и при
кодировании ЛХ). Элементы sfij матрицы Sf(G) определяются по формуле:
sfij = s0ij * 102*w + s(f-1)i * 10w + s(f-1)j
(3)
Построение последовательности матриц заканчивается, если после
очередной f-й итерации обобщения мы получили устойчивые
характеристические матрицы. Если они не совпадают, то графы не
изоморфны. Если совпадают, то тогда возможны следующие варианты:
a) Матрицы не содержат однородных групп (характеристик с
одинаковыми значениями) и множества интегральных характеристик
совпадают. В этом случае графы изоморфны и можно установить
соответствия между вершинами графов. Вершина xi соответствует
вершине yk, если sfi = sfk.
b) Матрицы содержат однородные группы и являются устойчивыми
характеристическими матрицами. При наличии однородных групп
выполняются операции по их дифференциации путем введения
дополнительной локальной характеристики I* для одной вершины xi из
X и последовательно для вершин соответствующей группы в графе H.
Пpоцесс обобщения ЛХ выполняется аналогично рассмотренному ранее.
пересчет величин sfij и sfkl по формуле (2) в этом случае можно выполнить
лишь для строк, соответствующих вершинам однородной группы.
дифференциация вершин оставшихся однородных групп осуществляется
аналогично. Если после введения некоторой группы ЛХ дифференциация
вершин не происходит, то это означает, что имеет место несвязная
однородная группа, которая состоит из нейтральных вершин, либо она
связана с нейтральными вершинами. Соответствия вершин x i и yk данных
групп могут выбираться произвольно.
Описание алгоритма
1. Создаются обобщенные матрицы связности для каждого графа S0(G) и
S0(H) по формуле (1). Каждая i-я строка в матрице S0 является
локальной характеристикой i-й вершины, однозначно определяющей
ее связность со всеми другими вершинами.
2. В каждой строке матриц S0(G) и S0(H) выпишем в отдельные
множества элементы s0ij и s0kl > 0, соответственно, и внутри каждого
множества упорядочиваем элементы по убыванию их значений.
Полученные множества обозначим: S(0)i ={s0ij} для i-й строки графа G
и S(0)k ={s0kl} для k-й строки графа Н. Считаем, что xi и yk имеют
одинаковые ЛХ, если S(0)i = S(0)k. Вершинам xi из X и yk из Y поставим
в соответствие значения s(0)i и s(0)k, представляющие собой числа
натурального ряда так, что: если S(0)i= S(0)k, то s(0)i = s(0)k. На основе
анализа всех ЛХ получим функции S0q(I)={s(0)i} и S0h(I)={s(0)k} .
3. Проанализируем функции S0q(I) и S0h(I). Возможны следующие
результаты:
а) S0q(I)  S0h(I). Вывод: графы не являются изоморфными.
б) S0q(I) = S0h(I). В этом случае возможны два варианта.
Вариант 1: Произошла полная дифференциация вершин, т.е. не
существуют xi и xk для которых si =sk (каждой вершине соответствуют
различные числа). В этом случае графы изоморфны и можно
установить соответствие между вершинами двух графов следующим
образом: xi из X соответствует yk из Y, если s(0)i=s(0)k.
Вариант 2: Не достигнута полная дифференциация вершин, т.е.
существуют вершины xi и xk из множества X, для которых s(0)i=s(0)k.
Переходим к п. 4.
4. Строим матрицы Sf(G) и Sf(H) по формуле (3). На очередной f-й
итерации обобщения характеристик каждому вектору-строке ставится
в соответствие значение интегральной характеристики. Создаются
функции Sf(I) и Sf(H) по аналогии с функциямиS0(G) и S0(H) (см. п. 2).
5. Итерация обобщения характеристик осуществляется до получения
устойчивой характеристической матрицы, т.е. Sf-1(I)=Sf(I). После чего
переходим к п.6 или если Sf-1(I) Sf(I) и не вводилась дополнительная
характеристика, то графы не изоморфны и исследование на
изоморфность прекращается.
6. Если характеристические матрицы не имеют однородных групп, то
графы изоморфны и можно установить соответствие между
вершинами таким образом, что xi соответствует yk, если s(f)i = s(f)k.
Если не произошло дифференциации вершин, то графы также
изоморфны, но для установления соответствия между вершинами
необходимо ввести дополнительную характеристику для одной
вершины xi  X из однородной группы графа G и последовательно для
вершин yk  Y графа H соответствующей группы. Процесс обобщения
после введения дополнительной характеристики выполняется
аналогично рассмотренному ранее методу обобщения. Пересчет Sf*i и
Sf*k по формуле (3) можно выполнить лишь для строк,
соответствующих вершинам однородных групп. Дифференциация
вершин оставшихся однородных групп осуществляется аналогично.
Если
после
введения
дополнительной
характеристики
дифференциации вершин не произошло, то устанавливаем
произвольное соответствие между вершинами данной однородной
группы.
Пример [14]: Даны два графа G и H.
X1
X8
Y3
X2
X7
X3
X4
X6
X5
Граф G
Y2
Y4
Y1
Y5
Y6
Y8
Y7
Граф Н
В таблице 1 представлены результаты работы алгоритма – обобщенные матрицы
связности для трех итераций, выполненных для дифференциации вершин.
Рассмотрим поэтапно построение этой таблицы.
Шаг 0.
Составим обобщенные матрицы связности S0(G) и S0(H) по формуле (1).
Разбиваем вершины на две группы:
 для графа G {x0,x2,x3,x4,x6,x7} -> s(0)i = 1 и {x1,x5} -> s(0)i = 2,
 для графа H {y1,y2,y3,y5,y6,y7} -> s(0)k = 1 и {y0,y4} -> s(0)k = 2.
Функции S0g (I)=(1,2,1,1,1,2,1,1) и S0h (I)=(2,1,1,1,2,1,1,1) совпадают, но они не привели
к полной дифференциации вершин, так как есть вершины с совпадающими
характеристиками.
Шаг 1.
Продолжаем процесс обобщения, но уже по формуле (2). Вторая итерация также не
привела к полной дифференциации вершин. Получены S1i (I) = (1,2,1,3,4,2,3,5) и
S1k (I) = (2,5,1,1,2,3,4,3). Так как S1i (I) = S1k (I), то продолжаем процесс обобщения.
Шаг 2.
После третьей итерации получили устойчивую характеристическую матрицу,
причем все значения в S2 (I) различны. Сравнивая две функции S2i (I) и S2k (I),
получаем таблицу соответствия между вершинами двух графов :
Граф G
Граф H
0
2
1
0
2
3
3
7
4
6
5
4
6
5
7
1
Обобщенные матрицы связности для графов G (слева) и H (справа) для шагов итераций f = 0, 1, 2
Табл. 1
f=0
i\ j
0
1
2
3
4
5
6
7
f=1
0
1
2
3
4
5
6
7
f=2
0
1
2
3
4
5
6
7
0
1
10
10
1
1
1
10
2
10
2
3
4
10
1
10
10
10
1
121
1012
222
1012
121
1021
1011
111
1011
1021
1012
1012
122
111
111
1021
1011
121
112
222
1015
1025
1032
1042
122
135
1013
1034
1042
222
1032
112
222
111
1014
121
1
1
10
1011
1011
122
112
10
10
1
10
1011
1021
1011
1
2
7
10
10
1
1011
122
112
6
10
10
1021
1011
5
1021
1051
1033
153
143
1023
134
1053
S0 i
1
2
1
1
1
2
1
1
S1 i
1
2
1
3
4
2
3
5
S2 i
1
2
3
4
5
6
7
8
k\ j
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
0
1
1
10
2
10
3
1
10
10
1
2
10
10
10
1
6
2
10
1
10
1
10
1
1021
10
10
1021
112
222
1012
1012
121
1021
10
122
1011
111
1011
1011
1021
122
1021
1012
1012
111
111
111
1025
1021
121
1051
1015
112
222
1032
1042
222
1053
153
1014
1013
1021
122
1023
134
135
1011
1011
112
1011
121
10
1
112
1011
121
7
10
10
1011
122
5
1
1
122
4
1042
1032
143
1034
1033
S0 k
2
1
1
1
2
1
1
1
S1 k
2
5
1
1
2
3
4
3
S2 k
2
8
1
3
6
7
5
4
2.7. Тема № 7 «Транспортная задача»
Транспортная задача является классической задачей дискретной математики
в разделе математического программирования (прогнозирования).
Дано: Пусть имеется m пунктов распределения и n пунктов потребления
товара. Количество товара в m пунктах обозначим { ai }, i=1,…,m, а
потребность в данном товаре в n пунктах потребления – { bj }, j=1,…,n.
Стоимость перевозок оценивается расстояниями между i-ым пунктом
поставки и j-ым пунктом потребления и моделируется матрицей стоимости
С={ cij }.
Необходимо: распределить товар из пунктов распределения в пункты
потребления таким образом, чтобы суммарные стоимостные затраты были
минимальными. При этом, необходимым условием является совпадение
спроса на товар с его предложением.
m
min
n
 c
i 1 j 1
n
m
 x
j 1 i 1
ij
ij
xij ;
 ai , xij  b j ;
xij 0, i = 1,...,m; j = 1,...,n,
Решение задачи можно найти за следующие два этапа:
1. поиск опорного плана;
2. поиск оптимального плана на основе опорного.
Для поиска опорного плана (начального решения по распределению товаров
по пунктам потребления) здесь представлены эвристические методы «северозападного угла» и минимальной стоимости, для поиска оптимального плана –
метод потенциалов.
2.7.1. Метод «северо-западного угла»
Данный метод не учитывает стоимость перевозок, а только распределяет
товары таким образом, чтобы весь товар был распределен без остатка по
пунктам потребления. И распределение в этом методе начинается с товаров
1-го пункта распределения и 1-го пункта потребления, т.е. с верхнего левого
угла матрицы. Отсюда и название метода.
Положим x11 = min{a1 ,b1}. Если a1 < b1, то x11 = a1 (это означает, что весь
запас товара из 1-го пункта хранения направляется в 1-ый пункт
потребления). Если b1 < a1 , тогда первый пункт потребления получил
требуемое количество товара, поэтому xij = 0 при i=2,...,m. Оба варианта
представлены ниже.
a1
a2
...
am
b1 b2 ... bn
a1
b1-a1
0
.. 0
0
a2
...
am
b2 .. bn
a1 < b 1
b1
0
...
0
0 b2 ... bn
b1 < a1
a1 -b1
a2
...
am
Далее процесс распределения проходит по аналогии с предыдущим шагом:
 для a1 < b1: рассматривается остаток в 1-ом пункте хранения и он
направляется в оставшиеся пункты потребления, начиная со второго;
 для b1 < a1: в 1-ый пункт направляются товары из других пунктов по
очереди, начиная со второго.
Построение распределения выполняется до тех пор, пока не будут исчерпаны
все пункты распределения и не будут насыщены все пункты потребления.
Пример: Рассмотрим пример с тремя пунктами хранения [15] (m=3) и пятью
пунктами потребления (n=5) однородного товара. Стоимость перевозок, а также
количество товара в пунктах хранения (правый столбец 330+270+350=950) и
потребность
в
нем
в
пунктах
потребления
(нижняя
строка
220+170+210+150+200=950) отображены в следующей матрице:
10
13
26
220
12
22
27
170
24
49
35
210
50
66
67
150
12
320
63
200
330
270
350
b\a
Т.к. b1 < a1, то весь товар для 1-го пункта потребления поступит из 1-го пункта
хранения:
220
0
170
210
150
200
110
270
350
b\a
2-ой пункт потребления с b2= 170 получит товар из 1-го пункта хранения 110 шт. и
2-го пункта хранения в количестве 170 – 110 = 60 шт.:
220
110
60
0
0
210
150
200
0
210
350
b\a
3-тий пункт потребления получит весь остаток товаров из 2-го пункта хранения:
220
0
110
60
210
0
0
150
200
0
0
350
b\a
4-ый и 5-ый пункты потребления поделят между собой товар из 3-го пункта
хранения. Процесс распределения закончен. Получен опорный план перевозок.
220
0
110
60
0
210
0
150
0
200
0
0
0
0
b\a
Стоимость перевозок при таком распределении будет определяться:
С = 220*10 + 110*12 + 60*22 + 210*49 + 150*67 +200*63 = 37 780 ед.
2.7.2. Метод минимальной стоимости
Данный метод в отличие от предыдущего учитывает стоимость перевозок и
распределяет товары по пунктам потребления в порядке, определяемым
минимальной стоимостью перевозок на каждом шаге алгоритма.
1. Выбираем незаполненную клетку с минимальной стоимостью сij.
2. Сравниваем количество груза в ai и потребности bj.
3. Если ai > bj, то в выбранную клетку заносим величину bj, что означает,
что пункт потребления bj мы насытили, а в пункте поставки осталось
груза (ai - bj), j-й столбец вычеркиваем из рассмотрения. Начинаем
просматривать i-ю строку в поисках незаполненной клетки с
минимальной стоимостью. Это клетка со стоимостью cik (пусть j=k).
Переходим к п.2.
4. Если ai = bj, то вычеркиваем i-ю строку и j-й столбец. Это означает, что
пункт потребления bj насыщен, а в пункте потребления ai нет больше
груза. Переходим к п.6.
5. Если ai < bj, то в выбранную клетку заносим ai, т.е. весь груз из пункта
поставки ai распределили в пункт потребления bj. В пункт потребления
bj осталось доставить груз в количестве (bj - ai). Вычеркиваем из
рассмотрения i-ю строку. Начинаем просматривать j-й столбец в
поисках незаполненной клетки с минимальной стоимостью. Это клетка
со стоимостью ckj (пусть i=k). Переходим к п.2.
6. Проверяем, есть ли еще ненасыщенные пункты потребления b j. Если
есть, то переходим к п.1, иначе - заканчиваем процесс построения
опорного плана.
Пример: Рассмотрим данный метод на том же примере, что и в методе «северозападного угла» [15].
10
13
26
220
12
22
27
170
24
49
35
210
50
66
67
150
12
320
63
200
330
270
350
b\a
Выбираем самую дешевую перевозку среди возможных, это – С11 = 10. Выполняем
п. 3 алгоритма:
220
0
170
210
150
200
110
270
350
b\a
Далее опять выбираем самую дешевую перевозку из возможных (на пересечении
строк и столбцов с ненулевыми значениями массивов a и b), это - С12 = 12. Далее
выполняем п. 5 алгоритма и получаем следующий результат:
220
110
0
60
210
150
200
0
270
350
b\a
Теперь самая дешевая перевозка соответствует С22 = 22. Далее по п.3 получим:
220
110
60
0
0
210
150
200
0
210
350
b\a
Теперь самая дешевая перевозка соответствует С33 = 35. Далее по п. 4 получим:
220
0
110
60
0
210
0
150
200
0
210
140
b\a
Теперь самая дешевая перевозка соответствует С35 = 63. Далее по п. 5 получим:
220
0
110
60
0
210
0
150
140
60
0
210
0
b\a
Теперь самая дешевая перевозка соответствует С24 = 66. Далее по п. 3 получим:
220
0
110
60
0
150
210
0
0
140
60
0
60
0
b\a
В итоге получим следующий опорный план перевозок:
220
0
110
60
0
150
210
0
0
60
140
0
0
0
0
b\a
С суммарной оценкой стоимости перевозок:
С= 220*10 + 110*12 + 60*22 + 210*35 + 140*63 +150*66+ 60*320 = 55 110 ед.
2.7.3. Метод потенциалов
Данный метод служит для оптимизации опорного плана. Проверка плана на
оптимальность осуществляется по критерию оптимальности.
Критерий оптимальности:
Для оптимального решения транспортной задачи необходимо и достаточно,
чтобы существовала система чисел Ti и Hj, удовлетворяющая условиям :
Ti + Hj = cij - для занятых клеток;
Ti + Hj cij - для свободных клеток.
(*)
(**)
Здесь:
i - номер пункта поставки;
j - номер пункта потребления;
cij - стоимость перевозки из i-го пункта поставки в j-й пункт потребления;
Ti - потенциал пункта потребления;
Hj - потенциал пункта поставки.
Следствие: Если хотя бы для одной из свободных клеток сумма потенциалов
превосходит соответствующую стоимость, то план не является оптимальным.
Таблица потенциалов строится в соответствии с формулой (**) и Т1=0.
T1 + H1 =10 => H1 =10
T1 + H2 =12 => H1 =12
T2 + H2 =22 => T2 =10
T2 + H3 =49 => H3 =39
T2 + H5 =32 => H5 =22
T3 + H3 =35 => T3 =-4
T3 + H4 =67 => H4 =71
H1 =10
T1 =0 10
00
T2 =10 13
T3 =-4
25
H2 =12
12
10
22
0
27
H3 =39 H4 =71 H5 =22
24
50
42
49
0
35
00
66
67
50
32
00
63
После построения таблицы потенциалов необходимо проверить план на
оптимальность по критерию оптимальности, т.е. должны выполняться
условия (*) и (**). Если условия не выполняются, то необходимо построить
оптимальный план, например, методом потенциалов.
Пример: Составляем цикл перераспределения перевозок следующим образом [15]:
выбираем свободные клетки, для которых не выполняется условие (4) (Ti + Hj >= cij)
и из этих клеток выбираем клетку с max { cij -(Ti+Hj)}. Если их несколько, то
выбираем ту, у которой меньше cij.
Из выбранной клетки прошагаем "шахматной ладьей" по занятым клеткам так,
чтобы вновь вернуться в исходную клетку, причем, после каждого шага надо
поворачивать с горизонтали на вертикаль и наоборот. Исходная клетка помечается
знаком "+". Потом знак клеток будет чередоваться. Вот результат таблицы
потенциалов для нашего примера:
Т1=0
Т2=10
Т3=-4
H1=10 Н2=12 Н3=39 Н4=71 Н5=22
10 - 12
24 + 50
42
200
110
13 + 22 - 49
65
32
60
10
200
25
27 + 35 - 67
63
200
150
Среди вершин с отрицательным знаком выберем клетку с
величине
перевозкой.
В
примере
это
клетка
со
(min{110,150,10}=10).
наименьшей по
стоимостью с 23
Перераспределяем груз в выбранной клетке цикла по cледующему правилу: в
клетках цикла имеющих знак "+" прибавляем тот груз, который находится в
выбранной клетке (т.е. 10 тонн), а в клетках, имеющих знак "-" вычитаем этот груз.
После этого перераспределения строим новую таблицу потенциалов. Проверяем по
критерию оптимальности вновь построенную таблицу потенциалов. Если план
удовлетворяет критерию, то план оптимален, иначе приступаем вновь к
выполнению описанной процедуры.
В результате вычислений получился следующий оптимальный план:
10
150
13
70
25
2.8.
12
30
22
24
27
140
35
210
49
50
150
65
67
42
32
200
63
Тема № 8 «Задача линейного назначения»
2.8.1. Венгерский алгоритм
Данный метод основан на построении системы независимых нулей и состоит
из предварительного этапа и не более (n-2) последовательно повторяющихся
итераций.
Систему нулевых элементов матрицы, обладающую тем свойством, что
никакая пара из них не лежит одновременно в одной строке или одном
столбце, называют системой независимых нулей.
Как только число независимых нулей становится равным n, задача
назначения считается решенной: оптимальный план определяется
местоположением независимых нулей в последней из матриц.
Шаги алгоритма:
1) Произведем предварительные расчеты:
a) В матрице Сn*n находим максимальный элемент dj:
dj = max{cij}, для всех j=1,2, ... ,n.
b) Формируем новую матрицу С'n*n, где с'ij = dj - cij 0; a dj = max { cij } для
всех i=1,..., n. Эта матрица имеет в каждом столбце по крайней мере
один нуль. При этом преобразовании за счет изменения знака
элементов матрицы эффективности переходим к задаче минимизации
целевой функции, оптимальный план которой совпадает с исходной
задачей максимизации.
c) Создаем матрицу C0n*n, где с0ij = cij - ti = -cij + dj - ti, a ti = min {cij} для
всех j=1,...,n.
d) Образуем первоначальную систему независимых нулей. Для этого
отыскиваем и помечаем звездочкой произвольный нуль в первом
столбце матрице С0. Просматриваем элементы второго столбца, и если
обнаруживаем нуль, не лежащий в одной строке с ранее отмеченным
нулем, то его тоже помечаем звездочкой. Такие операции
осуществляем для всех последующих столбцов матрицы. Полученная
система помеченных звездочкой нулей является исходной для
дальнейшего решения.
2) Подсчитываем число (k) независимых нулей полученной матрицы. Если
k=n, то решение получено, в противном случае - переходим к следующему
этапу.
3) Столбцы, содержащие нуль со звездочкой(0*), выделим знаком плюс.
4) Проверяем, есть ли среди невыделенных столбцов матрицы хотя бы один
нуль. Если да, то переходим к п. 5, в противном случае - к п. 6.
5) Проверяем, содержит ли строка с невыделенным нулем также и 0 *. Если
да, то переходим к п. 7, в противном случае - к п. 8.
6) Формируем новые невыделенные нули. Для этого среди невыделенных
элементов матрицы Сk выбираем минимальный и вычитаем его из
элементов, расположенных в невыделенных строках, и прибавляем к
элементам, лежащим в выделенных столбцах. Получаемая матрица Сk'
является эквивалентом матрицы Сk. Переходим к п. 5.
7) Найденный невыделенный нуль отмечаем штрихом (0'), а содержащую
этот нуль строку - знаком "+". Снимаем знак выделения "+" над столбцом,
в котором расположен 0*, лежащий в только что выделенной строке.
Переходим к п. 4.
8) Невыделенный нуль отмечаем штрихом.
9) Подготавливаем информацию для оценки возможности увеличения числа
независимых нулей (0*) в матрице эффективности. Для этого, начиная с 0',
в одной строке с которым нет 0*, осуществляем построение цепочки
элементов матрицы Сk по следующему правилу: выбираем исходный 0', в
цепочку включаем 0*, лежащий с 0' в одном столбце (если такой
найдется). К нему прибавляем опять 0', лежащий в одной строке с
предшествующим 0* и т.д. Построение цепочки по правилу
осуществляется однозначно. Число нулей в такой цепочке всегда нечетно,
причем 0' находятся на нечетных местах, а 0* - на четных. Может
случиться, что в одном столбце с исходным 0' нет 0 *. Тогда цепочка нулей
получается вырожденной и состоит из одного исходного элемента.
10) Меняем знаки у нулей в построенной цепочке, причем звездочки у
нулей уничтожаем, а штрихи заменяем на звездочки. Так как такая
цепочка обязательно должна заканчиваться 0', а число элементов в ней
нечетно, то при замене 0' на 0* происходит увеличение числа последних на
единицу. Возвращаемся к п.2.
Пример: Исходная матрица эффективности С для n=4 [15]:
3
5
7
11
1
4
6
3
5
8
12 7
1
4
3
4
Определяем максимальный элемент в каждом из столбцов матрицы С:
5
8
12
11
Преобразуем матрицу С в матрицу С ' согласно п.1,б) и затем определяем
минимальные элементы в каждой строке полученной матрицы:
2
4
0
4
3
4
0
4
5
6
0
9
0
8
4
7
0
4
0
4
Преобразуем матрицу С ' в матрицу С0 согласно п.1,в) и строим по ней
первоначальную систему независимых нулей согласно п 1,г) :
2
0*
0
0
3
0
0*
0
5
2
0
5
0*
4
4
3
Подсчитываем число (k) полученных независимых нулей в матрице С0.
Так как k=3< n, то переходим к коррекции полученного решения.
Выделим «+» столбцы, содержащие 0*:
+
2
0*
0
0
+
3
0
0*
0
+
0*
4
4
3
5
2
0
5
Не выделен столбец с номером j=3. В этом столбце существует невыделенный нуль.
Переходим к п.5 алгоритма. Строка с невыделенным нулем содержит также и 0*.
Переходим к п.7 алгоритма. Отмечаем невыделенный нуль штрихом. Снимаем знак
выделения над вторым столбцом (j=2). Выделяем 3-ю строку знаком плюс.
Возвращаемся к п.4 алгоритма.
+
2
0*
0
0
3
0
0*
0
5
2
0’
5
+
0*
4
4
3
+
Во 2-м столбце есть еще один невыделенный нуль, он располагается во второй
строке, в которой также имеется 0*. Помечаем этот невыделенный нуль штрихом.
Над первым столбцом снимаем знак выделения.
2
0*
0
0
3
0’
0*
0
5
2
0’
5
+
0*
4
4
3
+
+
Просматриваем нули первого столбца. Элемент с31 = 0 нельзя выделить, так как он
находится в ранее выделенной строке. Поэтому выделяем с41 = 0, помечаем его
штрихом. В 4-й строке нет 0*, поэтому выделение нулей заканчивается:
2
0*
0
0’
3
0’
0*
0
5
2
0’
5
+
0*
4
4
3
+
+
+
Строим цепочку нулей, начиная с последнего выделенного 0'. Это элемент с41.
Включаем в цепочку 0*, расположенный в одном столбце с элементом с41. Это
элемент с21. Далее ищем и включаем в цепочку 0', расположенный в одной строке с
с21 и т.д. В результате образуется цепочка с41 -> с21 -> с22 -> с32 -> с33:
2
0*
3
0’
5
2
+
0*
4
0
0*
0’
4
0’
0
5
3
+
+
+
Изменяем метки у нулей цепочки. Уничтожаем метку «*» у 0*, а 0' меняем на 0*.
Убираем все метки строк и столбцов:
2
0
0
0*
3
0*
0
0
5
2
0*
5
0*
4
4
3
Подсчитываем число независимых нулей k=4=n. Задача решена. Получаем
оптимальный план:
0 0
0
1
Х* =
0 1
0
0
0 0
1
0
1 0
0
0
n
m
F ( x)   cij  xij  1+4+12+11=28
i 1 j 1
2.8.2. Метод на основе принципа максимина
1. Присваиваем s=0, где s - суммарная цена назначения.
2. В каждой строке i матрицы А определяем минимальный элемент аij0,
где j0 - номер столбца, в котором расположен минимальный элемент.
3. В каждом столбце j матрицы А определяем минимальный элемент a i0j,
где i0 - номер строки, в которой находится минимальный элемент.
4. Определяем максимальный элемент ai*j* = max (aij0, ai0j).
5. Элемент ai*j* определяет назначение строки i* столбцу j*. Удаляем
строку i* и столбец j* из матрицы (записываем в них Б -).
6. Определяем s = s + ai*j*.
7. Если удалены все строки и столбцы, то переходим к п.8, в противном
случае - к п.2.
8. Конец алгоритма.
Пример: Рассмотрим в качестве примера следующую матрицу назначений [15]:
С=
5
4
3
4
5
7
11
5
7
5
10
7
6
6
7
3
6
7
10
6
3
3
4
9
5
1-ое назначение:
С=
5
4
3
4
5
7
11
5
7
5
10
7
6
6
7
3
6
7
10
6
3
3
4
9
5
Сi0j
3
5
6
6
3
Сij0
3
3
3
4
5
i0
3
3
3
2
1
Выбран элемент С33, имеющий максимальный минимум (6).
s=s+C33=0+6=6.
2-ое назначение:
Сij0
5
7
3
3
3
4
11
6
3
3
С=
4
7
10 9
4
5
5
6
5
5
Сi0j
3
5
-
6
3
i0
3
3
-
2
1
Выбран элемент С24 = 6.
s=s+C24=6+6=12.
Далее процесс продолжается аналогично.
В результате получим следующий план:
0 0
0
0
1
0 0
0
1
0
X* =
0 0
1
0
0
0 1
0
0
0
1 0
0
0
0
s=6+6+5+7+3=27 (слагаемые соответствуют шагам алгоритма).
j0
5
5
1
1
1
j0
5
5
1
1
2.8.3. Метод на основе принципа минимального риска
1. Устанавливаем суммарную цену s=0.
2. Определяем в каждой строке i два минимальных элемента ai1, аi2 и разность
между ними ai.
3. Определяем в каждом столбце j два минимальных элемента а1j , а2j и
разность между ними aj.
4. Определяем max ( ai, aj) и номер строки (i*) или столбца (j*), в котором
находится
максимальное
значение
разности.
Если ai > aj, то i*=i, а j* выбираем равным адресу столбца, в котором
находится первый минимум строки i*. Если aj > ai, то j*=j, а i* выбираем
равным адресу строки, в которой находится первый минимум столбца j*.
5. Вычисляем s=s+ai*j*. Строка i* назначается столбцу j*. Удаляем строку i* и
столбец j* из матрицы А (записываем Б).
6. Если в матрице есть неудаленные строки, то переходим к п.2, в противном
случае - к п.7.
7. Конец алгоритма.
Пример: Рассмотрим работу алгоритма на том же примере [15], что и в алгоритме на
основе принципа максимина.
Вот как выглядит процедура выбора 1-го назначения.
Сi1
Ci2
Сj
5
7
10 8
3
3
5
2
4
11 7
6
3
3
4
1
С=
3
5
6
7
4
3
4
1
4
7
6
10 9
4
6
2
5
5
7
6
5
5
5
0
С1j
3
5
6
6
3
С2j
4
5
6
6
3
Сj
1
0
0
0
0
Максимальный риск определяется значением 2, что определяет назначение на этом
этапе элемента, соответствующего С15.
s=s+C15= 0+3=3.
После удаления 1-ой строки и 5-го столбца выполняется аналогично процедура
выбора 2-го назначения.
Сi1
Ci2
Сj
4
11 7
6
4
6
2
С=
3
5
6
7
3
5
2
4
7
6
10
4
6
2
5
5
7
6
5
6
1
С1j
3
5
6
6
-
С2j
4
5
7
7
-
с
1
0
1
1
-
И опять риск оценивается значением «два». Выбираем первый по счету вариант
назначения, соответствующий этому значению, а именно: С21=4.
Тогда, s=s+C21= 3+4=7. Далее процесс продолжается аналогично.
В результате получим следующий план:
X* =
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
s=3+4+5+6+4=24 (слагаемые соответствуют шагам алгоритма).
3. Методические указания для подготовки к аттестующим тестам
Цель тестирования – аттестация знаний, полученных на лекциях по двум
основным темам «Дискретной математике»: теории графов и теории
сетей.
a. Тест № 1 «Экстремальные числа графа»
Рассмотрим решение основных задач теста на следующем примере.
Дан неориентированный связный простой (без кратных ребер и петель) граф
G(X,U) на шести вершинах (n=6) и десяти ребрах (m=10), количество
компонент связности p=1.
X1
X6
X5
X4
X2
X3
Цикломатическое число неографа (G) указывает на количество
независимых циклов в графе и определяет сколько ребер надо удалить из
графа, чтобы превратить его в остовное дерево, для несвязного графа с p>1 –
в лес остовных деревьев.
(G) = m(G) – n(G) + p(G) = 10 – 6 + 1 = 5
Следовательно, в данном графе надо удалить 5 ребер. Порядок удаления –
произвольный, но при условии сохранения связности, например, так:
X1
X6
X5
X4
X2
X3
Хроматическое число графа (G) определяет минимальное количество
цветов, которое необходимо при раскраске вершин графа. Так как операция
раскраски вершин помечает одним цветом только несвязанные между собой
вершины, то для данного графа (G) = 4, что соответсвует, например, такой
раскраске вершин:
X1 (желтый)
X6
(зеленый)X5
(красный)
(синий) X4
X2 (красный)
X3 (желтый)
Число внутренней устойчивости (или число независимости, или число
неплотности) графа 0 (G) – это максимальное количество вершин в графе,
не смежных между собой. Другими словами, это число равно мощности
наибольшего внутренне устойчивого множества (НВУМ) вершин в графе.
Для нашего графа поиск НВУМ даст 4-ре решения: {X1,X3}, { X1,X4},
{ X2,X6}, { X5,X6}. Поэтому 0 (G)=2.
Заметим, что между хроматическим числом и числом внутренней
устойчивости есть прямая связь: при минимальной раскраске вершины
НВУМ получат одинаковый цвет.
Число внешней устойчивости (или число вершинного покрытия) 0 (G) –
это минимальное число вершин, образами которых являются все другие
вершины этого графа. Другими словами, это число равно мощности
наименьшего внешне устойчивого множества вершин в графе.
Для нашего графа это множество { X5,X6}, в котором образами вершины Х5
являются вершины Х1, Х2, Х3 и Х4. Поэтому 0 (G)=2.
Кликовое число (или число плотности) графа 0 (G) определяется числом
вершин в наибольшем полном подграфе (НПП), т.е. кликой с максимальным
числом вершин. В нашем графе можно выделить три клики: 4-вершинный
полный подграф на множестве {Х2, Х3, Х4, Х5} и два 3-вершинных полных
подграфа на множествах {Х1, Х2, Х5} и {Х3, Х4, Х6}.
Здесь: НПП – это подграф на множестве {Х2, Х3, Х4, Х5} и 0 (G)=4.
Число паросочетания графа 1 (G) определяется числом ребер в
наибольшем паросочетании графа (паросочетание – это множество
несмежных ребер).
Для нашего примера 1 (G)=3 и определяется
следующим наибольшим паросочетанием (ребра выделены жирными
линиями):
X1
X6
X5
X2
X4
X3
Число реберного покрытия графа 1 (G) определяется числом ребер в
наименьшем реберном покрытии (реберное покрытие – это множество ребер,
которое покрывает все множество вершин этого графа). Учитывая
бинарность графов, следует помнить, что 1 (G)  n/2. Для нашего примера
есть решение, соответствующее минимальной оценке 1 (G) = 3. Это
решение, например, {(X1, X2), (X3, X5), (X4, X6)}.
Метрические характеристики графа определяются понятием расстояния
между вершинами. К таким характеристикам относятся диаметр, радиус и
центр графа.
Расстояние между вершинами Хi и Хj в связном неографе G(X, U)
определяется количеством ребер в минимальном маршруте, связывающем
эти две вершины - d (Xi, Xj).
Диаметр графа d(G) определяется максимальным расстоянием между
вершинами в графе.
Максимальное удаление (или эксцентриситет) от вершины Хi – r(Xi)
определяется максимальным расстоянием этой вершины до любой другой
вершины в графе.
Радиус графа r(G) определяется минимальным эксцентриситетом в этом
графе.
Центр графа – это множество вершин, для которых r(Xi) = r(G).
Для нашего графа определим расстояния между вершинами и их
эксцентриситеты:
Xi
r (Xi)
1
3
2
2
3
2
4
2
5
2
Тогда: d(G) = 3, r(G) = 2.
Центром графа будет множество вершин {Х2, Х3, Х4, Х5}
6
3
b. Тест № 2 «Сети Петри»
Пусть дана сеть Петри
С = <T, P, I, О, 0 >:
t1
p2
t3
t2
p1
p3
t4
T ={t1, t2, t3, t4} – множество переходов, m=4.
P ={p1, p2, p3 } - множество позиций, n=3.
I – входная функция, устанавливающая соответствие T  P.
О - выходная функция, устанавливающая соответствие P  T.
0 = (1,2,0)- вектор начальной маркировки сети С.
Кратность входной позиции pk - это число  ( pk , I( ti )), которое
показывает сколько раз позиция pk встречается в множестве I( ti ), например:
 ( p1 , I( t1)) = 1,  ( p2 , I( t2 )) = 2.
Кратность выходной позиции pk - это число  ( pk , О( ti )), которое
показывает сколько раз позиция pk встречается в множестве О( ti ), например:
 ( p1 , О( t1)) = 1,  ( p2 , О( t2 )) = 0.
Петля – это контур, состоящий из одной и той же позиции p k для события ti.
Для данной сети таким контуром является { (p1 ,t1 ), (t1, p1)}.
Покрывающее дерево – это ориентированное корневое дерево, вершинам
которого соответствуют достижимые из 0 маркировки , а дугами являются
разрешенные переходы ti, определяющие отношения непосредственного
следования:
a [ ti > b ,
где a , b - начало и конец дуги, помеченной символом ti.
Для обозначения расширенной маркировки используем символ «w» и
построим покрывающее дерево для нашей сети Петри:
Корневая вершина
(1, 2, 0)
t1
t2
(1, 3, 0)
(0, 0, 1)
(1, w, 0)
t1
t3
t2
(1, w, 0)
(0, w, 1)
t4
(0, 2, 0)
дублир. вершина
(1, 0, 0)
терм. вершина
t3
(0, w, 0)
терм. вершина
t1
t4
(1, w, 0)
(1, 1, 0)
дублир. вершина
(1, w, 0)
дублир. вершина
На основании построенного покрывающего дерева можно дать следующие
определения для данной сети Петри:
№
1.
свойство
ограниченность
определение
неограниченная
2.
безопасность
небезопасная
3.
сохраняемость
несохраняющаяся
4.
живость
неживая
основание
В
покрывающем
дереве
присутствует w.
Количество маркеров в ряде
позиций превышает k=1.
Нет такого целого числа,
которому бы равнялость
общее количество маркеров.
В
покрывающем
дереве
присутствуют терминальные
вершины, соответствующие
тупиковым маркировкам.
ЛИТЕРАТУРА
1. Аоки М. Введение в методы оптимизации. - М.: Наука, 1977.
2. Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ Вычислительных
алгоритмов: Перевод с англ. - М.: Мир, 1979. - 536с.
3. Ашманов С.А. Линейное программирование. - М.: Наука, 1981.
4. Горбатов В.А. Основы дискретной математики: Учебн. пособие для студентов
вузов. - М.: Высш.шк., 1986. - 311с., ил.
5. Емеличев В.А., Мельников О.И.,Сарванов В.И., Тышкевич Р.И. Лекции по теории
графов - М.: Наука.Гл.ред.физ.-мат. лит., 1990. - 384с.
6. Зыков А.А. Теория конечных графов. - Новосибирск: Наука, Сибирское отд-ние,
1969. - 543с.
7. Котов В. Е. Сети Петри. – М.: Наука. Гл.ред.физ.-мат. лит., 1984. - 158с.
8. Кристофедис Н. Теория графов. Алгоритмический подход: Перевод с англ. - М.:
Мир, 1988 - 432с.
9. Майника Э. Алгоритмы оптимизации на сетях и графах: Пер. с англ. - М.: Мир,
1981. - 323с.
10. Нефедов В.Н., Осипова В.А. Курс дискретной математики : Учеб. пособие. - М.:
Изд-во МАИ, 1992. - 264с.: ил.
11. Новиков Ф.А. Дискретная математика для программиста. / Учебник для вузов.
СПб: Питер, 2004. – 301с.: ил.
12. Оре О. Теория графов. - 2-ое изд. - М.: Наука, Главная редакция физикоматематической литературы, 1980, 336с.
13. Рейнгольд Э., Нивергельт Ю., Део Н. Комбинаторные алгоритмы. Теория и
практика: Пер. с англ. - М.: Мар, 1980. - 476с.
14. Методы решения оптимизационно-графовых задач в САПР: Методические
указания к лабораторным и индивидуальным работам по дисциплине
«Математическое обеспечение САПР». Пенза 1995.
15. Методы решения задач математического программирования: Методические
указания к лабораторным и индивидуальным работам по дисциплине
«Оптимизация САПР». Пенза 1995.
Download