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;
|
return sortedOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Nucleus Clone(ClusterPrefab prefab) {
|
public override Nucleus Clone(ClusterPrefab parent) {
|
||||||
Neuron clone = new(prefab, this.name);
|
Cluster clone = new(this.prefab, parent);
|
||||||
|
|
||||||
foreach (Synapse synapse in this.synapses) {
|
foreach (Synapse synapse in this.synapses) {
|
||||||
Synapse clonedSynapse = clone.AddSynapse(synapse.nucleus);
|
Synapse clonedSynapse = clone.AddSynapse(synapse.nucleus);
|
||||||
clonedSynapse.weight = synapse.weight;
|
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;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,9 +183,19 @@ public class Cluster : Nucleus {
|
|||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GetNucleusIndex(Nucleus[] nucleiArray, Nucleus nucleus) {
|
protected int GetNucleusIndex(Nucleus[] nuclei, Nucleus nucleus) {
|
||||||
for (int i = 0; i < nucleiArray.Length; i++) {
|
for (int i = 0; i < nuclei.Length; i++) {
|
||||||
if (nucleus == nucleiArray[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 i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -318,7 +339,7 @@ public class Cluster : Nucleus {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private List<Neuron> _outputs = null;
|
protected List<Neuron> _outputs = null;
|
||||||
public List<Neuron> outputs {
|
public List<Neuron> outputs {
|
||||||
get {
|
get {
|
||||||
if (this._outputs == null) {
|
if (this._outputs == null) {
|
||||||
|
|||||||
@ -32,9 +32,20 @@ public class ClusterReceptor : Cluster, IReceptor {
|
|||||||
Synapse clonedSynapse = clone.AddSynapse(synapse.nucleus);
|
Synapse clonedSynapse = clone.AddSynapse(synapse.nucleus);
|
||||||
clonedSynapse.weight = synapse.weight;
|
clonedSynapse.weight = synapse.weight;
|
||||||
}
|
}
|
||||||
|
|
||||||
// foreach (Nucleus receiver in this.receivers) {
|
// foreach (Nucleus receiver in this.receivers) {
|
||||||
// clone.AddReceiver(receiver);
|
// 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;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,28 +56,6 @@ public class ClusterReceptor : Cluster, IReceptor {
|
|||||||
set { _array = value; }
|
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() {
|
public override void UpdateStateIsolated() {
|
||||||
float3 sum = this.bias;
|
float3 sum = this.bias;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user