Fix array extension for clusters
This commit is contained in:
parent
36e73081f9
commit
e262447174
39
Cluster.cs
39
Cluster.cs
@ -151,16 +151,27 @@ public class Cluster : Nucleus {
|
||||
return sortedOrder;
|
||||
}
|
||||
|
||||
public override Nucleus Clone(ClusterPrefab prefab) {
|
||||
Neuron clone = new(prefab, this.name);
|
||||
public override Nucleus Clone(ClusterPrefab parent) {
|
||||
Cluster clone = new(this.prefab, parent);
|
||||
|
||||
foreach (Synapse synapse in this.synapses) {
|
||||
Synapse clonedSynapse = clone.AddSynapse(synapse.nucleus);
|
||||
clonedSynapse.weight = synapse.weight;
|
||||
}
|
||||
// foreach (Nucleus receiver in this.receivers) {
|
||||
// clone.AddReceiver(receiver);
|
||||
// }
|
||||
|
||||
foreach (Neuron output in this.outputs) {
|
||||
foreach (Nucleus receiver in output.receivers) {
|
||||
int ix = GetNucleusIndex(this.clusterNuclei.ToArray(), output);
|
||||
if (ix < 0)
|
||||
continue;
|
||||
|
||||
if (clone.clusterNuclei[ix] is not Neuron clonedOutput)
|
||||
continue;
|
||||
|
||||
clonedOutput.AddReceiver(receiver);
|
||||
}
|
||||
}
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
@ -172,9 +183,19 @@ public class Cluster : Nucleus {
|
||||
return clone;
|
||||
}
|
||||
|
||||
private int GetNucleusIndex(Nucleus[] nucleiArray, Nucleus nucleus) {
|
||||
for (int i = 0; i < nucleiArray.Length; i++) {
|
||||
if (nucleus == nucleiArray[i])
|
||||
protected int GetNucleusIndex(Nucleus[] nuclei, Nucleus nucleus) {
|
||||
for (int i = 0; i < nuclei.Length; i++) {
|
||||
if (nucleus == nuclei[i])
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
protected int GetNucleusIndex(List<Nucleus> nuclei, Nucleus nucleus) {
|
||||
int i = 0;
|
||||
foreach (Nucleus nucleiElement in nuclei) {
|
||||
//for (int i = 0; i < nuclei.Length; i++) {
|
||||
if (nucleus == nucleiElement)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
@ -318,7 +339,7 @@ public class Cluster : Nucleus {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
private List<Neuron> _outputs = null;
|
||||
protected List<Neuron> _outputs = null;
|
||||
public List<Neuron> outputs {
|
||||
get {
|
||||
if (this._outputs == null) {
|
||||
|
||||
@ -32,9 +32,20 @@ public class ClusterReceptor : Cluster, IReceptor {
|
||||
Synapse clonedSynapse = clone.AddSynapse(synapse.nucleus);
|
||||
clonedSynapse.weight = synapse.weight;
|
||||
}
|
||||
|
||||
// foreach (Nucleus receiver in this.receivers) {
|
||||
// clone.AddReceiver(receiver);
|
||||
// }
|
||||
|
||||
this._outputs = null; // Make sure the output are regenerated
|
||||
foreach (Neuron output in this.outputs) {
|
||||
int ix = GetNucleusIndex(this.clusterNuclei, output);
|
||||
if (ix < 0 || clone.clusterNuclei[ix] is not Neuron clonedOutput)
|
||||
continue;
|
||||
|
||||
foreach (Nucleus receiver in output.receivers)
|
||||
clonedOutput.AddReceiver(receiver);
|
||||
}
|
||||
return clone;
|
||||
}
|
||||
|
||||
@ -45,28 +56,6 @@ public class ClusterReceptor : Cluster, IReceptor {
|
||||
set { _array = value; }
|
||||
}
|
||||
|
||||
#region Receivers
|
||||
|
||||
private List<Nucleus> _clusterReceivers = null;
|
||||
// public override List<Nucleus> receivers {
|
||||
// get {
|
||||
// if (_clusterReceivers == null || _clusterReceivers.Count == 0) {
|
||||
// _clusterReceivers = new();
|
||||
// foreach (Nucleus output in this.clusterNuclei) {
|
||||
// _clusterReceivers.AddRange(output.receivers);
|
||||
// }
|
||||
// }
|
||||
// return _clusterReceivers;
|
||||
// }
|
||||
// }
|
||||
// public override void AddReceiver(Nucleus receivingNucleus, float weight = 1) {
|
||||
// string nucleusName = this.
|
||||
// this.output.receivers.Add(receivingNucleus);
|
||||
// receivingNucleus.AddSynapse(this.output, weight);
|
||||
// }
|
||||
|
||||
#endregion Receivers
|
||||
|
||||
public override void UpdateStateIsolated() {
|
||||
float3 sum = this.bias;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user