Neuroid is a Nucleus
This commit is contained in:
parent
2bae70fae2
commit
88bf20b9c2
@ -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)
|
||||||
|
|||||||
@ -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 HashSet<Neuroid> outputNeuroids = new();
|
||||||
|
|
||||||
public State state;
|
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);
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -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);
|
||||||
}
|
}}
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user