Научная статья на тему 'Реализация волнового алгоритма для определения кратчайшего маршрута на плоскости при моделировании трасс с препятствиями'

Реализация волнового алгоритма для определения кратчайшего маршрута на плоскости при моделировании трасс с препятствиями Текст научной статьи по специальности «Математика»

CC BY
1638
377
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ / ТРАССИРОВКА МАРШРУТОВ / MATHEMATICAL MODELING / TRACKING OF ROUTS

Аннотация научной статьи по математике, автор научной работы — Козадаев Алексей Сергеевич, Дубовицкий Евгений Владимирович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

REALIZATION OF WAVE ALGORITHM FOR DETERMINATION OF SHORTEST ROUTE ON PLATITUDE AT MODELING OF TRACKS WITH OBSTACLES

The article describes the program realization of wave algorithm for tracking of routs and calculation experiments with use of developed software.

Текст научной работы на тему «Реализация волнового алгоритма для определения кратчайшего маршрута на плоскости при моделировании трасс с препятствиями»

УДК 519.95

РЕАЛИЗАЦИЯ ВОЛНОВОГО АЛГОРИТМА ДЛЯ ОПРЕДЕЛЕНИЯ КРАТЧАЙШЕГО МАРШРУТА НА ПЛОСКОСТИ ПРИ МОДЕЛИРОВАНИИ ТРАСС С ПРЕПЯТСТВИЯМИ

© А.С. Козадаев, Е.В. Дубовицкий

Ключевые слова: математическое моделирование; трассировка маршрутов.

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

ВВЕДЕНИЕ

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

ПОСТАНОВКА ЗАДАЧИ И РАЗНОВИДНОСТИ МЕТОДА

На двумерной клетчатой карте (матрице), состоящей из «проходимых» и «непроходимых» клеток, обозначена клетка старта и клетка финиша. Цель алгоритма - проложить кратчайший путь от клетки старта к клетке финиша, если это возможно. От старта во все направления распространяется волна, причем каждая пройденная волной клетка помечается как «пройденная». Волна, в свою очередь, не может проходить через клетки, помеченные как «пройденные» или «непроходимые». Волна движется, пока не достигнет точки финиша или пока не останется клеток, которых волна не прошла. Если волна прошла все доступные клетки, но так и не достигла клетки финиша, значит путь от старта до финиша проложить невозможно. После достижения волной финиша прокладывается путь и сохраняется в массиве (по координатам пройденных клеток на плоскости).

Волновой метод позволяет осуществлять поиск пути по четырем (алгоритм Ли) либо по восьми направлениям. Вторая разновидность позволяет найти более короткий путь с наименьшими потерями, если взять критерий минимальной длины проводника за критерий трассировки. Исходя из этого выбираем вторую разновидность метода.

Введем допущение - клетки исходной матрицы зададим квадратными. Так как путь по диагонали длиннее пути по горизонтали или вертикали, то необходимо чтобы волна задерживалась на этом отрезке дольше, для этого в алгоритм вводятся коэффициенты, показывающие, насколько дольше волна проходит участок трассы. Исходя из известного соотношения сторон квадрата и его диагонали, введем коэффициент, равный 2/3.

1926

і+2 і+3 і+2 і+3

і+2 2 •І 2 •І і і+2

і+2 і+3 і+2 і+3

Рис. 1. Разновидности волнового метода ОПИСАНИЕ МЕТОДА

В нашем случае из конечного элемента волна распространяется в 8-ми направлениях. Элемент, в который пришла волна, образует фронт волны (рис. 2). На рисунках цифрами обозначены номера фронтов волны.

3 2 3

2 А 2

3 2 3

Рис. 2. Первый фронт волны

Каждый элемент первого фронта волны является источником вторичной волны (рис. 3). Элементы второго фронта волны генерируют волну третьего фронта и т. д. Процесс продолжается до тех пор, пока не будет достигнут начальный элемент.

6 5 4 5 6

5 3 2 3 5

4 2 А 2 4

5 3 2 3 5

6 5 4 5 6

Рис. 3. Третий фронт волны

На втором этапе строится сама трасса. Её построение осуществляется в соответствии со следующими правилами:

- движение при построении трассы осуществляется в соответствии с выбранными приоритетами;

- при движении от начального элемента к конечному элементу номера фронта волны должны уменьшаться.

На рис. 4 приведен пример использования волнового алгоритма при прохождении лабиринта.

Красным цветом отмечены запрещенные элементы. Серым цветом - трасса после действия алгоритма. А - начальная точка (старт), В - конечная точка (финиш). Приоритеты движения влево, вправо, вверх, вниз. Построение трассы ведется от начальной точки к конечной точке. Приоритетные направления показаны стрелками.

1927

7 6 8 13

6 е 7 13 12 В

3 4 8 11 13

1 2 3 9 8 10 11 12

А 4 7 8 9 10 11

1 2 3 4 5 6 7 12

2 4 7 8 9 10 11

5 6 8 12

10 6 7 8 9 10 11 12

9 8 7 11 12

| -"непроходимые" элементы U - трасса после прохождения U -клетки, допускающие трассу

Рис. 4. Пример использования алгоритма РЕАЛИЗАЦИЯ АЛГОРИТМА МЕТОДА

Исходя из сути волнового метода, был построен алгоритм.

1. Сначала необходимо создать рабочий массив R(MxN), равный по размеру массиву игрового поля P(MxN).

2. Каждому элементу рабочего массива R(i, j) присваивается некоторое значение в зависимости от свойств элемента игрового поля P(i, j) по следующим правилам:

a. Если поле P(i ,j) непроходимо, то R(i, j):=MxN+2;

b. Если поле P(i, j) проходимо, то R(i ,j): =MxN+1;

c. Если поле P(i,j) является целевой (финишной) позицией, то R(i,j):=0;

d. Если поле P(i, j) является стартовой позицией, то R(i,j):=MxN.

3. Этап распространения волны. Вводим переменную Ni, счётчик итераций, и присваиваем ей начальное значение 0.

4. Вводим константу Nk, которую устанавливаем равной максимально возможному числу итераций.

5. Построчно просматриваем рабочий массив R.

6. Если R(i, j) равен Ni, то просматриваются соседние элементы по следующему правилу (в качестве примера рассмотрим R(i+1,j)):

a. Если R(i+1, j) непроходимо, то переходим к пункту 10;

b. Если R(i+1, j) проходимо, выполняется присваивание R(i+1,j): =Ni+1;

c. Во всех остальных случаях R(i+1, j) остается без изменений.

7. Аналогично поступаем с остальными элементами.

8. По завершению построчного просмотра всего массива увеличиваем Ni на 1.

9. Если Ni > Nk, то поиск маршрута признаётся неудачным. Выход из программы.

10. Переходим к пункту 5.

11. Этап построения маршрута перемещения. Присваиваем переменным Х и Y значения координат стартовой позиции.

12. В окрестности позиции R(X,Y) ищем элемент с наименьшим значением (т. е. для этого просматриваем R(X+1, Y), R(X-1, Y), R(X, Y+1), R(X, Y-1)). Координаты этого элемента заносим в переменные X1 и Y1.

13. Совершаем перемещение по игровому полю из позиции [X, Y] в позицию [X1, Y1 ].

14. Если R(X1, Y1) = 0, то переходим к пункту 15.

15. Выполняем присваиваниеX:=X1, Y:=Y1. Переходим к пункту 11.

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

На блок-схеме (рис. 5):

- массив Points - массив координат начальных и конечных точек;

- Way - процедура проведения пути;

1928

- Nik - переменная, отвечающая за остановку алгоритма в случае, если путь невозможно проложить при данных условиях.

Процедура Way отвечает в основном за графический вывод трассы.

1929

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ И ДЕМОНСТРАЦИЯ РЕЗУЛЬТАТОВ ВЫЧИСЛИТЕЛЬНЫХ ЭКСПЕРИМЕНТОВ

В программе имеется возможность задать ширину и высоту поля. Размер ячейки не меняется и равен 10x10 пикселей. Кнопка «Перестроить поле» очищает рабочий массив и графическое поле вывода трассы.

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

После выполнения трассировки получим маршруты 1-3 и 2-4 (рис. 6б).

1930

а)

Рис. 6. Выполнение трассировки

Для демонстрации возможностей алгоритма усложним задачу, построив лабиринт с несколькими возможными трассами различной длины (рис. 7).

б)

Рис. 7. Прохождение лабиринта ВЫВОД

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

ЛИТЕРАТУРА

1. Стешенко В.Б. P-CAD Технология проектирования печатных плат. СПб.: БХВ-Петербург, 2003.

2. Волновой алгоритм - построение кратчайшего маршрута. Сайт CodeNet. URL: http://www.codenet.ruy progr/alg/way.php. Загл. с экрана.

Поступила в редакцию 20 августа 2010 г.

Kozadayev A.S., Dubovitskiy Ye.V. Realization of wave algorithm for determination of shortest route on platitude at modeling of tracks with obstacles

The article describes the program realization of wave algorithm for tracking of routs and calculation experiments with use of developed software.

Key words: mathematical modeling; tracking of routs.

1931

i Надоели баннеры? Вы всегда можете отключить рекламу.