Я использую класс GraphOfConvexSets от Drake для решения задачи о кратчайшем пути через граф выпуклых множеств. Я вручную построил свой собственный график и использовал ссылку на класс для решения простой задачи типа A* из drake::geometry::optimization::GraphOfConvexSets::SolveShortestPath и использовал этот результат для получения drake::geometry::optimization: :GraphOfConvexSets::SolveShortestPath::GetSolutionPath (который представляет собой список ребер, имеющих значения 1 или 0 для активных или неактивных). Обратите внимание на картинку ниже введите сюда описание изображения Я сделал около 9 узлов, каждый из которых имеет по четыре граничных точки. Каждый узел представляет собой выпуклое множество. Я определил их как многоугольники, а затем добавил в граф вершины. Я также добавил ребра между вершинами.
Однако моя проблема требует решения, которое найдет, куда идти внутри выпуклого множества. Обратите внимание на вторую картинку, которую я прикрепил. введите сюда описание изображения
Я ожидаю, что результатами будут местоположения внутри выпуклых множеств или что-то подобное, где я мог бы построить график выпуклых множеств и полученный кратчайший путь через выпуклые множества, как показано на втором изображении, показанном выше.
Я пишу это на C++ с использованием библиотеки Drake. Я относительно новичок в Drake, поэтому надеюсь, что это простой ответ.
Спасибо!
Метод решения возвращает MathematicalProgramResult, вы можете получить значение решения, вызвав, например. result.GetSolution(e.xu())
У меня есть заметки с этим примером и код ссылки на Python здесь.
Например, вы можете сделать
result = gcs.SolveShortestPath(v[0], v[4], options)
assert result.is_success()
print(result.GetSolution(v[0].x()))
Связано ли это как-то с функцией SolveConvexRestriction?
Для многих функций стоимости (например, минимального расстояния) оптимальным является прохождение угла, например, многогранной области.
Спасибо за ваш ответ! Сейчас я получаю в целом правильное решение, но все, что я вижу, показывает, что решение будет следовать только через крайние точки вершин выпуклого множества. Есть ли способ найти оптимальные решения через середину выпуклого множества (т.е. не через вершину)?