OpenGoddard Comment utiliser la bibliothèque 2-python pour un contrôle optimal non linéaire et la génération de trajectoires

https://github.com/istellartech/OpenGoddard https://istellartech.github.io/OpenGoddard/

Comment utiliser OpenGoddard 1 Ouvrir Goddard Comment utiliser 2 ← Maintenant ici Comment utiliser OpenGoddard 3 Ouvrir Goddard Comment utiliser 4

Problème de Goddard (problème de contrôle optimal de la remontée des fusées dans l'atmosphère)

Nous allons résoudre le problème de Goddard, qui est un problème classique dans l'ingénierie des fusées, le problème du contrôle optimal de la poussée pour l'ascension optimale d'une fusée dans l'atmosphère. Voir le fichier exemple pour plus de détails.

Équation du mouvement

Considérez le mouvement de la fusée dans une dimension (seulement la hauteur). Pensez à maximiser l'altitude en tenant compte de la poussée et de la résistance à l'air du moteur-fusée. T: poussée D: résistance (résistance à l'air) g: accélération de la gravité

2_rocket.png

\begin{align}
\dot{h} &= v \\
\dot{v} &= \frac{T - D}{m} - g \\
\dot{m} &= - \frac{T}{c}
\end{align}

Condition de contention

Entrez les limites supérieure et inférieure de la condition initiale, de la condition de valeur finale, de la variable d'état et de la variable de contrôle.

Fonction d'évaluation

Mettez la valeur que vous souhaitez minimiser en retour. Ici, nous voulons maximiser l'altitude, alors faites attention au signe comme suit.

J = -h

résultat

2_0knot_.png

Le résultat était qu'il valait mieux utiliser les pleins gaz dans un premier temps, puis réduire la poussée au milieu. Il s'agit d'un équilibre entre la propriété selon laquelle la poussée doit être aussi grande que possible afin de réduire la décélération due à la gravité en termes de phénomène, et la propriété qu'il vaut mieux ne pas trop accélérer dans un air dense car la résistance de l'air doit être faible. Le résultat. En termes techniques, c'est la minimisation de la somme de la perte de gravité et de la perte aérodynamique. La même chose est en fait considérée dans la fusée réelle, et dans la fusée à combustible solide, la poussée est ajustée à une bonne sensation en cours de route. La solution au problème de Goddard est en cours d'utilisation! Les problèmes d'optimisation sont utiles au monde! Hou la la!

knotting method La méthode pseudo-spectrale, qui est le contenu d'OpenGoddard, est un excellent algorithme, mais je ne suis pas doué pour les variables d'état et les variables de contrôle qui ne sont pas lisses (non différentiables). Je ne suis pas doué pour modifier les variables de contrôle de manière discontinue. De plus, je ne suis pas doué pour les valeurs absolues. En ce qui concerne le problème de Goddard, il ne résout que pour que l'altitude, la vitesse, le poids et la poussée soient lisses. La méthode de nouage est utilisée comme méthode pour trouver des solutions pour les variables d'état et les variables de contrôle même si elles sont discontinues en un point spécifique. Il s'agit d'une méthode de division de l'intervalle de calcul par des parties discontinues. Open Goddard facilite l'utilisation de la méthode de nouage. (Il existe également un logiciel d'optimisation d'algorithme qui divise automatiquement la section de méthode de nouage dans le monde ...)

Problème de Goddard (avec noeud)

Répertoriez les valeurs à mettre dans la classe Problème.

time_init = [0.0, 0.1, 0.3]
n = [25, 25]
num_states = [3, 3]
num_controls = [1, 1]

Il spécifie également quelle équation de mouvement est appliquée pour chaque intervalle et si les variables d'état sont continues. Ici, True est sélectionné avec l'espoir que seules les variables de contrôle changeront de manière discontinue. Le vrai / faux ici et la condition de contrainte sont étroitement liés, spécifiez-les donc soigneusement. Si False, il diverge à moins que la variable ne soit fixée au point de nœud dans la condition de contrainte (égalité).

prob.dynamics = [dynamics, dynamics]
prob.knot_states_smooth = [True]

De ce qui précède,

2_1knot_.png

Avec noeud, l'altitude maximale a baissé. .. .. Ce n'était pas très bon. Ce n'est pas seulement une bonne idée d'utiliser la méthode de nouage comme celle-ci, mais vous pouvez maintenant gérer le problème des variables discontinues.

Recommended Posts

OpenGoddard Comment utiliser la bibliothèque 2-python pour un contrôle optimal non linéaire et la génération de trajectoires
Comment utiliser la bibliothèque OpenGoddard 3-python pour un contrôle optimal non linéaire et la génération de trajectoires
Comment utiliser la bibliothèque OpenGoddard 4-python pour un contrôle optimal non linéaire et la génération de trajectoires
Comment utiliser la bibliothèque OpenGoddard 1-python pour un contrôle optimal non linéaire et la génération de trajectoires
Comment utiliser les requêtes (bibliothèque Python)
[python] Comment utiliser Matplotlib, une bibliothèque pour dessiner des graphiques
Comment installer et utiliser pandas_datareader [Python]
[Python] Organisation de l'utilisation des instructions
python: Comment utiliser les locals () et globals ()
Comment utiliser "deque" pour les données Python
Comment utiliser le zip Python et énumérer
Comment utiliser is et == en Python
Comment utiliser la bibliothèque C en Python
Comment utiliser la bibliothèque d'images Python dans la série python3
[Python] Comment utiliser la fonction de hachage et taple.
Conseils pour ceux qui ne savent pas comment utiliser is et == en Python
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
[BigQuery] Comment utiliser l'API de BigQuery pour Python -Création de table-
[Pour les débutants] Comment utiliser la commande say avec python!
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
[Python] Comment utiliser la bibliothèque de création de graphes Altair
Python # Comment vérifier le type et le type pour les super débutants
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Méthode d'apprentissage TensorFlow pour les professionnels des arts libéraux et les débutants en Python
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Comment utiliser l'apprentissage automatique pour le travail? 03_Procédure de codage Python
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Je ne savais pas comment utiliser l'instruction [python] for
Python: comment utiliser async avec
Comment installer et utiliser Tesseract-OCR
[Python] Comment utiliser la série Pandas
Comment utiliser SQLite en Python
Comment utiliser .bash_profile et .bashrc
Comment installer et utiliser Graphviz
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
Comment utiliser l'API Python d'OpenPose
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Comment utiliser la fonction zip de python
[Python] Comment utiliser l'API Typetalk
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Comment utiliser les variables d'environnement Serverless Framework et Python et gérer les étapes
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Comment utiliser un éditeur externe pour le développement Python avec Grasshopper