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 int layerIx;
public int stale = 0;
public readonly Dictionary<Neuroid, Synapse> synapses = new();
// public readonly Dictionary<Neuroid, Synapse> synapses = new();
public Vector3 outputValue;
public HashSet<Neuroid> outputNeuroids = new();
// public HashSet<Neuroid> 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)

View File

@ -1,17 +1,26 @@
using System.Collections.Generic;
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) {
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);
// }
}

View File

@ -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);
}
}

View File

@ -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);
}
}
}}