Математическая формулировка задачи. Цель работы – исследовать эффективность алгоритма трассировки соединений в жгуты; освоить особенности алгоритмизации и программирова-ния задачи трассировки
ЛАБОРАТОРНАЯ РАБОТА №6
ИССЛЕДОВАНИЕ ЭФФЕКТИВНОСТИ АЛГОРИТМА
ТРАССИРОВКИ ПРОВОДОВ В ЖГУТЫ
Цель работы – исследовать эффективность алгоритма трассировки соединений в жгуты; освоить особенности алгоритмизации и программирова-ния задачи трассировки проводов на современных ПЭВМ алгоритмом Форда-Фалкерсона; приобрести навыки построения математических моделей провод-ных соединений, реализации и исследования их при решении задачи трассиров-ки с применением САПР.
ЗАДАЧА О МАКСИМАЛЬНОМ ПОТОКЕ
Одной из наиболее интересных и важных задач теории графов является задача определения максимального потока, протекающего от некоторой вершины s (источника) графа к некоторой конечной вершине t (стоку). При этом каждой дуге графа G приписывается некоторая пропускная способность
, определяющая наибольшее значение потока, который может протекать по данной дуге [8, 9].
Метод решения задачи о максимальном потоке был предложен в 1962 г. американскими учеными Фордом и Фалкерсоном. Предложенная «техника пометок» составляет основу других алгоритмов решения многочисленных задач, являющихся простыми обобщениями или расширениями указанной задачи.
Эта задача и ее варианты часто возникают на практике. При конструирова-нии РЭС с ней сталкиваются при проектировании жгутового монтажа, при канальной трассировке печатных и пленочных соединений [1, 2, 4].
В этом случае проводники укладываются в нормализованные каналы, расположенные в монтажном пространстве узлов во взаимно перпендикулярных направлениях (рис. 6.1, а).
Рис. 6.1.
Математическая формулировка задачи
Канальную конструкцию подобного типа можно представить в виде ортого-нальной несимметрической сети (графа ) с множеством узлов (вершин) A и множеством дуг (ребер) B (рис. 6.1, б). Каждой дуге (ребру)
, соединяющей вершины
, приписывается некоторое число
. Оно соответствует, например, максимальному числу проводников, укладываемых на участке, моделируемом дугой (ребром)
. Величина
называется пропускной способностью дуги (ребра)
. Множества текущих чисел
, определенных на дугах
, называют потоками по дуге или дуговыми потоками. Дуговой поток
изменяется в пределах:
. (6.1)
Множество вершин A разобьем на подмножества:
AS – источники, вершины из которых выходят дуги;
AT – стоки, вершины в которые входят дуги;
AP – промежуточные вершины, через которые проходит поток.
Тогда для любой вершины графа
должно выполняться условие:
(6.2)
Здесь .
Первая сумма – число дуг (ребер), ведущих в узел , вторая сумма – число дуг (ребер), выходящих из узла. Следовательно, в каждую вершину
, кроме источников и стоков, входит такое же количество потока, какое из него выходит. Поэтому полный поток из источника
в сток
будет
. (6.3)
Поскольку пропускные способности дуг (ребер) ограничены, то задача сводится к поиску такого максимального потока в графе, при котором достигается максимум функции (6.3) при ограничениях (6.1) и (6.2). Поскольку
и
– целые числа, то задача сводится к задаче линейного целочисленного программирования.
Алгоритм Форда-Фалкерсона
Метод заключается в поиске возможных путей из AS в AT, увеличивающих поток. За начальный выбирается любой произвольный поток в графе, в частности нулевой.
Поиск выполняют в два этапа.
На первом этапе вершинам присваивают специальные пометки, указываю-щие направление возможного увеличения отдельных дуговых потоков; на втором – производят изменение потока в графе.
Рассмотрим работу алгоритма на примере графа с одним источником aS и одним стоком at, обобщив затем его для задач с несколькими AS и AT.
Расстановка меток
На первом этапе каждая вершина графа находится в одном из трех состояний: «не помечена», «помечена, но не просмотрена», «помечена и просмотрена».
Пометка любой вершины графа aj состоит из двух частей: первая часть указывает индекс вершины, из которой можно послать поток в рассматривае-мую aj, вторая – максимальную величину, на которую можно увеличить поток из aS в aj без нарушения ограничений на пропускные способности дуг. Сначала все вершины не помечены.
Пометки расставляют, начиная с источника aS, который получает пометку , что, указывает на возможность посылки неограниченного сверху потока из aS в aj. Вершина aS считается помеченной, но не просмотренной.
Пусть имеется некоторая помеченная, но не просмотренная вершина aj, имеющая пометку или
. Знак в первой части пометки указыва-ет направление дугового потока: если
– приращение потока в дуге bij совпадает на втором этапе с направлением первоначального потока дуги, если
– приращение потока в дуге bij на втором этапе, противоположное направлению первоначального потока. Из множества соседних с aj вершин Гaj выделим подмножество AK непомеченных вершин, для которых дуговой поток
меньше пропускной способности
. Припишем каждой соседней вершине
пометку
, где
.
Выделим подмножество непомеченных вершин, для которых
, то есть поток «идет» в противоположном направлении.
Припишем каждой последующей соседней вершине пометку
, где
. В результате все соседние с aj верши-ны, которые могут получить пометки, оказываются помеченными, но не про-смотренными. А вершина aj – помеченной и просмотренной.
Продолжаем приписывать пометки вершинам соседним с помеченными и не просмотренными узлами, до тех пор, пока либо сток aT не будет помечен, либо не будет ни одной вершины, которая могла бы быть помечена, и сток aT окажет-ся без пометки. Если aT не получает пометки, то дальнейшее увеличение потока в сети невозможно, то есть исходный поток максимален. Иначе переходим ко второму этапу – изменению потока в сети.
Увеличение потока
Пусть по результатам первого этапа сток aT получил метку . В этом случае заменяем
на
. Если же сток получит пометку
, то
заменяем
.
Переходим к предыдущей вершине aP. Если она имеет пометку , то
заменяем на
. Переходим к вершине aj и т. д.
Процесс изменения потока продолжается до прихода в источник aS. После этого все старые пометки стираются, и делается попытка вновь увеличить поток в графе (переходим к первому этапу алгоритма).
АЛГОРИТМ
· Расстановка пометок
1. Присвоить вершине S (источнику) пометку . Вершине S при-своена пометка и она просмотрена, все остальные вершины без пометок.
2. Взять некоторую непросмотренную вершину ai с пометкой; пусть ее пометка будет .
а) Каждой непомеченной вершине , для которой
, присвоить
, где
.
б) Каждой непомеченной вершине , для которой
, присвоить пометку
, где
.
Теперь вершина ai и помечена, и просмотрена, а вершины aj, пометки которым присвоены в а) и б), являются непросмотренными. Обозначить, что вершина ai просмотрена.
3. Повторить 2 до тех пор, пока либо сток T будет помечен, и тогда перейти к 4, либо T не будет помечен и никаких других пометок нельзя будет расставить. В этом случае алгоритм заканчивает работу с максимальным вектором потока X. Идти к 7.
· Увеличение потока
4. Положить и идти к 5.
5. а) Если пометка в вершине aj имеет вид , то изменить поток вдоль дуги biT с xiT на
.
б) Если пометка в вершине aj имеет вид , то изменить поток вдоль дуги biT с xiT на
.
6. Если , то стереть все пометки и вернуться к шагу 1, чтобы вновь начать расставлять пометки, но используя уже улучшенный поток, найденный на шаге 5. Если
, то взять
и вернуться к шагу 5.
· Конец работы алгоритма.
ПРИМЕР 6.1
Дана конструкция узла РЭС с нормализованными каналами для укладки жгутов (рис.6.2). В точках S и T узла размещено по разъему. Известны диаметры всех каналов (см. рис.6.2) и сечения укладываемых проводов – 1 мм2. Требуется уложить максимально возможное количество проводов в жгут между этими разъемами, учитывая размеры каналов и сечения проводов.
Рис.6.2.
Решение
Задачу можно свести к поиску максимального потока в графе, моделирую-щем конструкцию узла. Для этого конструкцию представим в виде графа (рис.6.3), в котором узлы заданы вершинами, а каналы – ребрами между соот-ветствующими вершинами. Для работы по алгоритму Форда-Фалкерсона необходимо задать пропускные способности ребер. Для этого необходимо соответствующие диаметры каналов разделить на сечение провода. Так ,
,
,
,
,
,
. Поскольку в начальный момент в каналы не уложено ни одного провода, потоки по дугам пока равны нулю –
. Данную информацию запишем в виде двух чисел над ребрами: первое число – пропускная способность ребра, второе – поток по нему (см. рис.6.3).
Рис.6.3.
· Расстановка меток
Присваиваем вершине aS пометку . Вершина aS имеет две смежные вершины,
и
. Рассмотрим смежные вершины в порядке возрастания их номеров. Сначала
. Она получает пометку
, поскольку
и
.
Теперь . У нее метка будет
, поскольку
и
. После этого вершина
стала «помеченной и просмотренной», а вершины
и
– «помеченными, но не просмотрен-ными».
У вершины смежные
и
, а у
–
,
и
. Снова будем рассмат-ривать вершины в порядке возрастания их номеров. Сначала вершина
. Будем пытаться расставлять метки смежным с ней вершинам. У
метка уже есть –
. Попытаемся пометить
. Поскольку
, вершину
можно пометить через
. Метка будет
. Где «1» – это номер вершины
, «+» – т. к. в направлении рассмотрения от
к
возможно увеличение потока и “2” – это минимальное число из
. Все смежные с
вершины помечены.
Рассмотрим теперь вершины, смежные . Из них
и
уже имеют метки, поэтому через
пометим только
. У нее метка будет
, поскольку
и
. Все смежные с
вершины также помечены. Следовательно,
и
«помечены и просмотрены».
· Переходим к вершине .
Смежные с ней вершины и
уже помечены, поэтому попытаемся поме-тить оставшуюся вершину
– сток.
Поскольку разность положительное число, сток
можно пометить следующим образом:
. Здесь «3» – номер вершины, «2» – это
. Исходный граф с помеченными верши-нами приведен на рис.6.4.
· Увеличение потока.
Поскольку сток имеет пометку
, то увеличиваем
на две единицы. В результате получаем
. Переходим к узлу
, пометка которого
. Увеличиваем
также на 2. Получаем
. Переходим к узлу
, имеющему метку
. Также увеличивается поток по дуге
на две единицы, и получаем
. Граф с измененным по нему потоком указан на рис.6.5. После этого стираем все метки при вершинах и меняем текущие потоки по дугам
,
и
. Попытаемся вновь увеличить поток в графе.
· Увеличение потока.
Вершина вновь получает метку
. Смежную с ней вершину
пометить не удается, т. к.
. У вершины
, как и прежде, метка будет
. Поскольку
метки не получила, рассматриваем
. Смежные с ней вершины
и
. Вершина
получает метку
, так как
и
. Вершина
, как и на предыдущем шаге, получает метку
. Все смежные с
вершины помечены.
Рис.6.4. Рис.6.5.
Далее в порядке возрастания номеров перейдем к вершине . Она имеет две смежных вершины –
и
. Присвоим им метки:
получит
, « 3 » – это номер вершины
, « – » – потому что поток
направлен в направлении противоположном порядку рассмотрения вершин – от
к
. Величина второго числа метки в данном случае
.
Следующей является вершина . Ее метка будет
. Здесь второе число метки
. Граф с помеченными вершинами приведен на рис.6.6.
Рис.6.6. Рис.6.7.
· Обратный ход алгоритма.
В связи с тем, что сток получил метку, переходим к обратному ходу алго-ритма. Метка у
-
, поэтому
. Переходим к
с меткой
. Увеличим
на две единицы:
. Переходим к вершине
. Здесь метка
. Казалось бы, поток
надо увеличить на 4 единицы. Но тогда поток в 2 единицы окажется «зависшим» в вершине
. Поэтому поток
– из S в вершину 2 увеличиваем на величину, равную
;
. Получившийся поток показан на рис. 6.7.
Вновь стираем все метки при вершинах и попытаемся еще увеличить поток в графе. Расставляя аналогичным методом метки, получим результат, представ-ленный на рис.6.8. После обратного хода алгоритма окончательный граф с измененным потоком показан на рис.6.9. Повторная расстановка меток уже не приводит к пометке стока , т. к. ни одна из соседних с
вершин не может быть помечена. Следовательно, максимальный поток в графе
.
Рис.6.8. Рис.6.9.
Вернемся теперь к задаче укладки проводов в жгуты. В рассмотренную кон-струкцию узла (рис.6.2) можно уложить жгут максимум из шести проводов (рис.6.10).
Рис.6.10. Рис.6.11.
Метод расстановки пометок позволяет учитывать целый ряд дополнитель-ных требований к трассировке проводных соединений [2]. Например, для учета ограничений на максимальную длину отдельных проводников можно в про-цессе расстановки пометок вводить информацию об удаленности узлов от источника. В этом случае трассы, к длине которых предъявляются особые требования, прокладывают в первую очередь и они проходят через узлы, расстояние которых до источника меньше предельного. После их фиксации осуществляют разводку остальных проводников.
Если в графе несколько источников и стоков, то при отсутствии ограничения на прохождение потоков из отдельно взятых источников в строго определенные стоки задача сводится к задаче с одним источником и стоком. Для этого вводят искус-ственные источник S и сток T (рис.6.11).
Между ними и реальными источниками Si и стоками Tj проводят дуги.
Пропускные способности дуг от S к Si можно выбрать равными бесконеч-ности или, если пропускная способность дуги от Sk ограничена, то и у дуги SSk она может равняться этой границе. Аналогичным образом поступают и с дугами от стоков Tj к искусственному стоку T.
ДОМАШНЕЕ ЗАДАНИЕ
2.1. Ознакомиться с методами решения задачи трассировки проводных соединений жгутовым монтажом.
2.2. Изучить алгоритм укладки проводов в жгуты (Форда-Фалкерсона).
2.3. Подготовить данные к эксперименту.
2.4. Выполнить трассировку проводов в жгуты по алгоритму Форда-Фалкерсона «вручную».
ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ
3.1. Порядок работы с программой «PCPROV» в режиме раскладки проводов в жгуты
Алгоритм трассировки проводов в жгуты реализован в учебной САПР PSAPRна ПЭВМ программой «Трассировка проводов» (режим алгоритм Форда-Фалкерсона). Программа позволяет:
- определять максимально возможное число проводов, которые можно уложить в заданное монтажное пространство;
- при укладке проводов учитывается пропускная способность каналов, в которые укладываются проводники.
Для запуска программы «Трассировка проводов» установить курсор на окно с этим названием (оно будет в зелёной рамке) и нажать Enter. Появится рабочее поле графического редактора «Трассировка проводов». Выбрать алгоритм Форда-Фалкерсона (рис.6.12).
![]() |
Рис.6.12
Программа, реализующая этот алгоритм, позволяет находить такое распре-деление проводов в каналы, при котором общее число проводов в жгуте будет максимальным.
· Экспериментальная часть.
1. Получить у преподавателя технические условия на проектирование жгутового монтажа.
2. Для заданного варианта электрических соединений (число проводов между контактами) и монтажного пространства (каналов в блоках) установить источник S и сток T. Для этого указать курсором точку на дискретном поле и нажать клавишу S. Это будет источник. Затем указать другую точку поля и нажать клавишу T –сток. После этого задать на дугах пропускные способности (цифрой 1 и потоки по дугам – цифрой 2) (рис.6.13).
![]() |
Рис.6.13
3. Для заданной сети рассчитать максимальный поток по программе. Нажать клавишу Enter. На экране появится результат (рис.6.14).
4. Для заданной сети рассчитать максимальный поток вручную.
5. Начертить эскизы раскладки проводов в жгуты.
6. Оценить результаты трассировки проводов в жгуты по всем критериям и
проанализировать возможность “ручной” доработки полученного результата
или повторного решения с уточненными требованиями к трассировке.
7. Эффективность алгоритма трассировки проводов в жгуты оценить с точки зрения требований к математическому обеспечению САПР.
СОДЕРЖАНИЕ ОТЧЕТА
4.1. Цель работы.
4.2. Сведения из теории. Задача трассировки проводов в жгуты и ее матема-
тическая формулировка.
4.3. Графическое изображение на плоскости в декартовой системе координат множества контактов, подлежащих соединению.
![]() |
Рис.6.14
4.4. Условия трассировки проводов в жгуты.
4.5. Графовая модель соединяемых контактов, необходимая для работы алгоритма Форда-Фалкерсона.
4.6. Результаты ручного и машинного расчётов максимального потока.
4.7. Эскиз (распечатка) результатов решения задачи раскладки проводов в жгуты.
4.8. Выводы.
КОНТРОЛЬНЫЕ ВОПРОСЫ
5.1. Сформулируйте цели задачи трассировки проводов в жгуты.
5.2. Как формулируется задача трассировки проводов в жгуты в терминах теории графов?
5.3. В чем суть алгоритма трассировки проводов в жгуты?
5.4. Каким образом можно оценить качество жгутового монтажа?
5.5. Перечислите последовательность действий алгоритма Форда-Фалкерсона.
5.6. Каким образом формулируется задача поиска максимального потока при нескольких источниках и стоках?
5.7. Назовите достоинства и недостатки алгоритма с позиций трассировки
проводов.
5.8. Поясните порядок работы с программой.