82 lines
2.4 KiB
C#
82 lines
2.4 KiB
C#
/*
|
|
using UnityEngine;
|
|
using Unity.Mathematics;
|
|
using static Unity.Mathematics.math;
|
|
|
|
[System.Serializable]
|
|
public class Neuroid : Neuron {
|
|
|
|
public bool average = false;
|
|
|
|
public Neuroid(Cluster brain, string name) : base(name) {
|
|
this.cluster = brain;
|
|
if (this.cluster != null) {
|
|
this.cluster.nuclei.Add(this);
|
|
}
|
|
else
|
|
Debug.LogError("No neuroid network");
|
|
}
|
|
|
|
public Neuroid(string name) : base(name) { }
|
|
|
|
public override INucleus Clone() {
|
|
Neuroid clone = new(this.name) {
|
|
cluster = this.cluster,
|
|
array = this.array,
|
|
curve = this.curve,
|
|
curvePreset = this.curvePreset,
|
|
curveMax = this.curveMax,
|
|
average = this.average
|
|
};
|
|
if (clone.cluster != null)
|
|
clone.cluster.nuclei.Add(clone);
|
|
|
|
foreach (Synapse synapse in this.synapses) {
|
|
Synapse clonedSynapse = clone.AddSynapse(synapse.nucleus);
|
|
clonedSynapse.weight = synapse.weight;
|
|
}
|
|
foreach (INucleus receiver in this.receivers) {
|
|
clone.AddReceiver(receiver);
|
|
}
|
|
return clone;
|
|
}
|
|
|
|
public override void UpdateState() {
|
|
float3 sum = new(0, 0, 0);
|
|
int n = 0;
|
|
|
|
//Applying the weight factgors
|
|
foreach (Synapse synapse in this.synapses) {
|
|
sum = sum + (synapse.weight * synapse.nucleus.outputValue);
|
|
if (lengthsq(synapse.nucleus.outputValue) != 0)
|
|
n++;
|
|
}
|
|
if (average)
|
|
sum /= n;
|
|
|
|
// Activation function
|
|
Vector3 result;
|
|
switch (this.curvePreset) {
|
|
case CurvePresets.Linear:
|
|
result = sum;
|
|
break;
|
|
case CurvePresets.Sqrt:
|
|
result = normalize(sum) * System.MathF.Sqrt(length(sum));
|
|
break;
|
|
case CurvePresets.Power:
|
|
result = normalize(sum) * System.MathF.Pow(length(sum), 2);
|
|
break;
|
|
case CurvePresets.Reciprocal:
|
|
result = normalize(sum) * (1 / length(sum));
|
|
break;
|
|
default:
|
|
float activatedValue = this.curve.Evaluate(length(sum));
|
|
result = normalize(sum) * activatedValue;
|
|
break;
|
|
}
|
|
UpdateResult(result);
|
|
}
|
|
|
|
}
|
|
|
|
*/ |