Example #1
0
        public void ResetFireState(bool ResetExcitement)
        {
            m_FireCycle = 0;

            //m_Threshold = globals.GlobalThreshold * 2.0;

            //m_Energy = 0.5f;

            if (ResetExcitement)
            {
                m_Excitement = 0f;
            }
            //m_Stimulus = 0f;

            m_AxonOutput      = 0.0f;
            m_FireCycleLength = 5;

            m_FireState = Neuron.FireStates.idle;
        }
Example #2
0
        private void DoAutoFireInternal()
        {
            if (m_Energy < 0.1)
            {
                return;
            }

            //m_FireDelay = ThreadSafeRandom.Next(1, 7);
            //m_FireCycleLength = ThreadSafeRandom.Next(6, 11);

            m_InvokedIteration = globals.Iteration;

            m_FireDelay       = ThreadSafeRandom.Next(1, 7);
            m_FireCycleLength = ThreadSafeRandom.Next(5, 11);

            m_FireState = FireStates.autofire;
            m_FireCycle = 0;

            Fire();
        }
Example #3
0
        private void InvokeFireInternal(float stimulus)
        {
            if (m_FireState != FireStates.idle || m_Energy < 0.1)
            {
                return;
            }

            m_InvokedIteration = globals.Iteration;

            //m_Stimulus += stimulus * (1f - m_Stimulus);
            m_Stimulus += stimulus;
            if (m_Stimulus > 1f)
            {
                m_Stimulus = 1f;
            }

            //m_Excitement += ((1f - m_Excitement) * m_Stimulus);
            //m_Excitement += stimulus * (1f - m_Excitement);
            //if (m_Excitement > 1f)
            //    m_Excitement = 1f;

            //m_FireCycleLength = ThreadSafeRandom.Next(5, 6 + Math.Min(5, (Synapses.Count * 2)));
            //m_FireDelay = (m_AxonOutputCount * 2) + ThreadSafeRandom.Next(1, 2 + Math.Min(5, (Synapses.Count * 2)));

            //m_FireDelay = ThreadSafeRandom.Next(1, 5);
            //m_FireDelay = MaxSynapses / 4;
            //m_FireDelay = 1;
            m_FireDelay       = ThreadSafeRandom.Next(1, 3);
            m_FireCycleLength = ThreadSafeRandom.Next(5, 8);

            OnceFired   = true;
            m_FireState = FireStates.fire;
            m_FireCycle = 0;

            Fire();
        }
Example #4
0
        private void FireInternal()
        {
            if (m_FireState == FireStates.idle)
            {
                return;
            }

            if (m_Energy < 0.1)
            {
                m_FireState = FireStates.idle;
                return;
            }

            m_FireDelay--;
            if (m_FireDelay > 0)
            {
                return;
            }

            //if (m_FireCycle == 0 && m_FireState == FireStates.fire)
            //{
            //    //m_Excitement += 0.025f * (1f - m_Excitement);
            //    m_Excitement += 0.1f * (1f - m_Excitement);
            //    //m_Excitement += ((1.0f - m_Excitement) * m_Stimulus) / 5.0f;
            //    if (m_Excitement > 1f)
            //        m_Excitement = 1f;
            //}

            if (m_FireCycle < 6)
            {
                if (m_NeuronType == NeuronTypes.PyramidCell)
                {
                    m_AxonOutput = globals.ActionPotentials[m_FireCycle];
                }
                else
                {
                    m_AxonOutput = -globals.ActionPotentials[m_FireCycle];
                }
            }
            else
            {
                m_AxonOutput = 0;
            }

            //m_Excitement += Math.Abs(m_AxonOutput) * 0.01f * (1f - m_Excitement);
            m_Excitement += Math.Abs(m_AxonOutput) * 0.005f;

            if (m_Excitement > 1f)
            {
                m_Excitement = 1f;
            }


            m_FireCycle++;
            if (m_FireCycle > m_FireCycleLength)
            {
                m_FireCycle  = 0;
                m_AxonOutput = 0;

                m_Energy -= 0.05f;
                if (m_Energy < 0f)
                {
                    m_Energy = 0f;
                }

                // ToDo: Feed Energy to damped Input
                if (m_Energy * ThreadSafeRandom.NextDouble() < 0.1)
                {
                    m_FireState = FireStates.idle;
                }
                else
                {
                    m_FireDelay = 1;
                }
            }
        }