Projet-IA-Madelaine/Spécifications_fonctionnelles.md

208 lines
12 KiB
Markdown
Raw Normal View History

# Projet Jetpack DinoAI
Comparaison de Différentes Intelligences Artificielles dans un Jeu Simple
Cahier des charges fonctionnelles
Par :
Victor Descamps
Simon Catanese
Ethan Richard
Tuteur :
Florent Madelaine
fait le 18/11/2023
> Les images sont présentes en local avec ce document s'il y a un problème d'affichage nous recommandons d'utiliser l'extension markdown viewer de Firefox
# Sommaire :
- [Contexte](#contexte)
- - [Sujet](#sujet)
- - [Objectifs](#objectifs)
- - [Le Jeu](#le-jeu)
- - - [Le jeu de base](#le-jeu-de-base)
- - - [Notre jeu](#notre-jeu)
- [Les Bots](#les-bots)
- - [S) Le sachant (Apprentissage)](#s-le-sachant-apprentissage-img-title-src-images-img3png-png-alt-loading-ag-353-data-align-inline-width-50)
- [M) Lobservateur (Apprentissage)](#m-l-observateur-apprentissage-img-title-src-images-img4png-png-alt-loading-ag-364-width-50)
- [M) Le calculateur (Algorithme)](#m-le-calculateur-algorithme-img-title-src-images-img5png-png-alt-loading-ag-372-width-50)
- [C) Le calculateur apprenant (Algorithme & IA)](#c-le-calculateur-apprenant-algorithme-ia-img-title-src-images-img6png-png-alt-loading-ag-381-width-51)
- [L'application :](#l-application)
- - [Menu principal](#menu-principal)
- [Affichage des données](#affichage-des-données)
- [Configuration d'une partie](#configuration-d-une-partie)
- [Le jeu](#le-jeu-1)
- [Prévison dees Étapes de création](#prévision-des-étapes-de-création)
# Contexte
### Sujet :
Florent Madelaine. 
Expérimentation Bots pour un ou des jeux. 
Programmer un jeu original avec idéalement des éléments qui en font un challenge pour la réalisation dIA (hasard, phase denchère changeant le payoff, multijoueur, combinatoire importante, ...). Il conviendra de choisir un jeu pour lequel il est possible de réduire la combinatoire du jeu de manière naturelle et de désactiver/activer des règles pour en étudier des variantes naturelles. Il faudra ensuite créer, améliorer et expérimenter avec divers algorithmes pour converger vers des bots offrant un challenge raisonnable pour un humain.
### Objectifs :
Nous avons très rapidement opté pour faire différentes IA qui pourraient jouer toutes seules à un jeu simple. Nous sommes très intéressés par la notion de temps réel et de lapprentissage. 
Notre objectif serait de comparer différentes méthodes danalyse du jeu sur des bots différents pour les comparer entre elles sur plusieurs facteurs comme le temps d'apprentissage ou l'efficacité de la méthode.
Le livrable sera une application exécutable avec un .exe. Linterface doit permettre de lancer le jeu en choisissant les paramètres désirés. Lutilisateur pourra choisir de contrôler lavatar pour jouer lui-même ou bien déléguer la partie à lun des bots développés, puis éventuellement apporter des changements de règle au jeu.
En fonction des paramètres choisis, lutilisateur peut jouer lui-même ou assister à la partie dun ou plusieurs bots en même temps. Chaque partie de chaque bot (ou du joueur) enregistre des données stockées au format json ou xml. 
Lutilisateur peut choisir un paramètre “Rush” privilégiant la vitesse de calculs à laffichage graphique, accélérant le jeu au maximum et réalisant des parties en boucle pour obtenir des données exploitables et comparables le plus vite possible.
Le menu principal du jeu permet daccéder à une interface de visualisation des données collectées en jeu, affichables en graphiques et tableaux, permettant de comparer efficacement les performances des différents bots et du joueur humain en fonction des paramètres de partie choisis. 
# Le Jeu :
### Le jeu de base :
Jetpack Joyride est un jeu dit “Runner” car il consiste simplement à aller le plus loin possible tout en survivant aux dangers que le jeu lui oppose. Les règles du jeu sont simples, laissant le joueur décider de se propulser son avatar vers le haut ou de le laisser tomber pour faire bouger son personnage verticalement tandis que le terrain et donc ses obstacles avancent horizontalement vers lui de plus en plus vite.
![capture ecran partie type](images/img1PNG.PNG)
( capture décran dune partie type )
### Notre jeu :
Pour faire jouer nos IA nous allons donc reproduire le jeu sur Unity en adaptant certains aspects pour faciliter la compréhension et lapprentissage de lIA :
- Les objets qui ajoutent des règles très situationnelles sont retirés (comme les véhicules ou bonus modifiant l'expérience interactive du jeu).
- Un système de score sera ajouté. La maximisation du score sera lobjectif de lIA au-delà du temps de survie. Le score aura une augmentation linéaire en fonction du temps de survie et pourra être augmenté en ramassant des pièces. Mais de mauvaises pièces peuvent apparaître et faire baisser le score. Les IA devront ainsi adapter leur chemin pour tenter de maximiser leur score quitte à prendre des risques.
<img title="" src="images/img2PNG.PNG" alt="interface du jeu" width="637" data-align="inline">
- Le jeu original peut faire apparaître des missiles pouvant tuer le joueur. Ces missiles ne seront initialement pas implémentés, des tests nous permettront de savoir si ils sont un ajout viable au jeu après le développement du premier bot.
#
## Les bots :
nb. Pour comprendre la suite, il faut savoir que les IA fonctionnant par apprentissage nécessitent lapport dun certain nombre de données de sources définies pour fonctionner, données quelles apprennent à corréler par tâtonnement afin de trouver la meilleure approche et apporter les meilleures réponses.
Notation MoSCoW:
Must Should Could Would
### S) Le sachant (Apprentissage) <img title="" src="images/img3PNG.PNG" alt="loading-ag-353" data-align="inline" width="50">
Cette IA avancera à laveugle en ayant en tête les positions de chaque objet sur l'écran. On sattends à ce que lIA comprenne que lobjet représentant son personnage ne doit pas sapprocher des objets néfastes entraînant la mort ou une baisse de score.
### M) Lobservateur (Apprentissage) <img title="" src="images/img4PNG.PNG" alt="loading-ag-364" width="50">
Cette IA ne connaît pas les coordonnées des objets à lécran. Lobservateur possède en revanche un champ de vision lui permettant de repérer sur certains angles la distance dobjets par rapport à lavatar. On s'attend à ce que lIA apprenne à éviter les objets néfastes sapprochant trop de lavatar. 
### M) Le calculateur (Algorithme) <img title="" src="images/img5PNG.PNG" alt="loading-ag-372" width="50">
Le bot Calculateur ne fonctionne pas par apprentissage mais par un algorithme. Au fil de la partie, le calculateur doit calculer par itérations différents chemins en essayant de sapprocher du chemin le plus sûr possible. Par intervalle de temps, le calculateur essaiera de prolonger le meilleur chemin quil a trouvé et testera des déviations possibles apportant un éventuel avantage sur lespérance de survie et dobtention de points.
### C) Le calculateur apprenant (Algorithme & IA) <img title="" src="images/img6PNG.PNG" alt="loading-ag-381" width="51">
Bot optionnel fonctionnant comme le calculateur à la différence que lon essaiera dy implémenter une IA qui devra faire de meilleurs choix de prolongement et de déviation de chemin afin daugmenter lefficacité et les performances du bot Calculateur. On s'attend à ce que lIA apprenne à trouver des chemins plus sûrs en prenant en compte les chemins déjà testés.
Dautres IA viendront si les idées et les deadlines nous le permettent.
#
## LApplication :
### Menu principal :
![image menu principal](images/img7PNG.PNG)
Permet de naviguer entre les deux parties majeures de lapplication. 
Le bouton “Lancer le jeu” redirige vers un menu de configuration de la partie. 
Le bouton “Consulter les données” redirige vers une interface de visualisation des données récoltées au long des parties enregistrées.
### Affichage des données :
Cette interface traite les données enregistrées automatiquement pendant toutes les parties jouées. Les bots utilisés et les règles de chaque partie permettent de différencier chaque ensemble de données.
Les données traitées seront affichées sous forme de tableaux ou graphiques selon ce qui semble le plus adapté.
Différents onglets permettent de filtrer laffichage et obtenir des informations plus précises sur certains aspects.
Lobjectif est de permettre à lutilisateur de pouvoir comparer facilement de multiples aspects de chaque bots de manière concrète et rigoureuse après avoir recueilli suffisamment de données.
Il est envisagé dimplémenter une fonctionnalité dexport des données en tableau Exel.
<img title="" src="images/img8PNG.PNG" alt="image affichage des données" data-align="center">
### Configuration dune partie :
<img title="" src="images/img9PNG.PNG" alt="image configuration d'une partie" data-align="center">
Cette interface permet à lutilisateur de configurer une partie ou une suite de parties auxquelles il fera participer un ou plusieurs bots ou bien lui-même. 
Les règles du jeu peuvent être modifiées pour soumettre les bots à des conditions de jeu diverses.
Des éléments comme les missiles ou les pièces peuvent être activés ou désactivés. Dautres paramètres peuvent être modifiés comme la vitesse maximale pouvant être atteinte par le jeu ou le nombre dessais maximums et la durée de session maximum (la session sarrête lorsquune des deux limites est atteinte).
Chaque partie peut comporter une seed aléatoire ou garder une seed constante. La seed constante peut être la seed par défaut, conservée dans les fichiers du jeu et non modifiée depuis le début du développement, ou bien une autre seed choisie par lutilisateur. La seed par défaut peut aussi être modifiée. 
Enfin, le mode Rush permet de maximiser la vitesse du jeu pour accélérer la collecte de données et lapprentissage des bots. Ce mode de jeu remplace le rendu graphique par une console affichant en temps réel différentes informations. La vitesse du mode rush dépend entièrement de la puissance de lordinateur combinée à la complexité de calcul générée par les bots.
Il est envisagé de permettre de choisir un niveau d'entraînement pour chaque bot. 
### Le jeu :
![image du jeu plus travaillé](images/img10PNG.PNG)
Lécran de jeu exécutera en temps réel la reproduction du jeu Jetpack Joyride en rendu graphique (ou console si le mode Rush est activé).
Lavatar, représentant la célèbre mascotte officieusement officielle du BUT INFO, Dino, peut se déplacer de haut en bas. Le décor et les autres éléments du jeu se déplacent de droite à gauche.
Dino doit se déplacer verticalement de manière à éviter les lasers et autres malus et attraper le plus de pièces possibles.
Si plusieurs bots jouent ensemble, leurs avatars apparaîtront en transparence. Lavatar du joueur humain sera toujours opaque.
Si plusieurs parties sont configurées, chaque partie suivante commencera dès la fin de la partie en cours.
A la fin de la dernière partie, lapplication changera dinterface pour afficher le menu de consultation de données ne comprenant que les données obtenues pendant la session jouée.
### Prévision des Étapes de création
Nous avons décidé d'organiser le processus de création du projet en travaillant simultanément sur plusieurs axes afin de rester constamment informés de son évolution et d'éviter d'être dépassés, tout en permettant à chacun de commencer à travailler sur des aspects additionnels. Ainsi, nous avons structuré la création en plusieurs étapes :
Semaine 1-3 : Apprentissage des outils (Unity, C#, Python, ML Agent)
Semaine 3-4 : Conception de l'interface
Semaine 5-6 : Conception du jeu
Semaine 7-8 : Création de l'IA "Sachant"
Semaine 9-10 : Création de l'IA "Observateur"
Semaine 11-12 : Création de l'IA "Calculateur"
Semaine 13-14 : Création de l'IA "Calculateur Intelligent"
Semaine 15-16 : Collecte de données des IA
diagramme de Gantt disponible dans cahier des charges technique.