_SPÉCIFICATIONS DU PROJET
_OBJECTIFS
_
L'objectif de ce projet est de concevoir et développer une intelligence artificielle pour différents agents dans un prototype de jeu à venir. Le prototype est un jeu de stratégie et de commerce dans un décor de science-fiction. Des flottes de vaisseaux volent vers diverses stations spatiales, faisant du commerce mais aussi combattant les flottes ennemies et les pirates.
Même si le prototype de jeu en lui-même est d'une si grande envergure qu'il ne pourrait pas être développé dans les limites du temps imparti et avec les contraintes imposées au niveau des ressources disponibles, il a été divisé en plus petites sous-parties. Ce projet sera axé sur la partie intelligence artificielle.
Le défi principal sera de développer un système de guidage qui conduira les vaisseaux vers leur destination. La technique qui devrait être utilisée est le "tactical path-finding". Cela consiste non seulement en la recherche du chemin le plus court, mais prend aussi en compte divers autres paramètres, tels que la difficulté du terrain à franchir, la proximité d'autres d'agents, etc. Le poids de ces facteurs permettra à différents types d'agents de choisir une route adaptée, dépendant de leurs préférences.
En dernier lieu, après avoir défini plusieurs "factions" au sein de cet environnement, les vaisseaux pourraient être capables de planifier leur propre circuit passant par les stations commerciales dans le but de faire du profit. La méthode pour implémenter cette fonctionnalité pourrait ajouter trop de complexité au projet, c'est pourquoi elle est évoquée en dernier. Il est supposé que divers ensembles de règles, similaires à celles utilisées par les Systèmes Experts, pourraient être employées pour des actions telles qu'acheter et vendre des marchandises.
Afin de ne pas perdre de temps avec le besoin de concevoir entièrement un moteur de rendu, il a été décidé que le moteur Unity serait utilisé pour implémenter le prototype.
L'objectif de ce projet est de concevoir et développer une intelligence artificielle pour différents agents dans un prototype de jeu à venir. Le prototype est un jeu de stratégie et de commerce dans un décor de science-fiction. Des flottes de vaisseaux volent vers diverses stations spatiales, faisant du commerce mais aussi combattant les flottes ennemies et les pirates.
Même si le prototype de jeu en lui-même est d'une si grande envergure qu'il ne pourrait pas être développé dans les limites du temps imparti et avec les contraintes imposées au niveau des ressources disponibles, il a été divisé en plus petites sous-parties. Ce projet sera axé sur la partie intelligence artificielle.
Le défi principal sera de développer un système de guidage qui conduira les vaisseaux vers leur destination. La technique qui devrait être utilisée est le "tactical path-finding". Cela consiste non seulement en la recherche du chemin le plus court, mais prend aussi en compte divers autres paramètres, tels que la difficulté du terrain à franchir, la proximité d'autres d'agents, etc. Le poids de ces facteurs permettra à différents types d'agents de choisir une route adaptée, dépendant de leurs préférences.
En dernier lieu, après avoir défini plusieurs "factions" au sein de cet environnement, les vaisseaux pourraient être capables de planifier leur propre circuit passant par les stations commerciales dans le but de faire du profit. La méthode pour implémenter cette fonctionnalité pourrait ajouter trop de complexité au projet, c'est pourquoi elle est évoquée en dernier. Il est supposé que divers ensembles de règles, similaires à celles utilisées par les Systèmes Experts, pourraient être employées pour des actions telles qu'acheter et vendre des marchandises.
Afin de ne pas perdre de temps avec le besoin de concevoir entièrement un moteur de rendu, il a été décidé que le moteur Unity serait utilisé pour implémenter le prototype.
_OBJECTIFS MINIMAUX:
_Obtenir des déplacements sans collisions dans un environnement affichant un nombre massif d'agents guidés par intelligence artificielle. Démontrer également l'utilisation du moteur Unity (scripts IA, controles au clavier...).
_OBJECTIFS ATTENDUS:
_Implémenter les objectifs minimaux, plus les facteurs tactiques pris en compte. Essayer différentes approches pour qu'elles puissent etre comparées voire confrontées l'une a l'autre.
_OBJECTIFS FACULTATIFS:
_Implémenter les objectifs attendus, et s'il reste du temps et que les résultats sont bons, développer des techniques de prise de décision supplémentaires et des planificateurs de comportement, avec des fonctionnalités comme la gestion du commerce, des routes d'embuscade et d'évasion pour les flottes, différents types de vaisseaux avec des roles spécifiques (transporteur de ressources, croiseur de combat, chasseur d'escorte...).
_TECHNOLOGIES A RECHERCHER:
_• Moteur de jeu Unity.
• Recherche de chamin tactique; heuristiques tactiques, graphes et noeuds.
• Systemes Experts (basés sur les regles).
• Recherche de chamin tactique; heuristiques tactiques, graphes et noeuds.
• Systemes Experts (basés sur les regles).
_PLANNING PRÉVISIONNEL:
_Novembre – fin Janvier: Analyse.
Janvier - Février: Conception.
Janvier - Mars: Implémentation.
Fin Janvier: Prototype trivial implémenté (mini application avec Unity).
Fin Février: Prototype basique implémenté (simple A* path finder, facteurs tactiques basiques).
Fin Mars: Prototype avancé implémenté (fonctions heuristiques tactiques plus avancées).
Avril: Finitions et écriture du Rapport.
Janvier - Février: Conception.
Janvier - Mars: Implémentation.
Fin Janvier: Prototype trivial implémenté (mini application avec Unity).
Fin Février: Prototype basique implémenté (simple A* path finder, facteurs tactiques basiques).
Fin Mars: Prototype avancé implémenté (fonctions heuristiques tactiques plus avancées).
Avril: Finitions et écriture du Rapport.
PREMIER PROTOTYPE TRIVIAL (Janvier)
Le premier prototype trivial est maintenant implémenté avec Unity. Une simple tuile carrée y est représentée avec neuf "bases"; une à chaque coin du carré, une au milieu de chaque côté et une au centre. Il y a quatre agents représentés par des cylindres, initialement positionnés à chaque coin de la carte. Un projecteur lumineux bleu illumine la position d'un curseur avec lequel l'utilisateur peut sélectionner et déplacer les agents d'une base à l'autre.
Le curseur peut etre manipulé avec les touches 1-9 du pavé numérique. La position des touches sur le pavé numérique du clavier correspond à l'emplacement des bases sur la carte. Le curseur est utilisé pour choisir à la fois l'origine et la destination du mouvement alternativement. Le programme est capable de détecter si la destination n'est pas déja occupée par un autre agent afin d'exécuter le déplacement.
Le curseur peut etre manipulé avec les touches 1-9 du pavé numérique. La position des touches sur le pavé numérique du clavier correspond à l'emplacement des bases sur la carte. Le curseur est utilisé pour choisir à la fois l'origine et la destination du mouvement alternativement. Le programme est capable de détecter si la destination n'est pas déja occupée par un autre agent afin d'exécuter le déplacement.
_Cette démo utilise seulement les positions dans le monde pour exécuter les mouvements. pour l'instant il n'y a pas de véritable grille implémentée. A l'avenir, une structure de graphe sera ajoutée par-dessus le code existant pour permettre aux agents de trouver un chemin libre à travers les noeuds représentés par les bases, afin d'atteindre leur destination. C'est à ce moment que la véritable Intelligence Artificielle sera implémentée.
DEUXIEME PROTOTYPE BASIQUE (Mars)
Le second prototype fonctionne et inclut un algorithme basique de recherche de chemin A-star implémenté sur les agents, représentés dorénavant par des fruits. Une structure de graphe est utilisée pour stocker les données relatives à la grille de noeuds. Les agents vérifient que la prochaine étape voulue n'est pas déja occupée par un autre agent afin de la sélectionner comme prochaine étape du chemin en direction de la destination. Sur les deux dernières prises d'écran, la pomme est bloquée et ne peut trouver un chemin menant à la base de droite.
TROISIEME PROTOTYPE POUR EXPO-TEES (fin Avril)
Le troisième prototype publié début Mai incluait la plupart des fonctionnalités attendues dans les spécifications du projet.
L’algorithme de recherche de chemin était pleinement opérationnel et fournissait des chemins en rapport avec les heuristiques qui étaient auparavant passées par les scripts aux objets ayant un composant agent d’IA. Le diagramme de classes UML qui peut être trouvé en Annexe B du rapport détaille les associations entre les composants principaux du programme.
L’environnement construit pour cette version était bien plus complexe que les scenes prévédentes qui ne contenaient qu’une poignée de noeuds basiques. Pour ce prototype, il y avait une grande grille de nœuds sur lesquels des modèles en 3D variés et détaillés représentaient différents types de terrain et différents agents.
Le système de sélection et de curseur fut modifié pour utiliser la position du curseur de la souris, ce qui est beaucoup plus pratique pour le case des jeux de type RTS. En faisant un clic gauche sur un agent contrôlable, représenté par les navettes spatiales, l’utilisateur pouvait le sélectionner pour le prochain mouvement. Si un agent valide était sélectionné, la couleur de la lumière qui illuminait la position du curseur virait de blanc à bleu. Puis, en faisant un clic droit sur une autre position sur le terrain, le nœud valide le plus porche était sélectionné comme destination et une requête était envoyée au script chercheur de chemin pour produire un itinéraire. Si une route valide existait, la lumière devenait brièvement verte avant de redevenir blanche. Toutefois, l’agent déplacé précédemment restait sélectionné afin que l’utilisateur puisse requérir une autre destination n’importe où ailleurs sur la carte, jusqu’à ce qu’il/elle choisisse un autre agent.
Le problème principal de cette version était l’espacement trop important des nœuds sur la grille, produisant des fossés entre eux. Les agents localisés entre les nœuds n’étaient pas détectés assez précisément sur la grille lors de la vérification du statut d’occupation des nœuds.
De plus il n’y avait pas d’indication visuelle du chemin pris par les agents et de la ligne de vue des ennemis (voir images ci-après).
VERSION FINALE DU PROTOTYPE
Pendant le court laps de temps après l’exposition et avant la date de rendu, le prototype a été ajusté pour que les nœuds soient plus proches les uns des autres et couvrent deux fois plus de surface. Quelques fonctionnalités visuelles ont aussi été ajoutées afin d’afficher la route fournie par l’algorithme (lignes vertes sur les images) mais aussi la ligne de vue des ennemis (lignes rouges qui tournent comme sur un radar). Ces affichages n’apparaissent pas dans l’application exportée mais seulement dans l’éditeur d’Unity car ils font partie d’un outil de débuggage.
Les schémas suivants résument le fonctionnement de l’algorithme d’IA tel que présenté dans la version finale du programme exporté.
Deux types de vaisseaux jouables différents étaient implémentés sur cette carte, les vaisseaux verts et les vaisseaux blancs. Les agents verts étaient lents et préféraient naviguer près des ennemis plutôt que de traverser les terrains difficiles. Les agents blancs adoptaient l’attitude opposée. Plus rapides que les vaisseaux verts, ils associaient un plus fort coût aux rencontres avec les ennemis et préféraient naviguer au travers des astéroïdes pour avoir un itinéraire plus sûr (voir images ci-après).
Les schémas suivants résument le fonctionnement de l’algorithme d’IA tel que présenté dans la version finale du programme exporté.
Deux types de vaisseaux jouables différents étaient implémentés sur cette carte, les vaisseaux verts et les vaisseaux blancs. Les agents verts étaient lents et préféraient naviguer près des ennemis plutôt que de traverser les terrains difficiles. Les agents blancs adoptaient l’attitude opposée. Plus rapides que les vaisseaux verts, ils associaient un plus fort coût aux rencontres avec les ennemis et préféraient naviguer au travers des astéroïdes pour avoir un itinéraire plus sûr (voir images ci-après).