ИИ движения космического корабля: посадить 3D-корабль в положении = 0 и угле = 0

Это очень сложная задача о том, как маневрировать космическим кораблем, который может как переводить, так и вращаться в 3D, для космической игры.

Космический корабль имеетn размещение струй в различных положениях и направлениях.

Преобразованиеi-я струя относительно СМ космического корабля постоянна =Ti.

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

Другими словами, все струи приклеены к кораблю и не могут вращаться.

Струя может оказывать силу на космический корабль только в направлении его оси (зеленый).
В результате клея ось вращалась вместе с космическим кораблем.

Все самолеты могут оказывать силу (вектор,Fi) на определенную величину (скаляр,fi):
iреактивная струя может оказывать силу (Fi= axis x fi) только в пределах досягаемостиmin_i<= fi <=max_i.
И то и другоеmin_i а такжеmax_i постоянны с известным значением.

Чтобы быть ясно, единицаmin_i,fi,max_i Ньютон
Ex. Если диапазон не охватывает 0, это означает, что струя не может быть отключена.

Масса космического корабля =m а тензор инерции =I.
Текущее преобразование космического корабля =Tran0, скорость =V0, angularVelocity =W0.

Физическое тело космического корабля следует хорошо известным физическим правилам:
Torque=r x F
F=ma
angularAcceleration = I^-1 x Torque
linearAcceleration = m^-1 x F

I отличается для каждого направления, но для простоты имеет одинаковое значение для каждого направления (сферического). Таким образом,I можно считать скаляром вместо матрицы 3х3.

Вопрос

Как контролировать все самолеты (всеfi) посадить корабль с позицией = 0 и углом = 0?
Математическая спецификация: Найти функциюfi(time) которые требуют минимального времени для достиженияposition=(0,0,0), orient=identity с финаломangularVelocity а такжеvelocity = ноль

В частности, как называются методы или связанные алгоритмы для решения этой проблемы?

Мои исследования (1 измерение)

Если вселенная 1D (таким образом, нет вращения), проблему будет легко решить.
(СпасибоГэвин Лок, https://stackoverflow.com/a/40359322/3577745 )

Сначала найдите значениеMIN_BURN=sum{min_i}/m а такжеMAX_BURN=sum{max_i}/m.

Во-вторых, подумайте противоположным образом, предположим, чтоx=0 (должность) иv=0 вt=0,
затем создать две параболы сx''=MIN_BURN а такжеx''=MAX_BURN.
(Предполагается, что вторая производная постоянна в течение определенного периода времени, поэтому это парабола.)

Единственная оставшаяся работа - соединить две параболы.
Красная пунктирная линия - это место, где они присоединяются.

В период времени, которыйx''=MAX_BURN, всеfi=max_i.
В период времени, которыйx''=MIN_BURN, всеfi=min_i.

Это действительно хорошо работает для 1D, но в 3D проблема гораздо сложнее.

Замечания:
Просто грубое руководство, указывающее мне правильное направление, действительно ценится.
Мне не нужен идеальный ИИ, например это может занять немного больше времени, чем оптимальное.
Я думаю об этом более 1 недели, до сих пор не могу найти подсказки.

Другие попытки / мнения

Я не думаю, что машинное обучение, такое как нейронная сеть, подходит для этого случая.Оптимизация с наименьшими квадратами может быть полезной, но я не знаю, как приспособить две мои гиперпараболы к этой форме проблемы.Это может быть решено с помощью множества итераций, но как?Я искал сайт НАСА, но не нашел ничего полезного.Эта функция может существовать в игре "Space Engineer".Комментарий от Logman: Знания в области машиностроения могут помочь.Комментарий от AndyG: Это проблема планирования движения снеголономные ограничения, Это может быть решеноБыстрое изучение случайного дерева (RRTs), теория вокругУравнение Ляпунова, а такжеЛинейный квадратичный регулятор.Комментарий Джона Колмана: Это похоже наоптимальное управление чем AI.

Изменить: «Предположение около 0» (необязательно)

Всамый В этом случае ИИ (который должен быть спроектирован) работает непрерывно (то есть вызывается каждый шаг по времени).Таким образом, с настройкой ИИ,Tran0 являетсяобычно почти тождественное,V0 а такжеW0 являютсяобычно не сильно отличается от 0, например|Seta0|<30 degree,|W0|<5 degree per time-step .Я думаю, что ИИ, основанный на этом предположении, будет работать нормально всамый дело. Хотя это и не идеально, его можно рассматривать как правильное решение (я начал думать, что без этого предположения этот вопрос может быть слишком сложным).Я слабо чувствую, что это предположение может позволить некоторые уловки, которые используют некоторую "линейную" аппроксимацию.Второй альтернативный вопрос - «Настройте 12 переменных» (проще)

Приведенный выше вопрос также можно рассматривать следующим образом:

Я хочу настроить все шестьvalues и шестьvalues' (1-й производной), чтобы быть 0, используя наименьшее количество временных шагов.

Вот таблица, показывающая возможную ситуацию, с которой может столкнуться ИИ: -

Таблица множителей магазиныinertia^-1 * r а такжеmass^-1 из оригинального вопроса.

мультипликатор а такжеСпектр постоянны.

На каждом временном шаге ИИ попросят выбрать кортеж значенийfi это должно быть в диапазоне[min_i,max_i] для каждогоi+1струя
Ex. Со стола ИИ может выбрать(f0=1,f1=0.1,f2=-1).

Затем вызывающая сторона будет использоватьfi умножить сТаблица множителей получитьvalues''.
Px'' = f0*0.2+f1*0.0+f2*0.7
Py'' = f0*0.3-f1*0.9-f2*0.6
Pz'' = ....................
SetaX''= ....................
SetaY''= ....................
SetaZ''= f0*0.0+f1*0.0+f2*5.0

После этого звонящий обновит всеvalues' с формулойvalues' += values''.
Px' += Px''
.................
SetaZ' += SetaZ''

Наконец, звонящий обновит всеvalues с формулойvalues += values'.
Px += Px'
.................
SetaZ += SetaZ'

ИИ будет запрашиваться только один раз за каждый временной шаг.

Целью ИИ является возвращение кортежейfi (может быть разным для разных временных шагов), чтобы сделатьPx,Py,Pz,SetaX,SetaY,SetaZ,Px',Py',Pz',SetaX',SetaY',SetaZ' = 0 (или очень близко),
используя как можно меньше временных шагов.

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

Ответ на этот альтернативный вопрос может быть очень полезным.

Третий альтернативный вопрос - «Настройте 6 переменных» (самый простой)

Это упрощенная версия предыдущего варианта с потерями.

Разница лишь в том, что мир теперь 2D,Fi также 2D (x, y).

Таким образом, я должен только настроитьPx,Py,SetaZ,Px',Py',SetaZ'= 0, используя как можно меньше временных шагов.

Ответ на этот самый простой альтернативный вопрос можно считать полезным.

Ответы на вопрос(4)

Ваш ответ на вопрос