Самый быстрый путь с ускорением в точках
Это просто то, что я придумал сам по себе, но это похоже на забавную проблему, и это меня озадачило.
У вас есть набор точек в двумерном пространстве с одной точкой, обозначенной как "Пуск" и "Конец". Каждая точка имеет координаты (в метрах от начала координат), но также и "номер ускорения" (в метрах/секунду дельта-V). По достижении точки (включая старт) вы можете ускоряться до этого номера ускорения в любом направлении. Стоимость края зависит от вашей текущей скорости, но вы также должны двигаться в правильном направлении.
Есть ли эффективный алгоритм для нахождения самого быстрого пути до конечной точки? Я не придумал ничего лучше, чем "Попробовать каждый путь и проверить результаты". Djikstra и другие простые алгоритмы не работают, потому что вы не можете легко сказать, что один путь к промежуточной точке лучше или хуже другого, если они приходят с разными начальными скоростями.
Если это слишком просто, что, если вы добавите требование, которое вы должны остановить в конечной точке? (т.е. вы должны иметь меньше, чем его значение ускорения, когда вы достигаете конца.)
РЕДАКТИРОВАТЬ: Чтобы быть ясным, важно направление. Вы поддерживаете вектор скорости при прохождении графика, а ускорение означает добавление к нему вектора, величина которого ограничена номером ускорения этой точки. Это означает, что есть ситуации, когда создание огромной скорости является пагубным, так как вы будете слишком быстры, чтобы "направить" к другим ценным пунктам/месту назначения.
Ответы
Ответ 1
Я думаю, что требование, что вы используете только ускорение из каждой точки, делает эту задачу NP полной в общем случае. Рассмотрим вход, который выглядит следующим образом:
![введите описание изображения здесь]()
Если "огромное расстояние" между конечной точкой и остальными точками достаточно велико, чтобы доминировать в стоимости окончательного решения, поиск оптимального решения сводится к тому, чтобы найти способ поднять как можно больше ускорений скорости возможно с начала графика. Если вы разрешаете только одну точку передавать один раз, это будет эквивалентно задаче о гамильтоновском пути, которая является NP полной.
Тем не менее, ваша проблема содержит некоторые дополнительные правила (расстояния - евклидова, график всегда завершен), что может облегчить задачу.
Ответ 2
Вы можете попытаться решить эту проблему в обратном направлении путем рекурсивного отслеживания путей от конца друг к другу node, а затем указать максимальную скорость вдоль линии, чтобы иметь возможность перейти от этого node к любому другому. Правило отбраковки будет, если существует путь от текущего до следующего node с меньшей скоростью и меньшим временем, затраченным с конца, что будет означать, что другой путь более оптимален по умолчанию, поскольку он может достигать большего количества узлов и занимает меньше времени. Как только путь достигнет начала node, он должен быть пересчитан на основе максимальной скорости, достижимой в начале и сохраненной. Затем вы собираете путь с меньшим временем.
Вам нужно искать любой доступный путь здесь, потому что доступные пути на вашем графике зависят от прошлого состояния с косвенной механикой, используя меньшую скорость, что позволяет больше выбора.