Решение дракона::symbolic::expression для графа выпуклых множеств

У меня есть граф выпуклых множеств, в котором я ищу оптимальный путь через несколько регионов. Я работаю над улучшением стоимости между каждой вершиной (областями в форме многоугольника). Стоимость перемещения по ребру от вершины u до вершины v должна равняться расстоянию от u до v, умноженному на коэффициент масштабирования для прохождения через эту вершину. (Чем дольше ребро проходит через вершину, тем больший эффект вершина окажет на стоимость)

т. е. стоимость_of_edge_from_u_to_v = расстояние_от_u_to_v * (фактор_пока_путешествие_через_u * расстояние_от_начальной_точки_до_конца_u + фактор_пока_путешествие_через_v * расстояние_от_начала_v_до_конечной_точки)

Я добавляю стоимость края в виде дракона::symbolic::expression. Я хотел бы вычислить точку пересечения края пути от u до v с одним из внешних краев многоугольника v. Используя эту точку пересечения, я смогу вычислить соотношение времени в многоугольнике u и в многоугольнике v. что позволит мне использовать упомянутое выше уравнение для получения верхней границы стоимости. В настоящее время я сталкиваюсь с проблемами деления на определитель, который может быть равен нулю в некоторых точках при поиске точки пересечения.

Примером этого может быть транспортное средство, путешествующее из одного региона в другой, где земля в первом регионе грязная, а во втором - бетонная. Хотя расстояние, которое должен преодолеть автомобиль в регионе 1 и 2, может быть одинаковым, стоимость проезда по грязи будет намного выше.

Как мне использовать Drake для создания непрерывного решения с помощью выпуклых множеств, включая определенные затраты на ребра (в зависимости от выбранной вершины)?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что есть лучшие способы сформулировать это.

Для обсуждения давайте предположим, что многоугольники представляют собой пути в ℜ³. Тогда было бы естественно создать регион GCS для каждого из ваших регионов в ℜ⁶ = ℜ³ x ℜ³. Другими словами, каждый раз, когда вы посещаете вершину, вы выбираете 2 точки в исходном пространстве. Затем вы можете добавить стоимость вершины к каждому региону, которая взимает скаляр для конкретного региона, умноженный на (евклидово?) расстояние между двумя точками. И вы можете добавить ограничение края, говорящее, что вторая точка u == первая точка v.

По сути, это самая простая версия транскрипции, которую мы использовали в первом документе по планированию движения GCS.

Благодарю за ваш ответ! Пример оказался очень полезным. Я переключил свое решение на использование класса GcsTrajectoryOptimization. Моя проблема настроена аналогично книге: у меня есть исходный регион (точка), основной регион и целевой регион (точка). Как указать, где соединяются регионы? Я правильно добавил края между подграфами, но решатель выбирает прямую линию между исходным и целевым регионами и полностью игнорирует края основного региона. Я считаю, что это потому, что я включаю некоторые ограничения на исходный/целевой регион, но я не уверен, какие именно.

JacobSmith 26.06.2024 22:58

Мне очень сложно помочь без подробностей.

Russ Tedrake 27.06.2024 01:56

Понятно! Не могли бы вы указать мне, где я могу получить доступ к двум точкам внутри каждой вершины? Я хотел бы добавить стоимость, специфичную для вершины, и (как упоминалось в статье) стоимость сдерживания границ.

JacobSmith 27.06.2024 23:05

В GcsTrajectoryOptimization, когда вы звоните AddRegions, вы получаете Subgraph в ответ. Вы можете перебирать вершины подграфа, используя subgraph.Vertices(). Для каждой Вершины вы можете получить доступ к переменным и вызвать AddCost. Например. v.AddCost(np.linalg.norm(v.x[:3] - v.x[-3:])). (возможность символически добавлять стоимость нормы l2 с нормой linalg — относительно недавняя функция, поэтому вам понадобится актуальная версия Drake)

Russ Tedrake 28.06.2024 13:13

Спасибо за вашу помощь! Последний вопрос, который у меня возник, касался добавления стоимости приближения к препятствию (только к определенным границам полигонов). Я хочу, чтобы план находился на определенном пороге/расстоянии от препятствия. Я предполагаю, что использую вершину->x() в качестве точек для выбора. В моем планировщике x() имеет 16 значений (x,y,z *5 + #ofpoints->значение 5 для 5 точек). Я хотел бы добавлять стоимость только в том случае, если точка находится в пределах, скажем, 2 от границы, и ничего не делать в противном случае. Я попробовал if_then_else, addquadraticcost(). Я не знаю, как Дрейк обрабатывает 16 значений с добавленной стоимостью.

JacobSmith 03.07.2024 16:28

Если вы просто хотите сохранить пороговое расстояние (в качестве строгого ограничения), вы можете просто соответствующим образом сжать регионы. Альтернативно, в arxiv.org/pdf/2402.10312 разделе VIIB уравнение (18) мы использовали стоимость 1/x, чтобы побудить решение не приближаться слишком близко к столкновениям. Это можно записать в выпуклую стоимость ( см. пример, как только появится PR. Или вы можете добавить невыпуклую стоимость, которая будет использоваться только во время округления.

Russ Tedrake 05.07.2024 19:50

Другие вопросы по теме