Neuroid is a Nucleus

This commit is contained in:
Pascal Serrarens 2025-12-02 12:26:13 +01:00
parent 2bae70fae2
commit 88bf20b9c2
4 changed files with 40 additions and 20 deletions

View File

@ -28,16 +28,15 @@ public class NeuroidNetwork {
} }
} }
public class Neuroid { public class Neuroid : Nucleus {
public string name; public string name;
public int layerIx;
public int stale = 0; public int stale = 0;
public readonly Dictionary<Neuroid, Synapse> synapses = new(); // public readonly Dictionary<Neuroid, Synapse> synapses = new();
public Vector3 outputValue; public Vector3 outputValue;
public HashSet<Neuroid> outputNeuroids = new(); // public HashSet<Neuroid> outputNeuroids = new();
public bool average = false; public bool average = false;
//public bool quadratic = false; //public bool quadratic = false;
@ -46,7 +45,7 @@ public class Neuroid {
public NeuroidNetwork net; public NeuroidNetwork net;
public Neuroid(NeuroidNetwork net, string name) { public Neuroid(NeuroidNetwork net, string name) : base(net) {
this.net = net; this.net = net;
this.name = name; this.name = name;
if (this.net != null) if (this.net != null)
@ -58,9 +57,9 @@ public class Neuroid {
this.synapses[input] = new(input, Vector3.zero, 1.0f); this.synapses[input] = new(input, Vector3.zero, 1.0f);
} }
public void AddReceiver(Neuroid receiver) { // public void AddReceiver(Neuroid receiver) {
this.outputNeuroids.Add(receiver); // this.outputNeuroids.Add(receiver);
} // }
public void ResetWeights() { public void ResetWeights() {
foreach (Synapse synapse in this.synapses.Values) foreach (Synapse synapse in this.synapses.Values)

View File

@ -1,17 +1,26 @@
using System.Collections.Generic;
public class Nucleus { public class Nucleus {
public class State { //public Neuroid output;
public readonly Dictionary<Neuroid, Synapse> synapses = new();
}
public State state; public HashSet<Neuroid> outputNeuroids = new();
public int layerIx;
public Neuroid output;
public Nucleus(NeuroidNetwork neuroidNet) { public Nucleus(NeuroidNetwork neuroidNet) {
this.output = new(neuroidNet, "Nucleus output"); //this.output = new(neuroidNet, "Nucleus output");
} }
public void AddReceiver(Neuroid receiver) { public virtual void AddReceiver(Neuroid receiver) {
this.output.AddReceiver(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);
// }
} }

View File

@ -1,14 +1,24 @@
public class Roaming : Nucleus { public class Roaming : Nucleus {
public float avoidanceForce;
public Neuroid avoidance; public Neuroid avoidance;
public Neuroid output;
public const int BoundaryType = 1; public const int BoundaryType = 1;
public const int BoidType = 2; public const int BoidType = 2;
public Roaming(NeuroidNetwork neuroidNet, Perception perception, SwarmControl sc) : base(neuroidNet) { 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); perception.SendPositions(avoidance);
this.output = new(neuroidNet, "Roaming");
output.GetInputFrom(avoidance, -sc.avoidanceForce); output.GetInputFrom(avoidance, -sc.avoidanceForce);
} }
public override void AddReceiver(Neuroid receiver) {
output.AddReceiver(receiver);
}
} }

View File

@ -6,6 +6,8 @@ public class Swarming : Nucleus {
public Neuroid avoidance; public Neuroid avoidance;
public Neuroid boundary; public Neuroid boundary;
public Neuroid output;
public const int BoundaryType = 1; public const int BoundaryType = 1;
public const int BoidType = 2; public const int BoidType = 2;
@ -21,9 +23,9 @@ public class Swarming : Nucleus {
boundary = new(neuroidNet, "Boundary"); boundary = new(neuroidNet, "Boundary");
this.output = new(neuroidNet, "Swarming");
output.GetInputFrom(alignment, sc.alignmentForce); output.GetInputFrom(alignment, sc.alignmentForce);
output.GetInputFrom(cohesion, sc.cohesionForce); output.GetInputFrom(cohesion, sc.cohesionForce);
output.GetInputFrom(avoidance, -sc.avoidanceForce); output.GetInputFrom(avoidance, -sc.avoidanceForce);
output.GetInputFrom(boundary, sc.boundaryForce); output.GetInputFrom(boundary, sc.boundaryForce);
} }}
}