Fix external synapse persistence
This commit is contained in:
parent
8cb6b979bf
commit
bcc6e95a44
@ -180,30 +180,61 @@ namespace NanoBrain {
|
|||||||
foreach (NeuronData neuronData in clusterData.neurons) {
|
foreach (NeuronData neuronData in clusterData.neurons) {
|
||||||
Neuron receiver = this.GetNeuron(neuronData.name);
|
Neuron receiver = this.GetNeuron(neuronData.name);
|
||||||
foreach (SynapseData synapseData in neuronData.synapses) {
|
foreach (SynapseData synapseData in neuronData.synapses) {
|
||||||
|
// If the synapse points to another cluster
|
||||||
if (synapseData.clusterName != this.name) {
|
if (synapseData.clusterName != this.name) {
|
||||||
// Add reference to external cluster
|
// Add reference to external cluster
|
||||||
ClusterPrefab extPrefab = Resources.Load(synapseData.clusterName) as ClusterPrefab;
|
// Do we know the external cluster already?
|
||||||
if (extPrefab == null)
|
Cluster extCluster = this.GetCluster(synapseData.clusterName);
|
||||||
Debug.LogError($"Could not find cluster Resource {synapseData.clusterName}");
|
if (extCluster == null) {
|
||||||
else {
|
// if not: create new external cluster
|
||||||
uint instanceCount = 1;
|
Debug.Log("New ext cluster");
|
||||||
ExternalClusterData externalClusterData = null;
|
ExternalClusterData externalClusterData = clusterData.GetCluster(synapseData.clusterName);
|
||||||
foreach (ExternalClusterData externalCluster in clusterData.clusters) {
|
ClusterPrefab extPrefab = Resources.Load(externalClusterData.prefabName) as ClusterPrefab;
|
||||||
if (externalCluster.clusterName == synapseData.clusterName) {
|
extCluster = new(extPrefab, this, instanceCount) {
|
||||||
instanceCount = externalCluster.instanceCount;
|
name = externalClusterData.name
|
||||||
externalClusterData = externalCluster;
|
};
|
||||||
}
|
}
|
||||||
}
|
// Do we have the synapse already?
|
||||||
if (this.nuclei.Find(nucleus => nucleus.name == synapseData.clusterName) is not Cluster extCluster) {
|
Neuron extNeuron = extCluster.GetNeuron(synapseData.neuronName);
|
||||||
extCluster = new(extPrefab, this, instanceCount);
|
Synapse synapse = receiver.GetSynapse(extNeuron); //extCluster, synapseData.neuronName);
|
||||||
if (externalClusterData != null)
|
if (synapse == null) {
|
||||||
extCluster.name = externalClusterData.name;
|
Debug.Log("new receiver for external");
|
||||||
//extCluster.name = clusterData.name;
|
// If not: create new synapse
|
||||||
}
|
|
||||||
Neuron extNeuron = extCluster.GetNeuron(synapseData.neuronName);
|
|
||||||
Debug.Log("Add receiver for external");
|
|
||||||
extNeuron.AddReceiver(receiver);
|
extNeuron.AddReceiver(receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Cluster foundCluster = this.nuclei.Find(nucleus => nucleus is Cluster cluster && cluster.prefab.name == synapseData.clusterName) as Cluster;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
ClusterPrefab extPrefab = Resources.Load(synapseData.clusterName) as ClusterPrefab;
|
||||||
|
if (extPrefab == null)
|
||||||
|
Debug.LogError($"Could not find cluster Resource {synapseData.clusterName}");
|
||||||
|
else {
|
||||||
|
uint instanceCount = 1;
|
||||||
|
ExternalClusterData externalClusterData = null;
|
||||||
|
foreach (ExternalClusterData externalCluster in clusterData.clusters) {
|
||||||
|
if (externalCluster.prefabName == synapseData.clusterName) {
|
||||||
|
instanceCount = externalCluster.instanceCount;
|
||||||
|
externalClusterData = externalCluster;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Nucleus foundNucleus = this.nuclei.Find(nucleus => nucleus is Cluster cluster && cluster.prefab.name == synapseData.clusterName);
|
||||||
|
if (foundNucleus is not Cluster extCluster) {
|
||||||
|
Debug.Log("New ext cluster");
|
||||||
|
extCluster = new(extPrefab, this, instanceCount);
|
||||||
|
if (externalClusterData != null)
|
||||||
|
extCluster.name = externalClusterData.name;
|
||||||
|
//extCluster.name = clusterData.name;
|
||||||
|
}
|
||||||
|
Neuron extNeuron = extCluster.GetNeuron(synapseData.neuronName);
|
||||||
|
Synapse synapse = receiver.GetSynapse(extCluster, synapseData.neuronName);
|
||||||
|
if (synapse == null) {
|
||||||
|
Debug.Log("Add receiver for external");
|
||||||
|
extNeuron.AddReceiver(receiver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Neuron sender = this.GetNeuron(synapseData.neuronName);
|
Neuron sender = this.GetNeuron(synapseData.neuronName);
|
||||||
@ -951,17 +982,25 @@ namespace NanoBrain {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ExternalClusterData GetCluster(string clusterName) {
|
||||||
|
foreach (ExternalClusterData cluster in this.clusters) {
|
||||||
|
if (cluster.name == clusterName)
|
||||||
|
return cluster;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class ExternalClusterData {
|
public class ExternalClusterData {
|
||||||
public string name;
|
public string name;
|
||||||
public string clusterName;
|
public string prefabName;
|
||||||
public uint instanceCount;
|
public uint instanceCount;
|
||||||
|
|
||||||
public ExternalClusterData(Cluster cluster) {
|
public ExternalClusterData(Cluster cluster) {
|
||||||
this.name = cluster.name;
|
this.name = cluster.name;
|
||||||
this.clusterName = cluster.prefab.name;
|
this.prefabName = cluster.prefab.name;
|
||||||
this.instanceCount = (uint)cluster.instanceCount;
|
this.instanceCount = (uint)cluster.instanceCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -95,6 +95,12 @@ namespace NanoBrain {
|
|||||||
|
|
||||||
return this.GetSynapse(sender);
|
return this.GetSynapse(sender);
|
||||||
}
|
}
|
||||||
|
public Synapse GetSynapse(Cluster cluster, string senderNeuronName) {
|
||||||
|
Neuron sender = cluster.GetNeuron(senderNeuronName);
|
||||||
|
if (sender == null)
|
||||||
|
return null;
|
||||||
|
return this.GetSynapse(sender);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Remove a synapse from a Nucleus
|
/// Remove a synapse from a Nucleus
|
||||||
|
|||||||
@ -144,10 +144,11 @@ namespace NanoBrain {
|
|||||||
public bool trainable;
|
public bool trainable;
|
||||||
|
|
||||||
public SynapseData(Synapse synapse) {
|
public SynapseData(Synapse synapse) {
|
||||||
if (synapse.neuron.parent.prefab != null)
|
// if (synapse.neuron.parent.prefab != null)
|
||||||
this.clusterName = synapse.neuron.parent.prefab.name;
|
// this.clusterName = synapse.neuron.parent.prefab.name;
|
||||||
else
|
// else
|
||||||
this.clusterName = synapse.neuron.parent.name;
|
// this.clusterName = synapse.neuron.parent.name;
|
||||||
|
this.clusterName = synapse.neuron.parent.name;
|
||||||
this.neuronName = synapse.neuron.name;
|
this.neuronName = synapse.neuron.name;
|
||||||
this.weight = synapse.weight;
|
this.weight = synapse.weight;
|
||||||
this.trainable = synapse.trainable;
|
this.trainable = synapse.trainable;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user