C'est un problème très difficile sur la façon de manœuvrer un vaisseau spatial qui peut à la fois traduire et de le faire tourner en 3D, pour un jeu de l'espace.
Le vaisseau spatial s' n
jets de placer dans différentes positions et les directions.
La Transformation de l' i
-ème jet par rapport à la CM de vaisseau spatial est constante = Ti
.
- La Transformation est un tuple de la position et de l'orientation (quaternion ou d'une matrice 3x3 ou, moins préférable, angles d'Euler).
- Une transformation peut également être désigné par une seule matrice 4x4.
En d'autres termes, tous les jet sont collées sur le navire et ne peut pas tourner.
Un jet peut exercer une force vers le vaisseau spatial seulement dans la direction de son axe (vert).
Comme un résultat de la colle, de l'axe de rotation avec le vaisseau spatial.
Tous les jets peuvent exercer une force (vecteur,Fi
) à une certaine ampleur (scalaire,fi
) :i
-ème jet peut exercer une force (Fi
= axis
x fi
) que dans la gamme min_i<= fi <=max_i
.
Les deux min_i
et max_i
sont constants avec la valeur connue.
Pour être clair, l'unité de l' min_i
,fi
,max_i
est celle de Newton.
Ex. Si la plage ne couvre pas 0, cela signifie que le jet ne peut pas être éteint.
Le vaisseau spatial de masse = m
et du tenseur d'inertie = I
.
Le vaisseau spatial de la transformation actuelle = Tran0
, vitesse = V0
, angularVelocity = W0
.
Le vaisseau spatial de la physique corps suit bien connues de la physique des règles :-Torque=r x F
F=ma
angularAcceleration = I^-1 x Torque
linearAcceleration = m^-1 x F
I
est différent pour chaque direction, mais par souci de simplicité, il a la même valeur pour chaque direction (sphère-like). Ainsi, I
peut être considéré comme un scalaire au lieu de la matrice 3x3.
Question
Comment contrôler tous les jets (tous fi
) à la terre le navire avec position=0 et l'angle=0?
Mathématiques-comme spécification: Trouver la fonction d' fi(time)
que de prendre un minimum de temps pour atteindre position=(0,0,0)
, orient=identity
avec final angularVelocity
et velocity
= zéro.
Plus précisément, quels sont les noms de la technique ou liées à des algorithmes pour résoudre ce problème?
Mes travaux de recherche (1 dimension)
Si l'univers est en 1D (donc, pas de rotation), le problème sera facile à résoudre.
( Merci à Gavin de Verrouillage, https://stackoverflow.com/a/40359322/3577745 )
Tout d'abord, trouver la valeur MIN_BURN=sum{min_i}/m
et MAX_BURN=sum{max_i}/m
.
Deuxièmement, penser en sens inverse, à supposer qu' x=0
(position) et l' v=0
à t=0
,
ensuite, créez deux paraboles avec x''=MIN_BURN
et x''=MAX_BURN
.
(Le 2ème dérivé est supposée être constante pour une période de temps, il est de la parabole.)
Le seul travail est de rejoindre les deux paraboles ensemble.
Le trait rouge de la ligne est l'endroit où les rejoindre.
Dans la période de temps qu' x''=MAX_BURN
, tous fi=max_i
.
Dans la période de temps qu' x''=MIN_BURN
, tous fi=min_i
.
Il fonctionne vraiment bien pour les 1D, mais en 3D, le problème est beaucoup plus difficile.
Note:
Juste un rough guide m'indiquer un bon sens est vraiment apprécié.
Je n'ai pas besoin d'une parfaite AI, par exemple, il peut prendre un peu plus de temps que l'optimum.
J'y pense depuis plus de 1 semaine, trouve toujours pas la moindre idée.
D'autres tentatives / opinions
- Je ne pense pas que l'apprentissage de la machine comme le réseau de neurones est approprié pour ce cas.
- Limite-limité-moins-carré-optimisation peut être utile, mais je ne sais pas comment l'adapter à mes deux hyper-parabole à cette forme de problème.
- Cela peut être résolu en utilisant un nombre d'itérations, mais comment?
- J'ai cherché de la NASA site web, mais ne pas trouver quelque chose d'utile.
- La fonctionnalité peut exister dans "l'Espace de l'Ingénieur" de jeu.
- Commenté par Logman: Connaissances en génie mécanique peut aider.
- Commenté par AndyG: C'est un mouvement de la planification de problème avec nonholonomic contraintes. Il pourrait être résolu par une Rapide exploration aléatoire de l'arbre (Tras), la théorie autour de l'équation de Lyapunov, et Linéaire quadratique régulateur.
- Commenté par John Coleman: Cela semble plus comme un contrôle optimal de l'IA.
Edit: "à Proximité-0 hypothèse" (en option)
- Dans la plupart des cas, l'IA (à la conception) exécuté en continu (c'est à dire appelée à chaque étape).
- Ainsi, avec l'IA de tuning,
Tran0
est généralement proche de l'identité,V0
etW0
sont généralement pas si différent de 0, par exemple,|Seta0|<30 degree
,|W0|<5 degree per time-step
. - Je pense que l'IA en se basant sur cette hypothèse serait de travailler sur OK dans la plupart des cas. Bien que n'étant pas parfait, il peut être considéré comme une solution correcte (j'ai commencé à penser que sans cette hypothèse, cette question est peut-être trop dur).
- J'ai vaguement le sentiment que cette hypothèse peut permettre a certains trucs que l'utilisation de certains "linéaire"-approximation.
La 2ème Alternative Question - "Tune 12 Variables" (plus facile)
La question ci-dessus peut également être considéré comme suivi:
Je veux régler tous les six values
et six values'
(1er dérivés) à 0, en utilisant la plus faible quantité de temps.
Voici un tableau montrent une situation possible que l'IA peut faire face à:-
La table de multiplication des magasins d' inertia^-1 * r
et mass^-1
à partir de la question d'origine.
Le Multiplicateur et la Plage sont constants.
Chaque timestep, l'IA sera demandé d'en choisir un n-uplet de valeurs fi
qui doit être dans la gamme [min_i,max_i]
pour chaque i+1
-ème jet.
Ex. De la table, l'IA peut choisir (f0=1,f1=0.1,f2=-1)
.
Ensuite, l'appelant utilisera fi
à se multiplier avec la table de multiplication pour obtenir de l' 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
Après cela, l'appelant sera mise à jour tous values'
avec la formule values' += values''
.Px' += Px''
.................
SetaZ' += SetaZ''
Enfin, l'appelant sera mise à jour tous values
avec la formule values += values'
.Px += Px'
.................
SetaZ += SetaZ'
L'IA sera demandé qu'une seule fois pour chaque pas de temps.
L'objectif de l'IA est de retour tuples d' fi
(peut être différente pour différents pas de temps), pour faire de Px
,Py
,Pz
,SetaX
,SetaY
,SetaZ
,Px'
,Py'
,Pz'
,SetaX'
,SetaY'
,SetaZ'
= 0 (ou très près),
en utilisant moins d'étapes que possible.
J'espère offrir une autre vision du problème sera plus facile.
Il n'est pas exactement le même problème, mais j'ai l'impression qu'une solution qui peut résoudre cette version peut m'apporter très proche de la réponse de la question d'origine.
Une réponse à cette autre question peut être très utile.
La 3ème Alternative Question - "Tune 6 Variables" (la plus facile)
C'est une perte version simplifiée de la précédente alternative.
La seule différence est que maintenant, le monde est en 2D, Fi
est également en 2D (x,y).
Ainsi, j'ai pour syntoniser uniquement Px
,Py
,SetaZ
,Px'
,Py'
,SetaZ'
=0, en utilisant le moins de temps possible.
Une réponse à cette simple alternative question peut être considéré comme utile.