LES RÉSEAUX NEURONAUX: APPLICATIONS À LA SYNTHÈSE


Les réseaux de capteurs actuateurs
Évolution de créatures virtuelles
Marche comportementale

















































Les réseaux de capteurs actuateurs


       Introduction

       Capteurs et actuateurs

       Le réseau de capteurs-actuateurs

       Résultats

       Simulation physique

       Comportement

       Évolution

       Mélange

       Résultats

Introduction

         Ce texte s´inspire de [VAN de PANNE et FIUME 1993].
         Les modèles dynamiques d´animation sont utilisés depuis assez longtemps en synthèse, en particulier pour tout ce qui concerne les simulations réalistes. Si ces simulations ne posent plus guère de problèmes, il n´en va pas de même pour ce qui est du contrôle: Traditionnellement ces modèles gèrent des couples exercés par exemple aux joints d´un corps articulé, en optimisant une fonction de but (comme "aller à un endroit donné d´une certaine façon"). En réalité ce sont des muscles, controlés par le cerveau, qui agissent sur le squelette. Ce contrôle tient compte des informations envoyées par les organes des sens ainsi que d´un "comportement" propre à ce corps. Une méthode consiste alors à synthétiser un contrôleur prenant des décisions en fonction des informations que lui envoient des capteurs et faisant usage de feed-back, au lieu de calculer des trajectoires.
         Les SANs ("Sensor-actuator networks") sont une nouvelle approche de l´animation basée sur la physique. Ce sont des réseaux non linéaires de neurones connectés par des poids variables. Ces neurones sont de deux sortes: Les capteurs en entrée et les actuateurs en sortie.

Capteurs et actuateurs


              Configuration d´une créature

              Les capteurs

              Les actuateurs

Configuration d´une créature

         Expliquons le fonctionnement des SANs sur un exemple. Soit une créature constituée de 5 membres, de 8 capteurs binaires et de 4 actuateurs angulaires qui passent leurs valeurs à des contrôleurs de type ressort (entre la position désirée et la position actuelle) (voir figure 6-1)


Figure 6-1

Les capteurs

         Les capteurs sont binaires (délivrent la valeur 0 ou 1) et sont de plusieurs types:
         1) Ceux détectant des contacts.
         2) Ceux déterminant si un l´angle d´un membre avec celui auquel il est attaché est compris entre une valeur minimale et une valeur maximale.
         3) Un capteur de type "oeil" détermine si le point de visée est dans son cône de vision.
         4) Des capteurs de longueur déterminent si une distance est comprise entre deux valeurs extrêmes.
         Ces capteurs sont ajoutés au modèle mécanique de la créature selon les besoins: Les capteurs de contact peuvent être placés sous les pieds de l´animal, les capteurs angulaires permettent de contrôler les angles des membres entre eux, le capteur visuel peut être utilisé pour diriger la créature (en lui faisant suivre un point), enfin les capteurs linéaires peuvent servir à détecter des distances. Le nombre de capteurs doit être pris en compte: Pas assez ne permet pas un contrôle intéressant, mais trop peut conduire à des problemes de complexité.
 capteur  type  joint  min  max
 S1  contact      
 S2  contact      
 S3  angle  2  -180  -10
 S4  angle  2  25  180
 S5  angle  3  -180  -80
 S6  angle  4  -180  42
 S7  angle  4  55  180
 S8  angle  5  -180  -105

Les actuateurs

         Les actuateurs sont de deux types:
         1) Les actuateurs angulaires définis sur un membre et contrôlant l´angle de celui-ci avec le membre auquel il est attaché. Il s´agit d´un ressort défini par une raideur kd et une viscosité ks et générant le couple (an0 est l´angle désiré, an est l´angle actuel et an´ est la vitesse angulaire):
         C = kd * (an0 - an) - ks * an´
         On choisit généralement kd et ks de façon à ce que kd / ks = 0.1 par exemple ks = 0.4 et kd = 0.04
         2) Les actuateurs linéaires sont des ressorts linéaires exerçant une force (L0 est la longueur desirée, L est la longueur actuelle et v est la vitesse du déplacement):
         F = ks * (L0 - L) - kd * v
         Les actuateurs sont contraints à évoluer entre deux limites.
 joint  masse  actuateur  min  max  ks  kd
 L1  1.0  A1  -20  30  0.4  0.01
 L2  0.15  A2  -85  -55  0.4  0.01
 L3  0.10  A3  40  55  0.4  0.01
 L4  0.15  A4  -110  -105  0.4  0.01
 L5  0.10  A5        

Le réseau de capteurs-actuateurs


              Description

              Génération

Description

         Les SANs produisent un contrôle lorsque l´on connecte les capteurs d´entrée aux actuateurs de sortie par l´intermédiaire d´une couche cachée (voir figure 6-2). Les capteurs sont connectés à tous les autres neurones, la couche cachée et la couche de sortie sont doublement connectées. Chaque cellule somme ses entrées pondérées et répond 1 si cette somme est positive sinon elle répond 0.


Figure 6-2

         Afin de simuler un comportement dynamique, un délai a été ajouté au moyen d´une fonction d´hystérésis dépendant de deux paramètres k1 et k2:
         sum = 0
         for (each input i)
         sum += weight[i] * input[i]
         if (sem > 0)
                  istate += k1 * dt
         else
                  istate += k2 * dt
         if (istate > 1.0) istate = 1.0
         if (istate < 0.0) istate = 0.0
         if (output == 1 &e;&e; istate == 0.0) output = 0
         if (output == 0 &e;&e; istate == 1.0) output = 1
         La sortie délivrée par les actuateurs est d´abord bornée entre deux valeurs fixes puis mappée linéairement sur l´intervalle de variation angulaire (ou de distance). Les délais sont donnés par: Ton = 1 / k1 et Toff = -1 / k2 (k2 < 0). Pratiquement on peut prendre Ton = Toff = 0.25 * Tc avec Tc = durée du cycle.

Génération

         1) Une fonction d´évaluation permet de "noter" un réseau: Dans le cas de la synthèse de créatures destinées à marcher ce peut être par exemple la distance parcourue dans un temps donné (quelle que soit la direction dans laquelle a lieu le mouvement):
         feval = | x(tfinal) |
         Pour éviter des chutes on annule la fonction si le centre de garvité tombe au dessous d´un certain seuil.
         Pour favoriser une avancee par bonds on tient compte de la moyenne de la hauteur du centre de gravité dans la fonction d´évaluation:

         Enfin, dans le cas d´une créature dirigée par un point de poursuite, on ajoute un coefficient favorisant une direction proche de ce point (avec v = vitesse de la créature et F = vecteur unitaire pointant dans la direction de la poursuite):         


         2) Dans une première phase les poids sont générés aléatoirement, donnant differentes stratégies de marche. On fait l´hypothèse que dans l´espace du très grand nombre de combinaisons possibles des poids il existe des "poches" contenant des configurations intéressantes, mais il n´est pas évident d´orienter la recherche vers ces sous espaces et il est plus avantageux de procéder par titage au sort. La distribution des contrôleurs hiérarchisés par la fonction d´évaluation est une fonction asymptotiquement décroissante: 1 a 5% des SANs aléatoires représentent des mouvements utiles. Le nombre de réseaux utiles décroit lorsque leur complexité augmente.
         3) Dans une deuxième phase les meilleurs contrôleurs sont choisis puis améliorés en ajustant finement leurs paramètres. Ajuster les poids produirait des changements radicaux (à cause de la non linéarite du réseau), et il est préférable d´ajuster les paramètres des capteurs et des actuateurs (k1, k2, min, max, ks, et kd). Deux approches sont envisageables:
         3-1) L´ascension stochatisque du gradient (SGA = "Stochastic Gradient Ascent") qui recherche un optimum local:
         Boucle de 1000 essais
                  Choisir aléatoirement un paramètre p
                  Le perturber de dp=d ou dp=-d
                  Évaluer la nouvelle créature par simulation
                  S´il y a amélioration tenir compte du changement: p+=dp
         3-2) Le recuit simulé (SA = "Simulated annealing") qui recherche un optimum global en acceptant des changements qui n´améliorent pas nécessairement les performences de la créature afin d´échapper à des maximums locaux. Une boucle de 1000 éssais, aucours desquels la température varie selon la loi:
         temp(t + 1) = temp(t) + 0.75* temp(t)
         suffit pour obtenir de bons résultats.
         L´ascension stochatisque du gradient trouve rapidement une solution raisonnable, le recuit simulé trouve plus lentement une meilleure solution.

Résultats

         Van de Panne et Fiume ont appliqués les SANs à une dizaine de créatures relativement simples: Elles sont définies dans un plan et se propulsent en prenant appui sur le sol (stratégie de la marche) ou utilisent les forces de réaction de l´eau sur leurs nageoires (cas des poissons). La conception des réseaux demande une certaine intuition en relation avec les données du problème (définition mécanique de la créature, types des capteurs et des actuateurs). L´utilisation de capteurs binaires produit des couples et forces discontinus. La fonction d´évaluation utilise la distance parcourue en 6 secondes. Les créatures peuvent suivre un point grâce à leurs capteurs binaires de type "oeil" sans qu´il n´ait été nécessaire de leur indiquer une stratégie pour le faire.
         De nouveaux mode de locomotion ont été découverts par ces créatures virtuelles, certaines entièrement originales, d´autres qu´aurait pu inventer la vie, d´autres qui existent effectivement dans le règne animal.
         Une simple chaine à deux éléments peut se mouvoir à condition d´introduire une dissymétrie (par exemple avec des masses différentes). Des créatures plus complexes découvrent des stratégies qui, bien que non optimales en terme de fonction d´évaluation, peuvent être intéressantes. Cependant ce modèle ne saurait s´appliquer à des structures très complexes (comme le corps humain).
         Une des caractéristiques les plus remarquables des SANs est leur robustesse: Les créatures peuvent s´adapter à des environnements variés (comme un sol irrégulier. Une mesure de la robustesse peut être introduite dans la fonction d´évaluation en testant la créature sur différents terrains.

Évolution de créatures virtuelles


       Introduction

       Morphologie

       Contrôle

Introduction

         Ce texte s´inspire de [SIMS 1994].
         En animation de synthèse il est difficile de concilier complexité et contrôle. Par exemple les méthodes cinématiques offrent un contrôle exhaustif mais ne permettent pas de créer des mouvements physiquement plausibles. Par contre les méthodes dynamiques, en simulant les lois de la mécanique, produisent bien des mouvements réels, mais, de part leur automatisme, rendent difficile la réalisation d´événements déterminés d´avance.
         Des méthodes d´optimisation, telles que les algorithmes génétiques, permettent d´automatiser la création de la complexité: Un génotype est une représentation codée d´un individu potentiel. En biologie un génotype est composé de molécules d´ADN et contient les instructions pour le développement d´un organisme. Les algorithmes génétiques utilisent des populations de génotypes constitués de chaines binaires. Ces génotypes sont lus pour produire des phénotypes qui sont évalués et reproduits selon certains critères de sélection (définis par une fonction d´évaluation). De nouveaux génotypes sont générés par copie, mutation et croisement des plus performants d´entre eux, et la population évolue vers des degrés de plus en plue élevés d´adaptation. Lorsque la fonction d´évaluation est définie procéduralement, il s´en suit une certaine perte de contrôle, largement compensée par le fait que l´utilisateur n´a pas à connaître le processus de création ni ses paramètres.
         Ici des créatures 3D, dont le comportement est entièrement basé sur des modèles physiques, évoluent au cours du temps, l´optimisation calculant la morphologie (taille, contraintes sur les joints) des créatures ainsi que leurs systèmes de contrôle (capteurs, actuateurs, nombre de neurones et types de leurs connexions, fonctions de transferts).

Morphologie

         L´information stockée dans un génotype est ici une hiérarchie d´éléments 3D rigide articulés dont la représentation génétique est un graphe direct. Chacun de ces graphes contient les instructions de développement d´une créature ainsi qu´une méthode de réutilisation récursive de ces instructions. Une hiérarchie phénotype est un graphe défini à partir d´une racine et se développant par exécution des informations stockées dans les noeuds. Les noeuds peuvent être connectés à eux-memes (cycles) formant ainsi des structures récursives (fractals), ils peuvent aussi avoir des connexions multiples à un même fils formant ainsi une chaine de membres. Chaque noeud contient des informations morphologiques (taille, contraintes avec les parents, nombre de degrés de liberté et les mouvements attachés à chacun d´eux) ainsi que des informations relatives au système nerveux de la créature (neurones) et des pointeurs vers les autres connexions. Chaque connexion contient également des informations (position, orientation et symétrie d´un fils par rapport à son père). La figure 6-3 montre quelques exemples de génotypes et les phénotypes correspondants.


Génotypes                       Phenotypes
Figure 6-3

Contrôle

         Un "cerveau" virtuel est attaché à chaque créature sous la forme d´un réseau de neurones dont les entrées sont des capteurs et dont les sorties sont des effecteurs produisant des forces et des couples aux degrés de liberté des joints (voir figure 6-4)


Figure 6-4

         Chaque capteur appartient à une partie précise du corps et en mesure l´aspect par rapport au corps et par rapport au monde. Il y a plusieurs types de capteurs: Angulaires, de contact et photosensibles.
         Les neurones internes permettent de simuler un comportement arbitraire, ils peuvent effectuer différentes fonctions: Somme, produit, division, seuillage, plus grand que, signe, min, max, abs, if, interpole, sin, cos, atan, log, exp, sigmoide, intégrale, différentielle, lissage, mémoire, oscillateur. Un tel réseau ressemble plus au flot des données d´un programme qu´à un réseau neuronal classique. Le nombre d´entrées d´un neurone dépend de sa fonction.
         Un effecteur reçoit son entrée d´un neurone ou d´un capteur, elle est scalée et seuillée puis est transformée en une force s´exerçant sur un joint, ce qui a pour effet de modifier le comportement dynamique de la créature.
         La description d´un génotype et le phénotype résultant sont tous deux des graphes directes de noeuds et de connexions. Les noeuds sont des capteurs, des neurones ou des effecteurs. Les connexions supportent le flot des signaux entre les noeuds. Ces graphes peuvent être récurrents sibien que le système de contrôle peut avoir des feedbacks, des boucles et des cycles. D´autre part ces éléments neuronaux existent à plusieurs exemplaires dans le corps de la créature. Lorsque celle-ci est synthétisée à partir de sa description génétique, ces éléments neuronaux sont dupliqués en même temps. Ces systèmes de contrôles locaux peuvent être connéctés produisant ainsi un contrôle coordonné.

Simulation physique

         Une simulation dynamique est utilisée pour calculer le mouvement de créatures en interaction avec un monde virtuel 3D: Dynamique de corps articulés, intégration numérique, détection de collisions, réponses aux collisions, friction et effet de viscosité.

Comportement

         Une créature est créée à partir de sa description génétique puis est placée dans un monde virtuel dynamique 3D dans lequel elle est censée optimiser certaines tâches. Le cerveau génére des forces qui le font bouger tandis que des capteurs lui fournissent en retour l´état de son propre corps ainsi que celui du monde. Le comportement physique résultant est alors noté au moyen d´une fonction d´évaluation. Cette note est utilisée par l´algorithme génétique lors de la sélection des meilleurs individus. Voici quelques exemples de fonctions d´évaluation:
         Une simulation d´un environnement liquide peut se faire en supprimant la gravité et en affectant une viscosité au milieu ambiant. L´évaluation mesure la distance parcourue par la créature, en récompensant les nages directes et les mouvements continus.
         Les créatures sont amenées à se deplacer sur un sol en tenant compte d´une force de gravité et de forces de friction. L´évaluation de la marche sur un sol s´obtient en mesarant la vitesse horizontale et en pénalisant les chutes.
         Un comportement de saut peut être sélectionné en mesurant la hauteur maximum audessus du sol de la partie la plus basse de la créature (ou encore la moyenne de cette hauteur durant la simulation).
         Des capteurs de lumière permettent de provoquer un comportement de "poursuite". Plusieurs essais sont réalisés avec une source lumineuse dans différentes positions, et l´evaluation consiste à mesurer la vitesse moyenne de la créature dans la direction de la lumière. À l´issu de l´apprentissage la créature est capable de suivre une lumière mobile.

Évolution

         On crée d´abord une population initiale de génotypes soit aléatoirement, soit à partir d´une population issue d´une autre expérience, soit encore construite manuellement. 1/5 de la population survit à chaque génération, s´il n´y a pas assez d´individus pour la sélection, de nouveaux individus sont générés aléatoirement. À chaque génération les créatures sont créées à partir de leur génotype, puis elles sont evaluées. Les meilleures se reproduisent et leurs enfants prennent la place de celles qui ne survivent pas. Le nombre d´enfants d´une reproduction est proportionnelle à la note des parents. Ils sont générés par copie, mutation et croisement aléatoires.
         Un graphe direct peut être muté de la façon suivante:
         1) Les paramètres internes de chaque noeud sont altérés: Un booléen est remplacé par son complément, un scalaire est incrémenté aléatoirement ou encore changé de signe.
         2) Un nouveau noeud aléatoire est ajouté au graphe, il ne sera utile que si une connexion est générée qui pointe sur lui, sinon il sera supprimé (voir en 5). Ceci permet de faire croître la complexité du graphe.
         3) Les paramètres de chaque connexion sont mutés de la même manière. Les pointeurs de connexions sont transformés aléatoirement de façon à référencer d´autres noeuds.
         4) De nouvelles connexions sont ajoutées et d´autres sont supprimées. Cette opération, qui n´est pas possible avec des réseaux neuronaux, peut ici être réalisée car les graphes morphologiques peuvent avoir un nombre variable de connexions par noeud.
         5) Les éléments non connectés sont éliminés par un "garbage collecting".
         La mutation des graphes composés se fait en mutant d´abord les graphes externes puis les graphes internes car certains paramètres de ces derniers (entrées des neurones) peuvent dépendre de la topologie des premiers.

Mélange

         1) La première méthode de mélange séxuée est le "croisement" à un ou plusieurs points (voir figuer 6-5-a), les connexions de chaque noeud sont copiées avec réassignement aléatoire des connexions qui pointent en dehors.
         2) Une deuxième méthode greffe deux génotypes ensembles en connectant un noeud d´un parent sur un noeud d´un autre (voir figuer 6-5-b).
        


Figure 6-5

Résultats

         Une population de créatures converge souvent vers un résultat homogène en 50 ou 100 passes, mais plusieurs essais successifs peuvent produire des résultats très différents.
         Une sélection avec des critères ésthétiques peut se réaliser soit au niveau des générations elles-mêmes soit après un certain nombre de générations. D´autres méthodes d´évaluation sont envisageables en mesurant l´adaptation à des tâches de plus en plus difficiles, ou même à plusieurs tâches. Une meilleure simulation du biologique sera obtenue par des méthodes de coévolution consistant à mettre en compétition plusieurs populations dans un monde changeant.

Marche comportementale


       Mode d´emploi

       Le corps

       Équilibre

       L´animation

         Ce paragraphe décrit un exemple de marche comportementale contrôlée par des réseaux neuronaux qui a été implementé en langage anyflo.
Voir l´article (Michel Bret 1998):
("une methode comportementale de modelisation et d´animation du corps humain")

Mode d´emploi

         Un exemple d´animation comportementale contrôlée par un réseau neuronal se trouve dans le directory de l´environnement d´anyflo:
         Sur les INDIGOs et les INDYs: cd /oasis/anyflo
         Sur les O2s: cd /pong/anyflo
         Taper simplement: anyflo
         Taper CORPS(): Un help est imprimé.
         Pour réaliser une animation utilisant la matrice des poids du réseau faire: CORPS(1).
         Le corps tente alors de s´adapter en généralisant son apprentissage aux nouvelles configurations créées par un sol mobile. L´animation, générée en temps différé, est ensuite jouée en temps réél.
         Pour rejouer en play back temps réél, taper: CORPS(0)
         Remarques:
         1) CORPS(1,0): Demande de confirmation à chaque image:
         RC: Image suivante
         n: n images
         -1: Stop
         0: Suite sans demande
         2) Pour rejouer en play back:
         CORPS(0): Automatique
         play memoire: Interactivement au clavier
         play memoire souris: Interactivement à la souris (ESCAPE pour sortir)

Le corps

         Une base de données SQUELETTE0.18.vol contient un squelette défini en langage objet: Chaque os est un acteur possédant un "générateur" (invoqué lors de la construction du squelette), un "adaptateur" (invoqué à chaque image pour un placement procédural). L´ensemble des os est structuré hiérarchiquement selon un arbre d´ancrage dont la racine est le premier os trouvé en contact avec le sol. Cette structure peut être redéfinie dynamiquement (par exemple lors d´un changement du pied porteur). Les os sont contraints en position (ancrage), en déplacement angulaire (au moyen de ressorts et d´angles limites) et en évitement de collisions (ne pas traverser les autres éléments du corps). De plus le squelette est placé dans un champ de pesanteur et contraint par des obstacles (par exemple un sol qui n´est pas nécessairement ni plat ni immobile). Il est initialement ancré sur son pied gauche et posé sur le sol.
         Une autre base de données permet de définir un système de muscles qui sont des acteurs générés automatiquement au premier appel et adaptés procéduralement à toute configuration du squelette. Ils sont munis de ressorts leur permettant de se déformer dynamiquement à volume constant.
         Une autre base de données permet de définir une peau Là encore les éléments sont des acteurs: Chaque portion de la peau se tend automatiquement pour envelopper le squelette et les muscles (voir figuer 6-1).


Figure 6-6 Squelette, muscles et peau.


D´autres bases de données permettent de définir les éléments d´une animation "secondaire": Cheveux, vêtements et éléments de décor: Ce sont des acteurs dont le comportement est dicté par le corps. Par exemple les cheveux sont des tuyaux souples obéissant aux lois de la dynamique, astreints à être plantés sur le crane et évitant les collisions avec le corps. De même les vêtements sont des surfaces souples animées dynamiquement avec des contraintes (attaches et collisions).
         Des méthodes de relaxation permettent de définir des configurations initiales à partir desquelles se deroulera l´animation dynamique: Un élément (peau, cheveux, vêtemets, ...) est construit de façon à envelopper largement le corps, puis una animation dynamique virtuelle (le corps étant immobile dans sa position de départ) est lancée jusqu´à ce que cet élément ait atteint une position d´équilibre satisfaisant les différentes contraintes.
        

Équilibre

         L´équilibre est maintenu par une méthode comportementale. Différents capteurs virtuels sont reliés à des modules de prises de décisions:
         1) Des détecteurs de contact. Par exemple lorsqu´un os vient à toucher le sol, un module de réancrage prend cet os comme nouvelle racine de l´arbre d´ancrage. De plus la stratégie de mouvement adoptée dépend de la nature de cet os (s´il appartient à une main ou à un pied la réaction du corps sera différente).
         2) Des capteurs angulaires mesurent les déviations de certains os par rapport à d´autres et des méthodes de correction s´assurent que l´angle de ces os satisfait les contraintes (par exemple le tibia et le fémur ne peuvent pas faire n´importe quel angle).
         Un comportement est implementé sous la forme d´un "projet", ou méthode affectée à un volume, sous la forme:
         1) Un vecteur de positions limites: V = (x1,y1,z1,...)
         2) Une durée du projet ni.
         3) Un compteur cpt.
         À chaque image une telle méthode est exécutée, c´est à dire:
         1) La durée ni, le vecteur V et le compteur cpt sont extraits.
         2) Si cpt >= ni, la méthode est terminée, sinon l´axe limite courant est v = V{cpt}, on calcule alors l´axe y du volume et le couple :
         C = k * vectoriel(y,v)
         k est une constante réglant l´amplitude du couple
         vectoriel(y,v) est un vecteur couple tendant à ramener y sur v.
         Ce projet est donc, par construction, constamment ajusté, il peut de plus être interrompu à chaque instant par un module d´équilibre qui teste les valeurs limites des capteurs. Par exemple le vecteur joignant la racine de l´arbre d´ancrage au centre de gravité du squelette est calculé, si sa pente est supérieure à un certain seuil, un appel au réseau neuronal est déclenché et de nouveaux projets sont générés en fonction de la configuration courante du squelette.
        
         Une boucle d´animation réalise alors les opérations suivantes:
         1) Génération du sol mobile: gen_SOL()
         2) Initialisation du squelette (Rafraichissement des os non dynamiques, initialisation des forces a zéro, redéfinition des ressorts)
         3) Exécution des projets: exec_projet()
         4) Teste des capteurs: exec_capteurs(). Les bords du sol sont testés par exec_bords(), une déséquilibre est testé par equilibre() qui peut décider d´appeler le réseau, enfin différentes corrections sont réalisées par corriger()
         5) Exécution de la dynamique: exec dynamique
         6) Ajustement des os non dynamiques: ajust_axe() et exec_squelette()
         7) Réancrage éventuel (tester un changement d´os porteur): reancrage()
         8) Les méthodes des os ("adapteurs") sont exécutées, ce qui a pour effet de positionner correctement les os en fonction du mouvement du squelette: exec_squelette().
         9) Affichage de la base de données.

L´animation


              Animation comportementale

              Animation connexionniste

              Apprentissage

              Utilisation

Animation comportementale

         Les modules de décisions peuvent modifier le projet courant, ou même l´interrompre pour en lancer un autre, en fonction des informations délivrées par les capteurs. Si ces décisions sont prises par une machine à états faisant correspondre systématiquement une configuration de sortie à un état des capteurs, alors le corps n´est qu´un automate entièrement déterministe et incapable de s´adapter à des situations imprévues.
         Afin de munir le corps d´une certaine "intelligence" un réseau neuronal a été greffé sur la machine à états:

Animation connexionniste

         La couche d´entrée est connectée aux capteurs et la couche de sortie aux modules de décisions, enfin une couche cachée vient s´interposer entre les deux précédentes. L´avantage de cette méthode est d´étendre indéfiniment le nombre, forcément limité, de décisions programmées: En effet le principe de généralisation des réseaux neuronaux garantie un comportement correct pour des entrées non apprises.
         Le fichier RESEAU.fonc réalise un apprentissage sur un réseau constitué:
         1) D´une couche d´entrée de 6 neurones connectés à 4 capteurs angulaires et 2 capteurs de contact:
                  F_g = angle du fémur gauche avec la verticale
                  T_g = angle du tibia gauche avec la verticale
                  F_d = angle du fémur droit avec la verticale
                  T_d = angle du tibia droit avec la verticale
                  L_g = 1 si le pied gauche est porteur, sinon = 0
                  L_d = 1 si le pied droit est porteur, sinon = 0
         2) D´une couche cachée de 8 neurones
         3) D´une couche de sortie constituée de 8 neurones regroupés par couples:
                  (F1_g, F2_g) = projet de mouvement du fémur gauche
                  (T1_g, T2_g) = projet de mouvement du tibia gauche
                  (F1_d, F2_d) = projet de mouvement du fémur droit
                  (T1_d, T2_d) = projet de mouvement du tibia droit
         Comme il a été dit en 6-3-3 ces projets sont des doublets (C1,C2) de positions limites (voir figure 6-7);


Figure 6-7 Réseau neuronal.


Apprentissage

         Les poids du réseau sont initialisés aléatoirement:
                  generer alea masse(-1,1) réseau 1
         18 couples d´apprentissage (entrée,sortie) ont été définis pour des positions caractéristiques du corps. Les entrées sont de la forme:
         entree = (F_g, T_g, F_d, T_d, L_g, L_d)
         et les sorties sont de la forme:
         sortie = ((F1_g,F2_g),(T1_g,T2_g),(F1_d,F2_d),(T1_d,T2_d))

 F_g, T_g, F_d, T_d, L_g, L_d  (F1_g,F2_g),(T1_g,T2_g),(F1_d,F2_d),(T1_d,T2_d)
 1,1,1,1,1,0  (0,0),(0,-.25),(.25,-.25),(-.5,-.25)
 1,1,1,1,0,1  (.25,-.25),(-.5,-.25),(0,0),(0,-.25)
 1,1,1,-1,1,0  (.1,.1),(.1,0),(0,-.25),(-.25,-.25)
 1,1,1,-1,0,1  (0,-.25),(-.5,-.25),(0,.25),(0,-.25)
 1,1,-1,-1,1,0  (0,.25),(0,-.25),(0,-.25),(-.5,-.25)
 1,1,-1,-1,0,1  L=(0,-.25),(-.5,-.25),(0,.25),(0,-.25)
 1,-1,1,1,1,0  (0,.25),(0,-.25),(.5,.25),(-.25,-.25)
 1,-1,1,1,0,1  (.5,.25),(-.25,-.25),(0,.25),(0,-.25)
 1,-1,1,-1,1,0  (0,.25),(0,-.25),(.5,.25),(-.25,-.25)
 1,-1,1,-1,0,1  (.5,.25),(-.25,-.25),(0,.25),(0,-.25)
 1,-1,-1,-1,1,0  (0,.25),(0,-.25),(.25,.25),(-.5,-.25)
 1,-1,-1,-1,0,1  (.25,.25),(-.5,-.25),(0,.25),(0,-.25)
 -1,-1,1,1,1,0  (0,.25),(0,-.25),(.5,-.25),(-.25,-.25)
 -1,-1,1,1,0,1  (.5,-.25),(-.25,-.25),(0,.25),(0,-.25)
 -1,-1,1,-1,1,0  (0,.25),(0,-.25),(.5,.25),(-.25,.25)
 -1,-1,1,-1,0,1  (.5,.25),(-.25,.25),(0,.25),(0,-.25)
 -1,-1,-1,-1,1,0  (0,0),(0,-.25),(.25,.25),(-.5,.25)
 -1,-1,-1,-1,0,1  (.25,.25),(-.5,.25),(0,0),(0,-.25)


         Puis l´apprentissage est lancé par:
         valider(20000)reseau(1)erreur(0.025)loi(0,.9,0,.5,.3,0,1,.1,0)
         Réalise 20000 passes au maximum.
         0.025: Définit la tolérance.
         loi(0,.9,0,.5,.3,0,1,.1,0): Définit une loi de variation de la "constante d´apprentissage" par une cubique passant par les 3 points ((0,.9,0),(.5,.3,0),(1,.1,0)). x est le numéro de la passe (normalisé entre 0 et 1) et y est le coefficient de correction.

Utilisation

         La fonction exec_reseau() du fichier CORPS.fonc "exécute" le réseau en lui fournissant en entrée l´état des capteurs et en recueuillant en sortie les couples definissant le projet. Elle est appelée lors d´un changement de pied (fonction reancrage()) ou en cas de perte d´équilibre (fonction equilibre()).
         Un capteur angulaire retourne l´angle d´un os avec la verticale: set_ang(), il est appelé pour les 2 fémurs et les 2 tibias.
         Un capteur de contact détermine le pied porteur: set_contact()
         Le vecteur d´entrée M est la concaténation des 4 angles et des 2 contacts.
         L = valider motif(M)reseau(1): Retourne la sortie du réseau pour l´entrée M.
         L est le vecteur des positions limites des fémurs et des tibias sous la forme de doublets (C1,C2), le projet sur un os est alors construit comme une cubique passant par les 3 points: C0 (position actuellle sur cet os), C1 et C2 et de nombre de points Periode (avec Periode=18).
         À chaque image la fonction exec_projet() exécute les projets courants. Pour celà un os (qui est un acteur défini en langage objet) comporte des mémoires locales: La cubique précédente, un compteur de progression et la durée du mouvement. À chaque image la direction limite de cet os est: cubique{compteur}, compteur est incrementé. Le mouvement cesse lorsque le compteur atteint la durée. Si ce mouvement est interrompu (sur décision du réseau ou en cas de changement de pied) la valeur C0 courante du couple est sauvegardée pour servir d´origine au suivant ce qui assure la continuité du mouvement.