public bool AddSynapse(Synapse synapse) { return(AddSynapse(synapse, false)); }
public bool AddSynapse(Synapse synapse, bool force) { lock (m_SyncObject) { if (force) { if (m_MaxSynapses > 0 && Synapses.Count >= m_MaxSynapses) { return(false); } Synapses.Add(synapse); return(true); } if (m_MaxSynapses > 0 && m_SynapseAddedThisRound) { return(false); } if (m_MaxSynapses == 0 || Synapses.Count == 0) { Synapses.Add(synapse); m_SynapseAddedThisRound = true; return(true); } else if (Synapses.Count > m_MaxSynapses) { return(false); } else { if (m_RequestedConnections.ContainsKey(synapse.Axon.Key)) { int score = m_RequestedConnections[synapse.Axon.Key]; if (score > 100) // 7th contact { Synapses.Add(synapse); m_SynapseAddedThisRound = true; m_RequestedConnections.Clear(); return(true); } else { m_RequestedConnections[synapse.Axon.Key] = score + 40; return(false); } } else { if (m_RequestedConnections.Count > 12) { //m_RequestedConnections.Remove(m_RequestedConnections.Keys.First()); m_RequestedConnections.Remove(m_RequestedConnections.Keys.Skip(ThreadSafeRandom.Next(11)).First()); } m_RequestedConnections.Add(synapse.Axon.Key, 40); return(false); } } } }
public void AddConnection(Neuron transmitter, Neuron receptor, float EmphasisIncrease, bool force) { if (transmitter == receptor || transmitter == null) { return; } Synapse synapse = null; lock (receptor.SyncObject) { foreach (Synapse s in receptor.Synapses) { if (s.Axon == transmitter) { synapse = s; break; } } } if (synapse == null) { lock (transmitter.SyncObject) { foreach (Synapse s in transmitter.Synapses) { if (s.Axon == receptor) { synapse = s; break; } } } } if (synapse != null) { //lock (synapse.SyncLock) //{ if (globals.MaxEmphasis == 0 || synapse.Emphasis < globals.MaxEmphasis) { float OldEmphasis = synapse.Emphasis; synapse.Emphasis += EmphasisIncrease; globals.IncreaseTotalEmphasis((double)(synapse.Emphasis - OldEmphasis)); } //} return; } synapse = new Synapse(); synapse.Emphasis = EmphasisIncrease; synapse.Axon = transmitter; if (receptor.AddSynapse(synapse, force)) { lock (transmitter.SyncObject) { transmitter.AxonOutputCount++; } globals.IncreaseTotalEmphasis((double)synapse.Emphasis); globals.IncreaseConnectionCount(); } }