Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Копия в рио.doc
Скачиваний:
14
Добавлен:
09.11.2019
Размер:
9.1 Mб
Скачать

Библиографический список

1. Батищев, Д. И. Генетические алгоритмы решения экстремальных задач / Под ред. Львовича Я.Е.: Учеб. пособие. Воронеж, 1995.

2. Лопатин П.К., Бинчуров И.М. Егоров А.С., Применение в точном алгоритме управления манипуляционными роботами в неизвестной среде алгоритмов фронта распространения волны и полиномиальной аппроксимации// Молодежь и наука – третье тысячелетие: Сб.материалов Всероссийской научной конференции студентов, аспирантов и молодых ученых/ Сост. В.В.Сувейзда.; КРО НС «Интеграция», - Красноярск, 2007. – (557с.) с.399-404.

3.6.6. Диаграммы вороного

Подход на основе диаграмм Вороного [1, 3] предполагает обход запрещённых точек на некотором удалении от них, что может повысить вероятность решения задачи планирования пути в среде с известными запрещёнными состояниями.

Пусть в пространстве конфигураций имеются запрещённые ячейки p1, p2, …, pM, которые соответствуют препятствиям в рабочей зоне манипулятора. Необходимо найти путь в пространстве обобщённых координат, который бы соединял заданные начальную точку q0 и целевую точку qT. Путь должен представлять собой последовательность ячеек, соседние элементы которой отличаются не более чем на один шаг по каждой координате. Ни одна из ячеек пути не должна быть запрещённой и выходить за границы, заданные векторами qL (нижние ограничения) и qH (верхние ограничения).

Рисунок 3.15. Пространство конфигураций (двумерный случай).

Построение диаграммы Вороного

Диаграмма Вороного конечного множества точек P = {p1, p2, …, pM} представляет собой такое разбиение пространства, при котором каждая область этого разбиения образует множество точек, более близких к одному из элементов множества P, чем к любому другому элементу множества (рис. 3.16).

Рассмотрим область с центром в pi (i = 1, 2, …, M). Множество точек q* области описываются системой неравенств

D(q*, pi) ≤ D(q*, pj)  j = 1, 2, …, M, ji,

где D(q1, q2) = – квадрат расстояния между точками q1 и q2.

После преобразования неравенства системы примут вид

. (3.124)

Добавим в систему ограничения на q* в виде неравенств

­ (3.125)

Рисунок 3.16. Диаграмма Вороного

Таким образом, каждая область диаграммы Вороного описывается системой линейных неравенств, задающих полупространства, и представляет собой многогранник, образованный пересечением этих полупространств (многогранник решений системы). Заметим, что точки, в которых одно или несколько неравенств системы обращаются в равенства, находятся на одинаковом удалении как от точки pi, так и от всех точек pj, соответствующих этим неравенствам, и лежат на пересечении соответствующих гиперплоскостей (или на гиперплоскости, если такое неравенство одно). Если какая-то точка обращает в равенство n линейно независимых неравенств системы, она является вершиной многогранника решений. Вершины многогранника совпадают с фундаментальными решениями системы неравенств. Множество точек, обращающих в равенство n-1 каких-то линейно независимых неравенств системы, являются ребром многогранника решений (ребром диаграммы Вороного). Для отыскания многогранника решений (области диаграммы Вороного) будем использовать алгоритм, основанный на методе Черникова определения фундаментальной системы решений для системы однородных линейных неравенств [2].

Многогранник будем задавать множеством вершин V и множеством рёбер E. Кроме того, с каждой вершиной v свяжем множество N(v), содержащее номера тех неравенств, которые обращаются в равенство в точке v (т.е. номера тех гиперплоскостей, которым принадлежит v).

Сначала рассмотрим многогранник, удовлетворяющий неравенствам (2). Очевидно, он представляет собой прямоугольный гиперпараллелепипед. Множество V содержит всевозможные точки, каждая из координат которых есть либо 0, либо qHk: (0, 0, …, 0), (qH1, 0, …, 0), (0, qH2, 0, …, 0), (qH1, qH2, 0, …, 0), …, (qH1, qH2, …, qHn). Каждая вершина лежит на пересечении n гиперплоскостей, задаваемых уравнением qk = 0 или qk = qHk (в зависимости от координат вершины). Множество E содержит всевозможные отрезки, соединяющие две вершины, отличающиеся только одной координатой.

Теперь будем добавлять к системе (3.125) по одному неравенству из (3.124). Каждое неравенство fj(q) ≤ 0 представляет собой полупространство, поэтому необходимо найти пересечение текущего многогранника решений и этого полупространства. Все вершины vV можно разделить на три множества по отношению к полупространству:

V – вершины, лежащие внутри полупространства (fj(v) < 0);

V+ – вершины, лежащие вне полупространства (fj(v) > 0);

V0 – вершины, лежащие на границе полупространства – гиперплоскости (fj(v) = 0).

Если множество V+ пустое, неравенство fj(q) ≤ 0 можно безболезненно удалить из системы, иначе необходимо выполнить следующие шаги:

  1. V* = .

  2. Для каждого ребра v1v2, где v1V, v2V+, добавить в V* вершину v1 вместе с новой вершиной v = kv1 + (1 – k)∙v2, k = , лежащей на пересечении ребра v1v2 и гиперплоскости fj(q) = 0. N(v) = N(v1) ∩ N(v2). Ребро v1v2 удалить из E, заменив его ребром v1v.

  3. V = VV0V*.

  4. Пусть v1, v2V*, v1v2, Z = N(v1) ∩ N(v2), |Z| > n – 3, тогда если V не содержит вершины v, отличной от v1 и v2, такой что ZN(v), то v1 и v2 соединены ребром. Рассмотрим всевозможные пары вершин из V* и найденные рёбра добавим в E.

  5. vV: N(v) = N(v)  j.

После выполнения данного алгоритма последовательно для всех неравенств системы (1) мы получим вершины и рёбра многогранника, представляющего собой область диаграммы Вороного с центром в pi.

Сформируем множество V вершин и множество E рёбер графа, задающего диаграмму Вороного, объединив многогранники, соответствующие всем её областям:

  1. V = , E = , i = 1.

  2. Пусть Vi и Ei – соответственно вершины и рёбра i-ой области диаграммы, V*i – те вершины из Vi, которых нет в V. Добавим вершины из V*i в V.

  3. Рассмотрим все рёбра v1v2 из Ei. Если v1v2E, добавим v1v2 в E (проверку можно не производить, если v1V*i или v2V*i).

  4. Если i < M, то i = i + 1, перейти на шаг 2.

На шаге 2 приведённого алгоритма требуется определить, какие вершины из V*i присутствуют в V. Чтобы эта операция выполнялась по возможности быстро, следует хранить V в виде дерева. При этом необходимо определить отношение порядка на множестве вершин.

Пусть v1(v11, v12, …, v1n) и v2(v21, v22, …, v2n) – вершины. Если < , где – заданная малая константа, то v1 = v2. Иначе положим, что вершины v1 и v2 лежат внутри области q1kqkq2k, k = 1, 2, …, n. Сравним v1 и v2 по следующему алгоритму:

  1. k = 1.

  2. .

  3. Если v1k < q* и v2kq*, то v1 < v2, алгоритм завершён.

  4. Если v1kq* и v2k < q*, то v1 > v2, алгоритм завершён.

  5. Если v1k < q* и v2k < q*, то q2k = q*.

  6. Если v1kq* и v2kq*, то q1k = q*.

  7. Если k = n, перейти на шаг 1, иначе k = k + 1, перейти на шаг 2.

Планирование пути по диаграмме Вороного

При планировании пути по диаграмме Вороного мы исходим из предположения, что, двигаясь по рёбрам диаграммы, мы имеем больше шансов избежать столкновения с запрещёнными точками.

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

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

Этап 2. Добавление к графу вершин, соответствующих стартовой и целевой точкам, а также рёбер, соединяющих эти вершины с другими.

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

Уравнение прямой, проходящей через точки q1 и q2, в параметрическом виде выглядит следующим образом:

q = q1 + tr, где r = q2q1.

Точка пересечения прямой и гиперплоскости, заданной уравнением (a, q) + a0 = 0, определяется по формуле:

.

Вычислим t для всех граней области (взяв в качестве q1 центр области, а в качестве q2 стартовую точку) и выберем из них наименьшее положительное – оно и будет соответствовать грани, которую пересекает луч. Вершины грани содержат во множестве N номер этой грани.

Описанные действия надо повторить для целевой точки.

Этап 3. Удаление из графа рёбер, которые налегают на препятствия. Пусть ребро соединяет точки q1 и q2, а препятствие представляет собой гиперкуб с центром в точке p и стороной 2a = 1.01∙Δq, где Δq – шаг дискретизации. Воспользуемся следующим алгоритмом:

  1. l = 0, r = 1, k = 1.

  2. d = q2kq1k.

  3. Если d <> 0, перейти на шаг 5.

  4. Если pka < q1k < pk + a, перейти на шаг 9, иначе отрезок не пересекает гиперкуб, алгоритм завершён.

  5. Если d > 0, , , иначе , .

  6. Если l′ > l, то l = l′. Если r′ < r, то r = r′.

  7. Если lr, то отрезок не пересекает гиперкуб, алгоритм завершён.

  8. Если k = n, то отрезок пересекает гиперкуб, алгоритм завершён.

  9. k = k + 1, перейти на шаг 2.

Рисунок 3.17. Планирование пути по диаграмме Вороного

Этап 4. Выбор оптимального пути на графе с помощью модифицированного алгоритма Дейкстры. Отличие от оригинального алгоритма [2] заключается в том, что длиной ребра считается оценка вероятности пройти по ребру, не натолкнувшись на неизвестное препятствие, длиной пути считается оценка вероятности пройти путь, не натолкнувшись на неизвестное препятствие, а более коротким считается тот путь, у которого эта вероятность выше.

С каждой вершиной v графа, пройденной в процессе работы алгоритма, свяжем вершину P(v), из которой мы пришли в v, и длину L(v) пути от стартовой вершины до v. С помощью L(v1, v2) обозначим длину ребра, соединяющего вершины v1 и v2. Вершины, которые необходимо просмотреть, будем хранить в списке A, упорядоченном по убыванию P(v). По окончанию работы алгоритма список R будет содержать вершины, из которых состоит оптимальный путь, начиная со стартовой вершины и заканчивая целевой вершиной.

Длину ребра будем вычислять по формуле:

,

где d – расстояние от ребра v1v2 до центра области, k1 = 2π, k2 = 3π, k3 = 2π.

Использование такой функции способствует тому, чтобы путь проходил по рёбрам, которые находятся не очень близко к запрещённым точкам, но и не слишком далеко. График зависимости L(v1, v2) от d приведён на рис. 4.

Рисунок 3.18. Зависимость «длины» ребра от расстояния до центра области.

Алгоритм имеет следующие шаги:

  1. Пусть v0 – стартовая вершина. Поместить v0 в A, установить P(v0) = v0, L(v0) = 1.

  2. Если список A пуст, целевая вершина не достижима, алгоритм завершён.

  3. Извлечь из A первый элемент v.

  4. Если v – целевая вершина, путь найден, перейти на шаг 7.

  5. Для каждой вершины v′, соседней по отношению к v, выполнить: L′ = L(v)∙L(v, v′); если P(v′) =  или L′ > L(v′), то поместить v′ в A, P(v′) = v, L(v′) = L′.

  6. Перейти на шаг 2.

  7. Поместить v в начало R.

  8. Если v – стартовая вершина, алгоритм завершён.

  9. v = P(v), перейти на шаг 7.

Этап 5. Дискретизация пути. Полученный на предыдущем этапе путь представляет собой ломаную линию. Необходимо определить последовательность дискретных точек, через которые проходит эта линия. Пусть q1 и q2 – концы отрезка, dk (k = 1, 2, …, n) – шаг дискретизации по каждому измерению. Каждой ячейке пространства поставим в соответствие вектор x(x1, x2, …, xn), xk  Z, k = 1, 2, …, n, такой, что множество точек q(q1, q2, …, qn) ячейки удовлетворяет неравенствам , k = 1, 2, …, n. Сформируем список X ячеек, которые пересекает отрезок q1q2, по следующему алгоритму (рис. 3.19):

  1. , xk = [t], modk = {t}∙dk, , k = 1, 2, …, n.

  2. Поместить x в X.

  3. Если x = x*, алгоритм завершён.

  4. Найдём ведущую координату i, такую что |xix*i| ≥ |xkx*k|, k = 1, 2, …, n.

  5. m = modi. Для k = 1, 2, …, n выполнить шаг 6.

  6. , modk = modkrm. Если xi < x*i, то dk = dir, modk = modk + dk, иначе dk = –dir.

  7. Если |xix*i| = 1, перейти на шаг 12, иначе для k = 1, 2, …, n выполнить шаги 8-10.

  8. s = 2modk + dk, modk = modk + dk.

  9. Если s < 0, то modk = modk + dk, xk = xk – 1.

  10. Если s ≥ 2dk, то modk = modkdk, xk = xk + 1.

  11. Поместить x в X, перейти на шаг 7.

  12. Поместить x* в X.

Рисунок 3.19. Дискретизация отрезка