Si vous n'avez pas de notions en algorithmique, il est recommendé de lire cette introduction, avant d'aborder le présent exposéL'Intelligence Artificielle
Qu'est ce que c'est ?
C'est certainement l'une des définitions les plus difficiles à donner étant donné que l'intelligence artificielle, à l'heure actuelle, n'existe pas.
Essayons de décomposer le groupe nominal :
Artificielle : fém de artificiel
Artificiel
"Le terme artificiel se rapporte à tous ce qui n'est pas naturel et implique généralement que cela a été créé ou fabriqué par la main de l'homme." Src WPQuelque chose d'artificiel est donc quelque chose qui n'est pas naturel et qui a été conçu par l'homme.
Penchons nous à présent sur l'intelligence, terme beaucoup plus vaste et compliqué à définir ; on peut étaler une quantité de citations de toutes époques :
L'intelligence, c'est ce qui permet d'entendre une musique là où d'autres n'entendent qu'un bruit. J.C Terrassier
L'intelligence est la capacité à comprendre un contexte nouveau, et à réagir à cette nouvelle situation de façon adaptée. R.Atkinson
L'intelligence, ça n'est pas ce que l'on sait mais ce que l'on fait quand on ne sait pas. J.Piaget
mot inventé par l'homme pour définir ce qu'il considère le rendre différent des animaux H.Reaper
Mais ça ne rend pas pour autant les choses plus claires, pourtant, le but de cet exposé, c'est que les gens comprennent ; on va donc sortir un petit peu du contexte absolu de l'intelligence ; et on va tenter de la définir avec nos mots à nous (pléonasme volontaire =) ;
l'intelligence, c'est l'aptitude :
- à réagir en conséquence de situations diverses
- à comprendre des messages ambigus
- à relativiser l'importance des différents élements d'une situation
- à réaliser une analogie entre des situations similaire ou différentes
- à optimiser ou à améliorer des concepts passés
- à trouver des idées
Ainsi on peut dire que l'intelligence artificielle c'est une aptitude créée par l'homme et capable de reproduire le comportement qui le caractèrise (l'homme).
Aujourd'hui, et depuis de nombreuses années, le but de nombreux programmeurs est d'être le premier à réaliser une intelligence artificielle ; mais comment valider le fait que l'élément créé répond bel et bien aux caractèristiques de l'intelligence ? Très simple, si l'intelligence est ce qui caractèrise l'homme, alors quand on ne saura pas différencier une intelligence artificielle d'une intelligence humaine, l'intelligence artificielle existera.
Mais nous sommes déjà partis bien loin, puisque comme je l'ai dis plus haut, il n'existe pas aujourd'hui d'intelligence artificielle, est-ce donc là la fin de l'exposé ? =)
Hé non, car si, certes, l'intelligence artificielle n'existe pas, l'homme est capable de la simuler ou de donner l'impression jusque dans une certaine limite, de l'existence d'une forme d'intelligence.
C'est de ce type de simulation, et dans le contexte des jeux vidéo, que nous allons aborder et étudier ici.
L'IA artificielle dans un jeu vidéo fonctionne selon le cycle suivant :
Perception => Réflexion => Action
Reprenons l'exemple de Yus : " tu te ballades dans une ruelle sombre, et tu passes devant une lumière, là un bandit perçoit cette modulation et commence à vouloir te taper ..."
- Code:
-
Début
Perception du joueur dans la lumière
Réflexion sur l'action à effectuer en fonction de la situation //attaquer, s'enfuir, ne pas bouger
Action (celle determinée par la réflexion)
Fin
On peut écrire ceci en une ligne mais c'est plus complexe et inutile dans cet exposé :
Début
Perception(Action(Reflexion(situation)))
Fin
Ainsi, et d'une façon générale dans les jeux vidéos, l'intelligence artificielle fonctionne toujours sur ce principe basique : l'IA perçoit quelque chose, il en tire une conclusion sur ce qu'il doit faire et enfin, il fait.
Maintenant que nous avons décomposé la globalité de l'IA, interressons nous, plus en précision, à chacun de ces éléments.
La perceptionTout dabord, que perçoit une IA et comment perçoit elle ?
une IA perçoit un événement; un événement est d'une façon générale, changement d'état; de la même façon que votre radio réveil sonne quand il passe de 5:59 à 6:00, ce qui le déclenche, c'est le changement d'état ;
On peut ensuite rajouter des conditions à ce changement d'état, en effet, votre réveil ne se met pas à beugler toutes les heures ou toutes les minutes (du moins je vous le souhaite). C'est par ce qu'il y a une condition sur le changement d'état : il faut qu'il y ai changement d'état et que l'état nouveau soit égal à un état préindiqué.
changement d'état de 5:59 à 6:00
état préindiqué: 6:00
BIM la radio s'enclenche on est réveillé par les conneries matinales de la radio.
la radio sera ici une forme d'intelligence artificielle :
perception >> reflexion >> action
même si j'en conviens, le niveau de reflexion à ce stade du problème nous rappelle un petit peu celui de Jede.
N'en reste pas moins vrai qu'il y a dabord, perception d'un changement d'état ainsi que présence d'un état préindiqué.
"Reflexion": "je suis en mode Radio ? en mode Buzzer ? quel volume ? combien de temps ? etc"
Action : enclenchement de tout ce qui a été décidé durant la phase de reflexion.Prenons un cas simple dans un jeu vidéo :
Un monstre dans un couloir, vous passer dans son champ de vision, bim, il vous attaque.
La perception ici se fait au niveau de la vision :
Le monstre a un champ de vision en 3D, c'est donc un volume, si l'un des points qui constituent le personnage 3D du joueur rentre dans se volume, il y a changement d'état d'une variable vers une variable prédindiquée :
- Code:
-
entier IdMonstre = 0
entier Perception = 0
Début
Plein de code avant
Si Perception > 0
Action ( Reflexion(IdMonstre,Perception) )
Fsi
Plein de code après
Fin
Dans cet algo, nous avons deux variables globales : IdMonstre et Perception ;
Une variable globale est une variable qui peut être modifiée par n'importe qui et lue par n'importe qui, au sein du même programme/jeu.
Ici, le moteur 3D, qui calcule à chaque instant la position de chaque point du jeu, y compris le champ de vision du monstre et la position du joueur, fera passer à 1 la variable Perception, si il entre dans le champ de vision d'un monstre ; il placera dans IdMonstre, le numéro d'identification du monstre (chaque monstre a un numéra unique qui permet de l'identifier).
Ainsi, lorsque le joueur entre dans le champ de vision, Perception passe à 1, il est donc supérieur à 0, la condition est donc remplie, le programme lance la procédure de reflexion, avec comme premier paramètre l'identification du monstre, et comme second paramètre, le type de perception.
Car si une valeur '1' pour perception signifie que le joueur a été vu, une valeur '2' peut signifier qu'il a été entendu, '3' qu'il a été sentit, '4' qu'il est entré dans une certaine pièce... etc etc...
Le niveau de perception est donc réalisé, on détecte la présence du joueur, on sait qui l'a détecté, et on sait comment il a été détecté.
La perception liée à la lumière ou autre n'est que partiellement gérée par l'intelligence artificielle, c'est le moteur 3D (qui gère également l'éclairage) qui va informer l'IA de la quantité de lumière qui éclaire un joueur.
nous aurons alors plus de paramètres dans la procédure :
Reflexion(IdMonstre,Perception,Information)
Ici, la variable Information peut contenir des... informations, relative au type de perception et necessaire à la reflexion.
Je ne vais pas détailler le fonctionnement de l'éclairage 3D ici, c'est assez complexe et ce n'est pas le sujet ; d'une façon générale, l'éclairage est géré par des volumes de lumière, le centre d'un volume est la source de lumière, on y a un niveau d'éclairage de 255, en dehors d'un volume de lumière, le niveau d'éclairage est de 0
Le joueur a un centre, la position de ce centre définit son niveau d'éclairage, plus il se rapproche d'une source de lumière plus il va se rapprocher de 255, si il en est très loin il sera à 0. si il est à mis chemin, il sera à 127.
Quand un joueur passe dans le champ de vision d'un monstre, le moteur3D envoit la perception 1, l'Id du monstre, et le niveau d'éclairage du joueur. Ensuite, c'est durant la phase de reflexion qu'il sera décidé si oui ou non le joueur a été vu par le monstre.
La reflexiondéjà nous savons à quoi ressemble la procédure qui va appeller la reflexion :
- Code:
-
entier IdMonstre = 0
entier Perception = 0
enter Information = 0
Début
Plein de code avant
Si Perception > 0
Action ( Reflexion(IdMonstre,Perception,Information) )
Fsi
Plein de code après
Fin
La déclaration de la procédure Reflexion ressemble à ça :
Reflexion(IdMonstre,Perception, Information) : Handle
nous avons vu précédement les 3 paramètres de la procédure ;
la variable retournée Handler, est une structure, elle contient de nombreuses informations à elle seule.
Une structure est une variable qui contient d'autre variables :
- Code:
-
structure Hdr {
entier Action
entier IdMonstre
}
// ci-dessus, nous avons défini une variable Hdr, nous pouvons à présent utiliser cette variable comme n'importe quelle autre variable :
Hdr Handle
// cette variable a tout de même une particularité plus qu'elle comporte elle même des variables, pour y accéder il faut procéder comme il suit :
Handle.Action = 0
// ici, j'ai mis 0 dans la variable Action de la structure Handle de type Hdr.
Revenons à la procédure Reflexion(), quel est son rôle ?
Elle doit, à partir des paramètres fournis, décider de l'action à effectuer et la retourner.
- Code:
-
Reflexion(IdMonstre,Perception,Information) : Handle
Début
Hdr Handle
Si(Perception != 0) alors
Hdr.action = Perception*1000 + Information*10
Hdr.IdMonstre = IdMonstre
Fsi
Sinon
Hdr.action = 0
Fsinon
retourner Hdr
Fin
Dans cet algorithme, nous remarquons que chaque variable est modifiée par Perception*1000 et Information*10 ; de cette façon on peut retrouver ces 2 variables bien qu'elles soient stockées dans une seule variable de même taille :
si Perception vaut 2 et que information vaut 3 alors Hdr.action vaudra 2030
on retrouve le 2 dans les milliers et le 3 dans les dizaines.
il n'y a pas plus de 10 types de perceptions ou 100 types d'informations.
Ainsi on obtient en final, une variable Hdr qui contient qui (Hdr.IdMonstre) doit faire quoi (Hdr.Action), cette variable est retournée est directement lue par la fonction Action().