From 973a724501b789a3fa89f703a1b4c28a5ca9ba16 Mon Sep 17 00:00:00 2001 From: nollet <nollet> Date: Mon, 23 May 2022 17:46:39 +0200 Subject: [PATCH] fin J6 --- .../journal-de-bord/semaines/semaine2.md | 10 ++ src/Packages/v3.unitypackage | Bin 0 -> 32264 bytes src/Scripts/Agent.cs | 46 +++++- src/Scripts/Comportement/Bord.cs | 7 +- src/Scripts/Comportement/Paper.cs | 154 +++++++++++++++++- src/Scripts/SMA.cs | 4 +- src/Scripts/Utils.cs | 24 ++- 7 files changed, 222 insertions(+), 23 deletions(-) create mode 100755 src/Packages/v3.unitypackage diff --git a/comptes-rendus/journal-de-bord/semaines/semaine2.md b/comptes-rendus/journal-de-bord/semaines/semaine2.md index 5462c9a..61eb940 100755 --- a/comptes-rendus/journal-de-bord/semaines/semaine2.md +++ b/comptes-rendus/journal-de-bord/semaines/semaine2.md @@ -18,12 +18,22 @@ Voici ici le descriptif du travail effectué lors de la journée du 23/05/2022. ### De 8h30 à 10h +* Relecture article scientifique +* Continuation implémentation comportement de l'article + ### de 10h à 12h +* Continuation implémentation comportement de l'article + ### de 14h à 16h +* Continuer lecture article donné par l'encadrant +* Fin (pour l'instant) implémentation comportement de l'article (voir v3) + ### de 16h à 18h +* fin lecture article donné par l'encadrant + <h2 id="mardi"> <strong> ✏️ Journal de Bord - Jour 7</strong> <a href="#menu">↩️</a> </h2> diff --git a/src/Packages/v3.unitypackage b/src/Packages/v3.unitypackage new file mode 100755 index 0000000000000000000000000000000000000000..db3bbbe6df8afe96a28209958aaa1d61e18fc260 GIT binary patch literal 32264 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 literal 0 HcmV?d00001 diff --git a/src/Scripts/Agent.cs b/src/Scripts/Agent.cs index c7e8983..83cc5e2 100755 --- a/src/Scripts/Agent.cs +++ b/src/Scripts/Agent.cs @@ -11,10 +11,14 @@ public class Agent : MonoBehaviour, Visible private Comportement comportement; private Perception perception; public Vector3 direction; - public float speed; - public List<Vector3> oldDirections; + private float speed; + private List<Vector3> oldDirections; private int Taille_Memoire = 5; + private int angle = 180; + + private static int count = 0; + public int id; // Start is called before the first frame update void Start() @@ -23,7 +27,7 @@ public class Agent : MonoBehaviour, Visible //List<Comportement> comps = new List<Comportement> { new Reynolds(this), new Bord(this), new Aleatoire(this)}; List<Comportement> comps = new List<Comportement> { new Paper(this), new Bord(this), new Aleatoire(this)}; - List<int> imps = new List<int> { 5,8,1 }; + List<int> imps = new List<int> { 5,5,2 }; Comportement c = new CompositeSeq(this,comps,imps); if(system._3D) comportement = c; @@ -33,11 +37,18 @@ public class Agent : MonoBehaviour, Visible direction = Vector3.zero; speed = 0.7f; oldDirections = new List<Vector3>(); + + id = Agent.count; + Agent.count++; } // Update is called once per frame void Update() { + if(angle != system.angle) { + angle = system.angle; + perception = new Perception(this,20.0f,(float) angle); + } reagir(voir()); memoire(); } @@ -58,4 +69,33 @@ public class Agent : MonoBehaviour, Visible public bool isAlive() { return true; } + void OnTriggerEnter(Collider other) { + direction = Vector3.zero; + //Debug.Log("enter trigger"); + } + + void OnTriggerExit(Collider other) { + direction = Utils.meanVector(oldDirections); + //Debug.Log("exit trigger"); + } + + public override bool Equals(object obj) + { + // If the passed object is null + if (obj == null) + { + return false; + } + if (!(obj is Agent)) + { + return false; + } + return (this.id == ((Agent) obj).id); + } + + public override int GetHashCode() + { + return id; + } + } diff --git a/src/Scripts/Comportement/Bord.cs b/src/Scripts/Comportement/Bord.cs index 98a3a6a..1a68f62 100755 --- a/src/Scripts/Comportement/Bord.cs +++ b/src/Scripts/Comportement/Bord.cs @@ -7,8 +7,9 @@ public class Bord : Comportement static public float Urgent = 5.0f; static public float Preoccuppant = 8.0f; static public float Intrigant = 10.0f; + private Vector3 currentGoal; - public Bord(Agent proprietaire) : base(proprietaire) {} + public Bord(Agent proprietaire) : base(proprietaire) { currentGoal = proprietaire.direction;} public override Vector3 reagir(List<Observation> observation) { List<Vector3> vectors = new List<Vector3>(); @@ -30,7 +31,9 @@ public class Bord : Comportement } } Vector3 res = Utils.meanVector(vectors); - return res; + //currentGoal = res; + return Utils.meanVector(new List<Vector3> {res,proprietaire.direction}); + //return res; //return Utils.noiseVector(res,nbBruit,bruit); } diff --git a/src/Scripts/Comportement/Paper.cs b/src/Scripts/Comportement/Paper.cs index da1078f..2c76e86 100755 --- a/src/Scripts/Comportement/Paper.cs +++ b/src/Scripts/Comportement/Paper.cs @@ -1,48 +1,188 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using System; public class Paper : Comportement { + [Serializable] + public class Memory + { + public Agent agent; + public float idealDistance; + public float predictDistance; + public float predictAttempt; + public float stagnation; + public float exilation; + + public Memory(Agent a, float ideal, float predict, float attempt) { + agent = a; idealDistance = ideal; predictDistance = predict; predictAttempt = attempt; + stagnation = stagnationTolerance; exilation = exileTolerance; + } + }; + private static List<Vector3> moves = new List<Vector3> { (new Vector3(-1.0f,1.0f,0.0f)).normalized, (new Vector3(0.0f,1.0f,0.0f)).normalized, (new Vector3(1.0f,1.0f,0.0f)).normalized, (new Vector3(-1.0f,0.0f,0.0f)).normalized, (new Vector3(0.0f,0.0f,0.0f)).normalized, (new Vector3(1.0f,0.0f,0.0f)).normalized, - (new Vector3(-1.0f,-1.0f,0.0f)).normalized, (new Vector3(0.0f,-1.0f,0.0f)).normalized, (new Vector3(1.0f,-1.0f,0.0f)).normalized + (new Vector3(-1.0f,-1.0f,0.0f)).normalized, (new Vector3(0.0f,-1.0f,0.0f)).normalized, (new Vector3(1.0f,-1.0f,0.0f)).normalized, + (new Vector3(-1.0f,1.0f,-1.0f)).normalized, (new Vector3(0.0f,1.0f,-1.0f)).normalized, (new Vector3(1.0f,1.0f,-1.0f)).normalized, + (new Vector3(-1.0f,0.0f,-1.0f)).normalized, (new Vector3(0.0f,0.0f,-1.0f)).normalized, (new Vector3(1.0f,0.0f,-1.0f)).normalized, + (new Vector3(-1.0f,-1.0f,-1.0f)).normalized, (new Vector3(0.0f,-1.0f,-1.0f)).normalized, (new Vector3(1.0f,-1.0f,-1.0f)).normalized, + (new Vector3(-1.0f,1.0f,1.0f)).normalized, (new Vector3(0.0f,1.0f,1.0f)).normalized, (new Vector3(1.0f,1.0f,1.0f)).normalized, + (new Vector3(-1.0f,0.0f,1.0f)).normalized, (new Vector3(0.0f,0.0f,1.0f)).normalized, (new Vector3(1.0f,0.0f,1.0f)).normalized, + (new Vector3(-1.0f,-1.0f,1.0f)).normalized, (new Vector3(0.0f,-1.0f,1.0f)).normalized, (new Vector3(1.0f,-1.0f,1.0f)).normalized }; + // Critical real distance at which the FSRs are activated + private static float activeSeuil = 8.0f; + // Change rate (0 < P_C < 1) for increasing and decreasing ideal distances, and stagnation and exile tolerance times + private static float changeRate = 0.2f; + // Initial value of the stagnation tolerance time + private static float stagnationTolerance = 15.0f; + // Initial value of the exile tolerance time + private static float exileTolerance = 30.0f; + + private List<Memory> memories = new List<Memory>(); + + public Paper(Agent proprietaire) : base(proprietaire) { } public override Vector3 reagir(List<Observation> observation) { - float disatifaction = 1.0f; Vector3 themove = Vector3.zero; float d; + List<Vector3> candidatesVectors = getTheMoves(observation); + Vector3 themove = getTheMove(candidatesVectors); + assumeTheMove(themove,observation); + return themove; + } + + private List<Vector3> getTheMoves(List<Observation> observation) { + List<Vector3> candidatesVectors = new List<Vector3>(); + float disatifaction = 1000.0f; float d; for(int i=0;i<moves.Count;i++) { d = computeDisatisfaction(moves[i],observation); if (d < disatifaction) { - themove = moves[i]; disatifaction = d; + candidatesVectors.Clear(); + candidatesVectors.Add(moves[i]); + disatifaction = d; + } + else if (d == disatifaction) candidatesVectors.Add(moves[i]); + } + return candidatesVectors; + } + private Vector3 getTheMove(List<Vector3> candidatesVectors) { + Vector3 themove = proprietaire.direction; + float d = 1000.0f; float sum; + for(int i=0;i<candidatesVectors.Count;i++) { + sum = Utils.abs(proprietaire.direction.x - candidatesVectors[i].x); + sum += Utils.abs(proprietaire.direction.y - candidatesVectors[i].y); + sum += Utils.abs(proprietaire.direction.z - candidatesVectors[i].z); + if (sum < d) { + d = sum; + themove = candidatesVectors[i]; } } return themove; } + private void assumeTheMove(Vector3 themove,List<Observation> observation) { + Vector3 futurPos = proprietaire.transform.position + themove; + List<Observation> agentObservations = observation.FindAll(isAgent); + Agent concerned; Vector3 reachPoint; float reachDist; + for(int i=0;i<agentObservations.Count;i++) { + concerned = (Agent) agentObservations[i].objet; + reachPoint = proprietaire.transform.position + agentObservations[i].distance; + reachDist = Utils.normVector( reachPoint - futurPos ); + for(int j=0;j<memories.Count;j++) { + if(memories[j].agent == concerned) { + memories[j].predictDistance = reachDist; + memories[j].predictAttempt = reachDist - Utils.normVector(agentObservations[i].distance); + } + } + } + } + + private bool isAgent(Observation o) {return o.objet.isAlive();} + private float computeDisatisfaction(Vector3 move, List<Observation> observation) { float d = 0.0f; int nb = 0; float m = proprietaire.system.environnement.getMaxDistance(); Vector3 possiblePos = proprietaire.transform.position + move; + Vector3 reachPoint; + float reachDist; Agent concerned; float dist; for(int i=0;i<observation.Count;i++) { if (observation[i].objet.isAlive()) { - d += Utils.abs(Utils.normVector(observation[i].distance) - idealDistance((Agent) observation[i].objet)); - nb += 1; + dist = Utils.normVector(observation[i].distance); + if(dist <= activeSeuil) { + concerned = (Agent) observation[i].objet; + reachPoint = proprietaire.transform.position + observation[i].distance; + reachDist = Utils.normVector( reachPoint - possiblePos ); + addAgentInMemory(concerned,dist,m,reachDist); + d += Utils.abs( reachDist - idealDistance((Agent) observation[i].objet)); + nb += 1; + } } } - return d/(nb*m); + if (nb==0) return 1000.0f; + else return d/(nb*m); + } + + private void addAgentInMemory(Agent concerned,float dist,float max, float reachDist) { + bool hasToBeAdd = true; + int i = 0; + while (i < memories.Count && hasToBeAdd) { + if(memories[i].agent == concerned) hasToBeAdd = false; + i++; + } + if(hasToBeAdd) { + Memory mem = new Memory(concerned,Utils.random(dist,max),reachDist,0.0f); + memories.Add(mem); + } } private float idealDistance(Agent other) { - return 50.0f; + int i = 0; + while(memories[i].agent != other) i++; + float dist = Utils.normVector(other.transform.position - proprietaire.transform.position); + float c = memories[i].predictAttempt; + float u = Utils.abs(dist - memories[i].idealDistance) - Utils.abs(memories[i].predictDistance - memories[i].idealDistance); + int k = 0; + if (u > 0) { + if (c < 0) k = 1; + else if (c > 0) k = -1; + else k = Utils.randomPosOrNeg(1); + } + else if(u < 0) { + if (c < 0) k = -1; + else if (c > 0) k = 1; + else k = Utils.randomPosOrNeg(1); + } + float ideal = (1 + k*changeRate) * memories[i].idealDistance; + memories[i].idealDistance = ideal; + return 5.0f; + //return ideal; + /* + if(Utils.abs(ideal - memories[i].idealDistance) < changeRate && memories[i].stagnation > 1) { + memories[i].stagnation -= 1; + if(memories[i].stagnation <= 1) { + ideal = memories[i].idealDistance + changeRate * stagnationTolerance; + } + } + else if(memories[i].exilation > 1 && memories[i].stagnation <= 1) { + memories[i].exilation -= 1; + //memories[i].stagnation *= 1 + changeRate; + if(memories[i].exilation == 1) { + ideal = memories[i].idealDistance - (changeRate * stagnationTolerance + activeSeuil); + memories[i].stagnation = stagnationTolerance * (1 + changeRate); + memories[i].exilation = exileTolerance * (1 - changeRate); + } + } + memories[i].idealDistance = ideal; + return ideal; + */ } } diff --git a/src/Scripts/SMA.cs b/src/Scripts/SMA.cs index eb8ab6a..4367978 100755 --- a/src/Scripts/SMA.cs +++ b/src/Scripts/SMA.cs @@ -10,6 +10,7 @@ public class SMA : MonoBehaviour public GameObject boid; public bool _3D = true; private bool _old3D = true; + public int angle = 180; // Start is called before the first frame update @@ -24,7 +25,6 @@ public class SMA : MonoBehaviour { if (_3D != _old3D) { _old3D = _3D; - agents.Clear(); environnement.changeTo3D(_3D); createAgents(); } @@ -37,7 +37,7 @@ public class SMA : MonoBehaviour } void createAgents() { - GameObject a; + GameObject a;agents.Clear(); for(int i=0; i<population; i++) { a = Instantiate(boid, environnement.validPosition(), Quaternion.identity,environnement.transform) as GameObject; agents.Add(a.GetComponent<Agent>()); diff --git a/src/Scripts/Utils.cs b/src/Scripts/Utils.cs index 7719585..3028226 100755 --- a/src/Scripts/Utils.cs +++ b/src/Scripts/Utils.cs @@ -24,14 +24,14 @@ public class Utils float z = 0.0f; int r; for(int i = 0; i<10; i++) { - r = UnityEngine.Random.Range(0,3); + r = random(0,3); if (r == 0) x += 1.0f; else if (r == 1) y += 1.0f; else z += 1.0f; } - if(UnityEngine.Random.Range(1,3) > 1) x = -x; - if(UnityEngine.Random.Range(1,3) > 1) y = -y; - if(UnityEngine.Random.Range(1,3) > 1) z = -z; + if(random(1,3) > 1) x = -x; + if(random(1,3) > 1) y = -y; + if(random(1,3) > 1) z = -z; return normalizedVector(x,y,z); } @@ -50,9 +50,9 @@ public class Utils } public static Vector3 randomVector(float minX, float maxX, float minY, float maxY, float minZ, float maxZ) { - return new Vector3(UnityEngine.Random.Range(minX,maxX), - UnityEngine.Random.Range(minY,maxY), - UnityEngine.Random.Range(minZ,maxZ)); + return new Vector3(random(minX,maxX), + random(minY,maxY), + random(minZ,maxZ)); } public static float normVector(Vector3 v) { @@ -66,8 +66,8 @@ public class Utils public static Vector3 noiseVector(Vector3 v, int nbBruit, float bruit ) { int coin1; int coin2; float x = v.x; float y = v.y; float z = v.z; for(int i=0;i<nbBruit;i++) { - coin1 = UnityEngine.Random.Range(1,3); - coin2 = UnityEngine.Random.Range(1,4); + coin1 = random(1,3); + coin2 = random(1,4); if(coin2 == 1) { if(coin1 == 1) x+=bruit; else x-= bruit; @@ -86,4 +86,10 @@ public class Utils public static float abs(float n) {return (float) Math.Sqrt(Math.Pow(n,2));} + public static float random(float min, float max) {return UnityEngine.Random.Range(min,max);} + public static int random(int min, int max) {return UnityEngine.Random.Range(min,max);} + + public static float randomPosOrNeg(float n) { return n * ((float) Math.Pow(-1,random(0,2))); } + public static int randomPosOrNeg(int n) { return n * ((int) Math.Pow(-1,random(0,2))); } + } -- GitLab