Skip to content
Snippets Groups Projects
Commit e25f294f authored by nollet's avatar nollet
Browse files

fin ajout code + commentaire code (prochain commit = documentation technique)

parent eebdd9f1
Branches
No related tags found
No related merge requests found
...@@ -20,17 +20,12 @@ L'objectif du projet est d'accompagner un mémoire qui étudie le modèle de flo ...@@ -20,17 +20,12 @@ L'objectif du projet est d'accompagner un mémoire qui étudie le modèle de flo
* [**./comptes-rendus**](./comptes-rendus/) : dossier contenant les comptes-rendus du projet * [**./comptes-rendus**](./comptes-rendus/) : dossier contenant les comptes-rendus du projet
* [**/documentation-technique**](./comptes-rendus/documentation-technique/) : dossier correspondant à la documentation technique du projet * [**/documentation-technique**](./comptes-rendus/documentation-technique/) : dossier correspondant à la documentation technique du projet
* [**/journal-de-bord**](./comptes-rendus/journal-de-bord/) : dossier correspondant au journal de bord du projet
* [**./media**](./media/) : dossier contenant des documents relatifs au projet * [**./media**](./media/) : dossier contenant des documents relatifs au projet
* [**./src**](./src/) : dossier contenant le code du projet * [**./src**](./src/) : dossier contenant le code du projet
* [**/Packages**](./src/Packages/) : dossier contenant les packages correspondant aux différentes versions du projet * [**/Packages**](./src/Packages/) : dossier contenant les packages correspondant aux différentes versions du projet
* [**/Scripts**](./src/Scripts/) : dossier contenant les scripts .cs du projet * [**/Scripts**](./src/Scripts/) : dossier contenant les scripts .cs du projet
* [**README.md**](README.md) : le document que vous lisez * [**README.md**](README.md) : le document que vous lisez
## **Journal de Bord**
Vous pouvez consulter le journal de bord en cliquant [ici](./comptes-rendus/journal-de-bord/menu.md).
## **Documentation Technique** ## **Documentation Technique**
Vous pouvez consulter la documentation technique du projet en cliquant [ici](./comptes-rendus/documentation-technique/doc.md). Vous pouvez consulter la documentation technique du projet en cliquant [ici](./comptes-rendus/documentation-technique/doc.md).
......
File added
...@@ -19,11 +19,6 @@ public class Agent : MonoBehaviour, Visible ...@@ -19,11 +19,6 @@ public class Agent : MonoBehaviour, Visible
// deplacement courant de l'agent // deplacement courant de l'agent
public Vector3 deplacement; public Vector3 deplacement;
// mémoire des anciens déplacements
private List<Vector3> oldDeplacement;
// taille mémoire
private int Taille_Memoire = 5;
// nombre d'Agents créés // nombre d'Agents créés
private static int count = 0; private static int count = 0;
// identifiant de l'agent; // identifiant de l'agent;
...@@ -69,8 +64,6 @@ public class Agent : MonoBehaviour, Visible ...@@ -69,8 +64,6 @@ public class Agent : MonoBehaviour, Visible
perception = new Perception180(this,20.0f); perception = new Perception180(this,20.0f);
deplacement = Utils.randomDirection(); deplacement = Utils.randomDirection();
//deplacement = new Vector3(0.5f,0.5f,0.0f);
oldDeplacement = new List<Vector3>();
id = Agent.count; id = Agent.count;
Agent.count++; Agent.count++;
...@@ -80,7 +73,6 @@ public class Agent : MonoBehaviour, Visible ...@@ -80,7 +73,6 @@ public class Agent : MonoBehaviour, Visible
void Update() void Update()
{ {
reagir(voir()); reagir(voir());
memoire();
} }
// renvoie les observations effectuées par l'agent // renvoie les observations effectuées par l'agent
...@@ -100,22 +92,6 @@ public class Agent : MonoBehaviour, Visible ...@@ -100,22 +92,6 @@ public class Agent : MonoBehaviour, Visible
transform.LookAt(transform.position + deplacement); transform.LookAt(transform.position + deplacement);
} }
// gestion de la mémoire des précédents déplacements
private void memoire() {
oldDeplacement.Add(deplacement);
if (oldDeplacement.Count > Taille_Memoire) oldDeplacement.RemoveAt(0);
}
// appelé lors qu'il rentre en contact avec un autre Collider
void OnTriggerEnter(Collider other) {
//Debug.Log("enter trigger");
}
// appelé lors qu'il sort de contact avec un autre Collider
void OnTriggerExit(Collider other) {
//Debug.Log("exit trigger");
}
// méthode de test d'égalité si l'agent est égal à l'objet obj // méthode de test d'égalité si l'agent est égal à l'objet obj
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
......
// List
using System.Collections.Generic;
// Vector3
using UnityEngine;
// Classe pour le comportement de joueur
public class Player : Comportement
{
// Le comportement est construit par rapport à un proprietaire
public Player(Agent proprietaire) : base(proprietaire) {}
// retourne le vecteur déplacement en réaction aux observations
public override Vector3 reagir(List<Observation> observation) {
return Utils.randomDirection();
}
}
// List
using System.Collections.Generic;
// Vector3
using UnityEngine;
// Classe pour le comportement de predateur
public class Predator : Comportement
{
// Le comportement est construit par rapport à un proprietaire
public Predator(Agent proprietaire) : base(proprietaire) {}
// retourne le vecteur déplacement en réaction aux observations
public override Vector3 reagir(List<Observation> observation) {
return Utils.randomDirection();
}
}
// List
using System.Collections.Generic;
// Vector3
using UnityEngine;
// Classe pour le comportement de proie
public class Prey : Comportement
{
// Le comportement est construit par rapport à un proprietaire
public Prey(Agent proprietaire) : base(proprietaire) {}
// retourne le vecteur déplacement en réaction aux observations
public override Vector3 reagir(List<Observation> observation) {
return Utils.randomDirection();
}
}
...@@ -9,13 +9,12 @@ public class Environnement : MonoBehaviour ...@@ -9,13 +9,12 @@ public class Environnement : MonoBehaviour
// Attributs // Attributs
// Les GameObjects pour crée le visuel de l'environnement
// Visuel environnement en cube // Visuel environnement en cube
public GameObject cube; public GameObject cube;
// Visuel environnement en carré // Visuel environnement en carré
public GameObject carre; public GameObject carre;
// Visuel possible pour les obstacles // Visuel possible pour les obstacles
public GameObject figure; public GameObject[] figures;
// système utilisant l'environnement // système utilisant l'environnement
private SMA system; private SMA system;
...@@ -54,12 +53,6 @@ public class Environnement : MonoBehaviour ...@@ -54,12 +53,6 @@ public class Environnement : MonoBehaviour
} }
} }
// Initialise l'environnement avec seulement son contour
private void setTheTopologie() {
foreach (Transform child in transform) Destroy(child.gameObject);
createObject(topologie.getGameObject(), Vector3.zero);
}
// Initialise l'environnement avec seulement son contour entré en paramètre // Initialise l'environnement avec seulement son contour entré en paramètre
private void setTheTopologie(Topologie topo) { private void setTheTopologie(Topologie topo) {
foreach (Transform child in transform) Destroy(child.gameObject); foreach (Transform child in transform) Destroy(child.gameObject);
...@@ -74,6 +67,7 @@ public class Environnement : MonoBehaviour ...@@ -74,6 +67,7 @@ public class Environnement : MonoBehaviour
return detectBord(current,res,rayon,angle); return detectBord(current,res,rayon,angle);
} }
// renvoie la liste des observations d'agents faites par l'agent current
private List<Observation> detectAgents(Agent current, float rayon, float angle) { private List<Observation> detectAgents(Agent current, float rayon, float angle) {
Vector3 dist; float l; float a; Vector3 dist; float l; float a;
List<Observation> res = new List<Observation>(); List<Observation> res = new List<Observation>();
...@@ -99,6 +93,7 @@ public class Environnement : MonoBehaviour ...@@ -99,6 +93,7 @@ public class Environnement : MonoBehaviour
return res; return res;
} }
// ajoute la liste des observations des obstacles à la liste d'observations faites par l'agent current
private List<Observation> detectObstacles(Agent current, List<Observation> res,float rayon) { private List<Observation> detectObstacles(Agent current, List<Observation> res,float rayon) {
Vector3 pos = current.transform.position; Vector3 pos = current.transform.position;
bool notSeen = true; bool notSeen = true;
...@@ -121,6 +116,7 @@ public class Environnement : MonoBehaviour ...@@ -121,6 +116,7 @@ public class Environnement : MonoBehaviour
return res; return res;
} }
// ajoute la liste des observations des bords de l'environnement à la liste d'observations faites par l'agent current
private List<Observation> detectBord(Agent current, List<Observation> res, float rayon, float angle) { private List<Observation> detectBord(Agent current, List<Observation> res, float rayon, float angle) {
float l, a; float l, a;
Observation bord = topologie.detectEnv(current); Observation bord = topologie.detectEnv(current);
...@@ -139,13 +135,24 @@ public class Environnement : MonoBehaviour ...@@ -139,13 +135,24 @@ public class Environnement : MonoBehaviour
{ {
system = GameObject.Find("SMA").GetComponent<SMA>(); system = GameObject.Find("SMA").GetComponent<SMA>();
_3D = !system._3D; _3D = !system._3D;
obstacles = new List<CustomObstacle> { obstacles = getPattern(0);
new CustomObstacle(this,new Vector3(-20.0f,-20.0f,0.0f),figure), new CustomObstacle(this,new Vector3(20.0f,-20.0f,0.0f),figure),
//new CustomObstacle(this,new Vector3(-20.0f,20.0f,0.0f),figure), new CustomObstacle(this,new Vector3(20.0f,20.0f,0.0f),figure)
};
notify(); notify();
} }
// renvoie un ieme pattern d'obstacles, si non défini alors renvoie une liste vide
public List<CustomObstacle> getPattern(int i) {
if (i == 1) {
return new List<CustomObstacle> {
new CustomObstacle(this,new Vector3(-20.0f,20.0f,0.0f),figures[Utils.random(0,figures.Length)]),
new CustomObstacle(this,new Vector3(20.0f,-20.0f,0.0f),figures[Utils.random(0,figures.Length)]) };
}
else return new List<CustomObstacle>();
}
// change les obstacles de l'environnement
public void changeObstacles(List<CustomObstacle> co) {obstacles = co;}
// crée les visuels des obstacles
private void createObstacles() { private void createObstacles() {
for(int i = 0; i<obstacles.Count;i++) obstacles[i].createObject(); for(int i = 0; i<obstacles.Count;i++) obstacles[i].createObject();
} }
......
...@@ -29,30 +29,6 @@ public class Carre : Cube ...@@ -29,30 +29,6 @@ public class Carre : Cube
return new Observation(new PointObstacle(environnement,side,droites),side-current.transform.position); return new Observation(new PointObstacle(environnement,side,droites),side-current.transform.position);
} }
/*
// retourne le point de la topologie que l'agent current pourrait heurter
public override Observation detectEnv(Agent current) {
Vector3 pos = current.transform.position;
List<Vector3> p = getExtremPositions(current);
float dist = Utils.normVector(p[0] - pos);
float d; Vector3 res = p[0];
for(int i=1;i<p.Count;i++) {
d = Utils.normVector(p[i] - pos);
if(d<dist) {
dist = d;
res = p[i];
}
}
Vector3 haut = new Vector3(0.0f,1.0f,0.0f);
Vector3 droite = new Vector3(1.0f,0.0f,0.0f);
List<Vector3> hauts = new List<Vector3> {haut,-haut};
List<Vector3> droites = new List<Vector3> {droite,-droite};
if (res.x == minX || res.x == maxX)
return new Observation(new PointObstacle(res,hauts),res-pos);
else
return new Observation(new PointObstacle(res,droites),res-pos);
}*/
// renvoie les projections de la position de l'agent current sur les côtés du carré // renvoie les projections de la position de l'agent current sur les côtés du carré
protected List<Vector3> getExtremPositions(Agent current) { protected List<Vector3> getExtremPositions(Agent current) {
Vector3 pos = current.transform.position; Vector3 pos = current.transform.position;
...@@ -102,7 +78,7 @@ public class Carre : Cube ...@@ -102,7 +78,7 @@ public class Carre : Cube
} }
// retourne les points des côtés ainsi que le déplacement trivial induit par le déplacement en x, y et z // retourne les points des côtés ainsi que le déplacement trivial induit par le déplacement en x, y et z
private List<(Vector3,Vector3)> choiceMove(List<Vector3> p, float x, float y,float z) { protected List<(Vector3,Vector3)> choiceMove(List<Vector3> p, float x, float y,float z) {
List<(Vector3,Vector3)> res = new List<(Vector3,Vector3)>(); List<(Vector3,Vector3)> res = new List<(Vector3,Vector3)>();
if (x > 0.0f && y > 0.0f) { if (x > 0.0f && y > 0.0f) {
res.Add((p[1],new Vector3(0.0f,1.0f,0.0f))); res.Add((p[1],new Vector3(0.0f,1.0f,0.0f)));
......
...@@ -64,7 +64,6 @@ public class Cube : Topologie ...@@ -64,7 +64,6 @@ public class Cube : Topologie
res = p[i]; res = p[i];
} }
} }
//return new Observation(new PointObstacle(res),res-pos);
Vector3 XY = (new Vector3(1.0f,1.0f,0.0f)).normalized; Vector3 XY = (new Vector3(1.0f,1.0f,0.0f)).normalized;
Vector3 XZ = (new Vector3(1.0f,0.0f,1.0f)).normalized; Vector3 XZ = (new Vector3(1.0f,0.0f,1.0f)).normalized;
......
// List
using System.Collections.Generic; using System.Collections.Generic;
// Classe correspondant à une perception // Classe correspondant à une perception
......
...@@ -12,34 +12,42 @@ public class SMA : MonoBehaviour ...@@ -12,34 +12,42 @@ public class SMA : MonoBehaviour
// GameObject donnant la forme aux Agents // GameObject donnant la forme aux Agents
public GameObject boid; public GameObject boid;
// Environnement prédéfini
//public GameObject environnement;
// Liste des agents du système // Liste des agents du système
private List<Agent> agents = new List<Agent>(); private List<Agent> agents = new List<Agent>();
// Environnement du système // Environnement du système
private Environnement env; private Environnement env;
// Effectif de la population du système // Effectif de la population du système
// population courante
public int population = 1; public int population = 1;
// ancienne population
private int oldPopulation = 1; private int oldPopulation = 1;
// population minimum
private static int MINPOP = 0; private static int MINPOP = 0;
// population maximum
private static int MAXPOP = 500; private static int MAXPOP = 500;
// Booléen vérifiant si le système est en trois dimensions // Booléen vérifiant si le système est en trois dimensions
// dimension courante
public bool _3D = true; public bool _3D = true;
// ancienne dimension
private bool _old3D = true; private bool _old3D = true;
// Angle de vision des agents du système // Angle de vision des agents du système
// angle courant
public float angle = 250.0f; public float angle = 250.0f;
// ancien angle
private float oldAngle = 180.0f; private float oldAngle = 180.0f;
// Rayon de vision des agents du système // Rayon de vision des agents du système
// rayon de vision courant
public float rayon = 20.0f; public float rayon = 20.0f;
// ancien rayon de vision
private float oldRayon = 20.0f; private float oldRayon = 20.0f;
// Coefficient k pour répulsion des Bords (+ élevé = + répulsion + loin du bord) // Coefficient k pour répulsion des Bords (+ élevé = + répulsion + loin du bord)
public float kR = 50.0f; public float kR = 50.0f;
// Coefficient t pour mouvement en tangente
public float kT = 5.0f; public float kT = 5.0f;
// Vitesse de la simulation // Vitesse de la simulation
...@@ -61,17 +69,14 @@ public class SMA : MonoBehaviour ...@@ -61,17 +69,14 @@ public class SMA : MonoBehaviour
// poids de la cohésion // poids de la cohésion
public float FollowWeight = 1.0f; public float FollowWeight = 1.0f;
// gestion pattern d'obstacles
// pattern courant d'obstacles
public int currentObstacles = 0;
// ancien pattern d'obstacles
private int oldObstacles = 0;
// Méthodes
private void changeReynolds() { // Méthodes
if(Escape != Reynolds.Escape) Reynolds.Escape = Escape;
if(EscapeWeight != Reynolds.EscapeWeight) Reynolds.EscapeWeight = EscapeWeight;
if(Together != Reynolds.Together) Reynolds.Together = Together;
if(TogetherWeight != Reynolds.TogetherWeight) Reynolds.TogetherWeight = TogetherWeight;
if(Follow != Reynolds.Follow) Reynolds.Follow = Follow;
if(FollowWeight != Reynolds.FollowWeight) Reynolds.FollowWeight = FollowWeight;
}
// renvoie l'environnement du système // renvoie l'environnement du système
public Environnement getEnvironnement() { public Environnement getEnvironnement() {
...@@ -128,11 +133,20 @@ public class SMA : MonoBehaviour ...@@ -128,11 +133,20 @@ public class SMA : MonoBehaviour
// Update est appelée à chaque affichage // Update est appelée à chaque affichage
void Update() void Update()
{ {
changeObstacles();
changeDimension(); changeDimension();
changeReynolds(); changeReynolds();
changePopulation(); changePopulation();
} }
// changement pattern obstacles
private void changeObstacles() {
if(currentObstacles != oldObstacles || _3D != _old3D) {
oldObstacles = currentObstacles;
env.changeObstacles(env.getPattern(currentObstacles));
}
}
// Change la dimension de l'environnement du système pour correspondre au booléen _3D // Change la dimension de l'environnement du système pour correspondre au booléen _3D
private void changeDimension() { private void changeDimension() {
if (_3D != _old3D) { if (_3D != _old3D) {
...@@ -156,6 +170,16 @@ public class SMA : MonoBehaviour ...@@ -156,6 +170,16 @@ public class SMA : MonoBehaviour
} }
} }
// met à jour les constantes Reynolds selon les constantes du sma
private void changeReynolds() {
if(Escape != Reynolds.Escape) Reynolds.Escape = Escape;
if(EscapeWeight != Reynolds.EscapeWeight) Reynolds.EscapeWeight = EscapeWeight;
if(Together != Reynolds.Together) Reynolds.Together = Together;
if(TogetherWeight != Reynolds.TogetherWeight) Reynolds.TogetherWeight = TogetherWeight;
if(Follow != Reynolds.Follow) Reynolds.Follow = Follow;
if(FollowWeight != Reynolds.FollowWeight) Reynolds.FollowWeight = FollowWeight;
}
// verifie les changement sur les agents // verifie les changement sur les agents
private void changePopulation() { private void changePopulation() {
changeBordConstant(); changeBordConstant();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment