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; }
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(); }
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(); }
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; } } }