Le fichier launcher lance la simulation. Dedans vous pouvez modifier les maps employés.
python3 src/launcher.py
Des commandes permettent ensuite de :
Si une trajectoire qui fonctionne a été trouvé, elle s'affichera toute seule et en vert.
La surface est initialiser à l'aide d'une liste de point. Elle transformera cette liste en une liste de segment.
Objet représentant une entité, il est caractériser par :
Objet représentant le lander, il est caractériser par :
La classe environment permet de générer la surface et le lander à l'aide de points et de conditions initiales.
reset
exit_zone -> bool
next_dynamics_parameters(rotate, power) -> x, y, h_speed, v_speed
step(action) -> bool
landing_on_site -> bool
landing_angle -> bool
landing_vertical_speed -> bool
landing_horizontal_speed -> bool
Successful_landing -> bool
Pour employer des méthodes analytiques tel que l'algorithme génétique, il faudra déterminer une fonction de score. Cette fonction permettra de donner une note pour une trajectoire donnée et ses paramètres.
Il existe plusieurs critères plus ou moins important allant de la distance entre la zone de crash et la zone d'atterissage, à la vitesse à l'atterissage ,...
Le plus important des critères est la distance qui sépare le point d'atterissage à la zone d'atterissage prescrite par l'énoncé. Mais comment définire un bonne distance dans notre cas. Selon l'article proposé comme source d'inspiration pour ce projet, la meilleur distance semble être la distance à la marche donc pas la distance absolue mais plutot la distance nécessaire pour aller de la zone de crash à la zone d'atterissage en suivant la surface de l'environnement.
Il existe des contraintes de vitesses à l'atterissage qu'il faut respecter et donc des nouveaux paramètres pour une fonction de score, cependant il est important de préciser que ce sont les vitesses à l'atterissage, ce paramètre pourra donc être par exemple pris en compte si et seulement si le vaisseau a atterit au bonne endroit.
Pareil que la vitesse
Lorsque j'écris ceci, je me demande si il ne serait pas interressant de créer un score en fonction de l'amélioration d'une trajectoire qui a pour source deux autres trajectoires. Cela me fait penser notamenent au régulateur PID, ce sera peut être le sujet d'une amélioration.
La classe solution permet la création de solution informatique. Cette solution peut employer l'environement pour pouvoir s'entrainer.
Afin d'ajouter sa solution il faut créer un dossier solution contenant au moins une classe qui hérite de AbstractSolution et d'un fichier config contenant les paramètres par défaut de la solution qui seront changeable dans l'interface graphique.
Grace à get_parameters on a une idée des paramètres de la solution mais les changer à la main requiert du temps. C'est pourquoi je vais stocker dans un fichier config pour chaque solution ces hyperparamètres qui pourraient alors être changé durant une simulation.
Le fichier config contient la valeur par défaut des paramètres et peut être modifier dans le GUI.
L'interface graphique permet d'observer les différentes solutions proposées.
Son fonctionnement est étroitement lié à la solution créer car différents type d'observation peuvent être proposés.
Statique multiple voit son utilité dans l'étude de solution heuristique dans lesquelles il y a une évolution de la stratégie au fur et à mesure des simulations.
On veut retrouver dans cette interface graphique différentes fonctionnalités :
La solution produit une liste de trajectoire à chaque tour, ainsi on laisse à la solution le choix d'afficher le nombre de trajectoire. De plus par défaut pour passer au tracer de la/les prochaines trajectoires, par défaut, ce sera manuel mais on peut imaginer ajouter un fréquence d'affichage.