65 votes

L'apprentissage automatique dans l'IA des jeux

Dans l'ancien temps des jeux, je suis sûr que de simples instructions switch/case (dans un sens) auraient fait l'affaire pour la plupart de l'"IA" des jeux. Cependant, comme les jeux sont devenus de plus en plus complexes, surtout au niveau de la 3D, des algorithmes plus complexes sont nécessaires. Ma question est la suivante : de véritables algorithmes d'apprentissage automatique (comme l'apprentissage par renforcement) sont-ils utilisés dans l'IA des jeux à ce stade ? Ou est-ce que cela ne concerne encore que des projets de recherche universitaires (ce que j'ai pu voir) ?

Si ce ne sont pas les algorithmes d'apprentissage automatique, alors qu'est-ce qui motive l'IA des jeux commerciaux de pointe ? S'agit-il simplement d'algorithmes hautement complexes mais statiques (non-ML) qui sont capables de couvrir la plupart des possibilités ? Et si oui, quels types d'algorithmes sont utilisés ?

J'ai toujours été curieux à ce sujet, merci !

Edit : Après y avoir réfléchi un peu plus, je peux clarifier un peu plus. Comment les agents du jeu prennent-ils leurs décisions ? S'ils n'utilisent pas d'algorithmes d'apprentissage en temps réel, est-ce qu'un algorithme d'apprentissage a peut-être été utilisé dans les phases de développement pour produire un modèle (algorithme statique), et ce modèle est ensuite utilisé pour prendre des décisions dans le jeu ? Ou bien un algorithme statique pour la prise de décision a-t-il été codé à la main, en un sens ?

60voto

Kylotan Points 14114

Je pense que vous surestimez les capacités de la plupart des IA des jeux modernes ; ce qui est génial, car c'est exactement ce que les développeurs de jeux modernes espèrent. Ils investissent du temps pour que le système semble plus intelligent qu'il ne l'est, par exemple en faisant parler les personnages de l'IA sur ce qu'ils vont faire, ou en suivant occasionnellement des scripts préétablis qui exécutent une série complexe de tâches.

Si ce ne sont pas les algorithmes d'apprentissage automatique les algorithmes d'apprentissage automatique, alors qu'est-ce qui l'IA des jeux commerciaux de pointe ? Est-ce que Est-ce simplement des algorithmes hautement complexes mais statiques mais statiques (non-ML) qui sont capables de couvrir la plupart des possibilités ?

Il y a en fait très peu de possibilités en général. Comme mentionné dans une autre réponse, il s'agit généralement d'une machine à états finis. Par exemple, un ennemi typique dans un jeu de tir peut être dans l'un des états suivants : inactif, alerte (il sait qu'il y a des problèmes à proximité), chasseur (il cherche un ennemi), attaquant (il peut voir l'ennemi et l'engager) et fuyant (il tente d'échapper à un ennemi). Les transitions entre les états peuvent être de simples événements tels qu'un bruit entendu, un adversaire aperçu, une valeur de santé tombant sous un certain seuil, etc. C'est très banal, vraiment.

La mise en œuvre de chaque état peut généralement être décomposée en un petit nombre d'actions simples, par exemple : se déplacer vers une position, regarder dans une direction, tirer sur une cible, etc. Ces activités de bas niveau sont bien documentées et largement utilisées. (ex. recherche A* pour le pathfinding, mathématiques vectorielles pour la direction et l'orientation). Tous ces éléments de base fonctionnent aussi bien en 3D qu'en 2D, pour la plupart.

De plus, l'IA d'apparence plus complexe est souvent scriptée, c'est-à-dire que son comportement est préprogrammé dans un langage de programmation simple pour fonctionner dans une situation de jeu très spécifique. Les scripts pour des situations spécifiques peuvent faire des hypothèses sur l'environnement (par exemple, l'emplacement d'un couvert derrière lequel se cacher, la proximité des alliés et des ennemis, etc) et peuvent fournir des objectifs très spécifiques en conséquence. Des scripts plus généraux peuvent être déclenchés par un ensemble de types d'événements prédéterminés (ex. Ennemi vu, Allié tué, Bruit non identifié entendu) et des réponses très simples écrites dans chaque cas (ex. IF self.health > 75% THEN attackNearestEnemy ELSE fleeToSafety).

...était un algorithme d'apprentissage peut-être utilisé dans les étapes de développement pour produire un modèle (algorithme statique), et ce modèle est ensuite utilisé pour prendre des décisions dans le jeu ?

C'est assez courant dans les situations de modélisation de véhicules, comme les jeux de course - vous pouvez fournir à un algorithme le circuit de course sous la forme d'une série de points et d'entrées basées sur ces points, et demander à un algorithme d'apprentissage de développer une stratégie permettant de boucler les tours dans le meilleur temps. Au final, vous pouvez expédier cela avec le jeu. Mais il s'agit d'un simple mappage d'un petit nombre d'entrées (angle de la route, proximité des obstacles, vitesse actuelle) à un petit nombre de sorties (vitesse souhaitée, direction souhaitée), qui se prête bien à l'apprentissage automatique. Les jeux qui simulent le comportement humain peuvent rarement s'appuyer sur ces approximations de fonctions simples, et nous avons donc tendance à recourir à la simulation manuelle d'états comportementaux distincts.

Il est parfois possible d'adopter une approche hybride, dans laquelle les transitions de la machine à états finis peuvent être entraînées pour être plus optimales, mais il est peu probable que cela se produise dans de nombreux jeux en pratique, car les transitions réalistes sont généralement faciles à mettre en œuvre pour un concepteur.

21voto

Joel Martinez Points 22924

16voto

Skizz Points 30682

Il est inutile d'avoir une IA dans les jeux, du moins dans la plupart des jeux grand public, car l'IA deviendrait très facilement trop difficile à battre et ne serait donc pas agréable pour le joueur. Une grande partie des efforts déployés dans l'IA des jeux se divise en trois parties : la première consiste à permettre à l'ordinateur de tricher, c'est-à-dire que l'IA sait généralement où se trouve le joueur et connaît à l'avance les meilleurs itinéraires dans l'environnement. C'est nécessaire, sinon l'IA se retrouverait tout le temps dans des impasses, ce qui n'est pas génial. L'autre grand effort de l'IA consiste à rendre les PNJ suffisamment stupides pour que le joueur puisse les battre. Il est assez facile d'écrire une IA qui bat toujours le joueur (pensez à Half Life où vous affrontez une équipe de marines), la partie la plus difficile est d'équilibrer l'apparence de l'IA avec la jouabilité. Enfin, il faut s'assurer que l'IA ne consomme qu'une quantité limitée de ressources, tant en termes de temps CPU que d'utilisation de la mémoire.

Un autre point négatif de l'utilisation de ML est que l'état de l'IA doit être stocké entre les sessions, sinon l'IA devra repartir de zéro à chaque fois. Sur un PC, ce n'est pas un problème, mais sur les consoles, le stockage à long terme était très limité, ce qui excluait la sauvegarde des informations d'état.

Un exemple de "tricherie" de l'IA : Dans Transport Tycoon, les entreprises de l'IA n'étaient jamais facturées pour avoir modifié la hauteur du terrain. Je le sais parce que je l'ai porté sur Mac il y a de nombreuses années.

Dans le premier FPS que j'ai créé, l'IA se dirigeait toujours vers le joueur, mais la direction était pondérée à l'aide d'un échantillon aléatoire issu d'une distribution normale, de sorte que la plupart du temps la direction était vers le joueur, mais occasionnellement la direction était très éloignée - cela aidait l'IA à se sortir des impasses. C'était à l'époque où il n'y avait pas assez de grognements dans le CPU pour faire des recherches A*.

8voto

chaos Points 69029

Recherche A et des choses relatives appelées HPA* sont probablement le concept d'IA le mieux compris de l'industrie du jeu. Ils sont généralement considérés et décrits comme des algorithmes d'orientation vers le terrain, mais de temps en temps, quelqu'un réalise qu'ils peuvent être utilisés pour l'orientation dans des espaces tels que les arbres de décision, et là, les choses deviennent vraiment intéressantes.

5voto

ojrac Points 6897

Si vous voulez en savoir plus sur les différentes IA, je me suis amusé avec Xpilot-AI . Le robot "vedette" construit par les responsables du projet était un contrôleur à règles fixes, lui-même issu d'un algorithme génétique. Voici comment ça s'est passé :

  • Ils ont construit un robot de base basé sur des règles (si nous sommes sur le point de frapper le mur, tourner à gauche et mettre les propulseurs à fond...).
  • Ils ont décomposé le contrôleur du robot en paramètres (Ainsi, au lieu d'une condition fixe "sur le point de frapper le mur", vous la décomposez en "distance au mur < X", "notre cap est à moins de Y degrés du mur" et "vitesse > Z").
  • Des algorithmes génétiques ont été utilisés pour former les valeurs optimales de X, Y, Z, etc.
  • Après une période d'apprentissage, les valeurs ont été copiées dans la source du bot, et celui-ci a été déclaré "terminé".

Ainsi, si l'apprentissage actif peut s'avérer coûteux en termes de calcul en milieu de partie, il est toujours utile d'utiliser des algorithmes d'apprentissage pour créer votre IA, si vous ne pensez pas pouvoir la rendre assez intelligente.

Un autre avantage des algorithmes génétiques est que vous pouvez définir le résultat "correct" comme un bot qui gagnera 15 % du temps, pour entraîner un bot en mode facile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X