Ejemplo n.º 1
0
 public bool AddSynapse(Synapse synapse)
 {
     return(AddSynapse(synapse, false));
 }
Ejemplo n.º 2
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        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();
            }
        }