diff --git a/Assets/NanoBrain/Neuroid.cs b/Assets/NanoBrain/Neuroid.cs index 2eb26d8..e214df4 100644 --- a/Assets/NanoBrain/Neuroid.cs +++ b/Assets/NanoBrain/Neuroid.cs @@ -28,16 +28,15 @@ public class NeuroidNetwork { } } -public class Neuroid { +public class Neuroid : Nucleus { public string name; - public int layerIx; public int stale = 0; - public readonly Dictionary synapses = new(); + // public readonly Dictionary synapses = new(); public Vector3 outputValue; - public HashSet outputNeuroids = new(); + // public HashSet outputNeuroids = new(); public bool average = false; //public bool quadratic = false; @@ -46,7 +45,7 @@ public class Neuroid { public NeuroidNetwork net; - public Neuroid(NeuroidNetwork net, string name) { + public Neuroid(NeuroidNetwork net, string name) : base(net) { this.net = net; this.name = name; if (this.net != null) @@ -58,9 +57,9 @@ public class Neuroid { this.synapses[input] = new(input, Vector3.zero, 1.0f); } - public void AddReceiver(Neuroid receiver) { - this.outputNeuroids.Add(receiver); - } + // public void AddReceiver(Neuroid receiver) { + // this.outputNeuroids.Add(receiver); + // } public void ResetWeights() { foreach (Synapse synapse in this.synapses.Values) diff --git a/Assets/NanoBrain/Nucleus.cs b/Assets/NanoBrain/Nucleus.cs index e4b4a66..4272ae4 100644 --- a/Assets/NanoBrain/Nucleus.cs +++ b/Assets/NanoBrain/Nucleus.cs @@ -1,17 +1,26 @@ +using System.Collections.Generic; + public class Nucleus { - public class State { - - } + //public Neuroid output; + public readonly Dictionary synapses = new(); - public State state; + public HashSet outputNeuroids = new(); + + public int layerIx; - public Neuroid output; public Nucleus(NeuroidNetwork neuroidNet) { - this.output = new(neuroidNet, "Nucleus output"); + //this.output = new(neuroidNet, "Nucleus output"); } - public void AddReceiver(Neuroid receiver) { - this.output.AddReceiver(receiver); + public virtual void AddReceiver(Neuroid receiver) { + //this.output.AddReceiver(receiver); + this.outputNeuroids.Add(receiver); } + + // public void GetInputFrom(Neuroid input, float weight = 1.0f) { + // input.AddReceiver(this); + // this.synapses[input] = new(input, Vector3.zero, weight); + // } + } \ No newline at end of file diff --git a/Assets/Scenes/Boids/Scripts/RoamingNucleus.cs b/Assets/Scenes/Boids/Scripts/RoamingNucleus.cs index aacd705..a8889c6 100644 --- a/Assets/Scenes/Boids/Scripts/RoamingNucleus.cs +++ b/Assets/Scenes/Boids/Scripts/RoamingNucleus.cs @@ -1,14 +1,24 @@ public class Roaming : Nucleus { - + public float avoidanceForce; public Neuroid avoidance; + public Neuroid output; + + public const int BoundaryType = 1; public const int BoidType = 2; public Roaming(NeuroidNetwork neuroidNet, Perception perception, SwarmControl sc) : base(neuroidNet) { - avoidance = new(neuroidNet, "Separation") { inverse = true }; + this.avoidanceForce = sc.avoidanceForce; + + avoidance = new(neuroidNet, "Avoidance") { inverse = true }; perception.SendPositions(avoidance); + this.output = new(neuroidNet, "Roaming"); output.GetInputFrom(avoidance, -sc.avoidanceForce); } + + public override void AddReceiver(Neuroid receiver) { + output.AddReceiver(receiver); + } } \ No newline at end of file diff --git a/Assets/Scenes/Boids/Scripts/SwarmingNucleus.cs b/Assets/Scenes/Boids/Scripts/SwarmingNucleus.cs index b40f1c6..f6ec099 100644 --- a/Assets/Scenes/Boids/Scripts/SwarmingNucleus.cs +++ b/Assets/Scenes/Boids/Scripts/SwarmingNucleus.cs @@ -6,6 +6,8 @@ public class Swarming : Nucleus { public Neuroid avoidance; public Neuroid boundary; + public Neuroid output; + public const int BoundaryType = 1; public const int BoidType = 2; @@ -21,9 +23,9 @@ public class Swarming : Nucleus { boundary = new(neuroidNet, "Boundary"); + this.output = new(neuroidNet, "Swarming"); output.GetInputFrom(alignment, sc.alignmentForce); output.GetInputFrom(cohesion, sc.cohesionForce); output.GetInputFrom(avoidance, -sc.avoidanceForce); output.GetInputFrom(boundary, sc.boundaryForce); - } -} \ No newline at end of file + }} \ No newline at end of file