Dans ce travail, nous nous intéressons à la détection de zone d'activité dans les simulations MGS. L'implantation actuelle des transformations ne distinguent pas les parties de la collection où les règles sont susceptibles de s'appliquer : le filtrage s'effectue sur la collection entière. Une perte importante de performances poussent à s'interroger sur les moyens qui permettraient de détecter où une règle va s'appliquer ou ne pas s'appliquer.
Une autre façon plus profonde de justifier ces travaux repose sur une façon naturelle (bien que d'ordre 0) de considérer une propriété globale sur un système : elle peut être identifiée comme la frontière entre un type de collection particulier (i.e., où seul un sous-ensemble spécifique de règles est utilisé) et un autre.
La spécification des règles est malheureusement trop arbitraire pour pouvoir en tirer une information pertinente. Plusieurs options sont possibles :
Les trois exemples suivant cherchent à montrer la diversité des règles que l'on souhaite considérer pour détecter des zones d'activités. La complexité des exemples est croissante :
Tous les exemples sont considérés sur la topologie suivante :
gbf NEWS = < sw, se, east, south ; se = south + east, sw = south - east > ;; moore := |sw>, |se>, |east>, |south>, <sw|, <se|, <east|, <south| ;;
En fait, la topologie choisie importe peu ; cependant, le choix de la grille carré 2D statique facilite la présentation des mouvements de données et des opérateurs différentiels.
trans forest = { `Forest as x / member(`Fire,neighbors(x)) => `Fire; `Fire => `Ashes; } ;;
Et la vidéo.
trans wave = { `Fe as x / member(`We,neighbors(x)) => `Fi; `Fi as x / member(`Wi,neighbors(x)) => `Fe; `Wh as x / member(`Fe,neighbors(x)) => `Fe; `Fe => `Bl; `Bl as x / member(`Fi,neighbors(x)) => `Fi; `Fi => `Wh; } ;;
Et la vidéo.
trans gathering = { x:neutral:notEmpty, y:excited:free => { env = 3, pop = x.pop-1 }, { env = y.env-1, pop = y.pop+1 }; x:neutral / exists(excited,neighbors(x)) => x + { env = 3 }; x:neutral:notEmpty / not(exists(excited,neighbors(x))) => if (rng_uniform()<0.5) then x + { env = 3 } else x fi; x:neutral:empty / not(exists(excited,neighbors(x))) => x; x:refractory => x + { env = x.env - 1 }; } ;;
Et la vidéo.
Dans cette section, on retrouve les définitions des différentes notions sur lesquelles reprochent l'approche.
De façon générale, une zone d'activité est une partie d'un système fonctionnant sur un sous-ensemble de règle bien déterminées.