//Constructors /// <summary> /// Creates an initialized instance /// </summary> /// <param name="role">Role of the neuron (excitatory or inhibitory)</param> /// <param name="refractoryPeriods">Number of after spike computation cycles while an input stimuli is ignored (ms)</param> /// <param name="solverMethod">ODE numerical solver method</param> /// <param name="solverCompSteps">ODE numerical solver computation steps of the time step</param> public AutoIzhikevichIFSettings(NeuronCommon.NeuronRole role, int refractoryPeriods, ODENumSolver.Method solverMethod, int solverCompSteps ) { Role = role; RefractoryPeriods = refractoryPeriods; SolverMethod = solverMethod; SolverCompSteps = solverCompSteps; return; }
//Constructor /// <summary> /// Creates an initialized instance /// </summary> /// <param name="placement">Home pool identificator and neuron placement within the pool.</param> /// <param name="role">Neuron's role (Excitatory/Inhibitory).</param> /// <param name="activation">Instantiated activation function.</param> /// <param name="signalingRestriction">Output signaling restriction. Spiking activation causes output signal always restricted to SpikingOnly.</param> /// <param name="predictorsCfg">Enabled/Disabled predictors for the neuron.</param> /// <param name="bias">Constant bias to be applied.</param> /// <param name="analogFiringThreshold">A number between 0 and 1 (LT1). Every time the new activation value is higher than the previous activation value by at least the threshold, it is evaluated as a firing event. Ignored in case of spiking activation.</param> /// <param name="retainmentStrength">Strength of the analog neuron's retainment property. Ignored in case of spiking activation.</param> public HiddenNeuron(NeuronPlacement placement, NeuronCommon.NeuronRole role, IActivationFunction activation, NeuronCommon.NeuronSignalingRestrictionType signalingRestriction, HiddenNeuronPredictorsSettings predictorsCfg, double bias = 0, double analogFiringThreshold = PoolSettings.NeuronGroupSettings.DefaultAnalogFiringThreshold, double retainmentStrength = 0 ) { Placement = placement; Statistics = new NeuronStatistics(); if (role == NeuronCommon.NeuronRole.Input) { throw new ArgumentException("Role of the hidden neuron can not be Input.", "role"); } Role = role; Bias = bias; PredictorsCfg = predictorsCfg; //Activation specific _activation = activation; if (activation.TypeOfActivation == ActivationType.Spiking) { //Spiking SignalingRestriction = NeuronCommon.NeuronSignalingRestrictionType.SpikingOnly; _analogFiringThreshold = 0; _retainmentStrength = 0; } else { //Analog SignalingRestriction = signalingRestriction; _analogFiringThreshold = analogFiringThreshold; _retainmentStrength = retainmentStrength; } _predictors = predictorsCfg != null ? new HiddenNeuronPredictors(predictorsCfg) : null; Reset(false); return; }
//Methods /// <summary> /// Returns appropriate dynamics settings /// </summary> /// <param name="sourceNeuronType">Type of the source neuron</param> /// <param name="sourceNeuronRole">Role of the source neuron</param> /// <param name="targetNeuronType">Type of the target neuron</param> /// <param name="targetNeuronRole">Role of the target neuron</param> public DynamicsSettings GetDynamicsSettings(ActivationType sourceNeuronType, NeuronCommon.NeuronRole sourceNeuronRole, ActivationType targetNeuronType, NeuronCommon.NeuronRole targetNeuronRole ) { if (sourceNeuronType == ActivationType.Spiking && targetNeuronType == ActivationType.Spiking && sourceNeuronRole == NeuronCommon.NeuronRole.Excitatory && targetNeuronRole == NeuronCommon.NeuronRole.Excitatory ) { return(S2SSynapseE2EDynamicsCfg); } else if (sourceNeuronType == ActivationType.Spiking && targetNeuronType == ActivationType.Spiking && sourceNeuronRole == NeuronCommon.NeuronRole.Excitatory && targetNeuronRole == NeuronCommon.NeuronRole.Inhibitory ) { return(S2SSynapseE2IDynamicsCfg); } else if (sourceNeuronType == ActivationType.Spiking && targetNeuronType == ActivationType.Spiking && sourceNeuronRole == NeuronCommon.NeuronRole.Inhibitory && targetNeuronRole == NeuronCommon.NeuronRole.Excitatory ) { return(S2SSynapseI2EDynamicsCfg); } else if (sourceNeuronType == ActivationType.Spiking && targetNeuronType == ActivationType.Spiking && sourceNeuronRole == NeuronCommon.NeuronRole.Inhibitory && targetNeuronRole == NeuronCommon.NeuronRole.Inhibitory ) { return(S2SSynapseI2IDynamicsCfg); } else if (sourceNeuronType == ActivationType.Analog && targetNeuronType == ActivationType.Spiking && sourceNeuronRole == NeuronCommon.NeuronRole.Excitatory && targetNeuronRole == NeuronCommon.NeuronRole.Excitatory ) { return(A2SSynapseE2EDynamicsCfg); } else if (sourceNeuronType == ActivationType.Analog && targetNeuronType == ActivationType.Spiking && sourceNeuronRole == NeuronCommon.NeuronRole.Excitatory && targetNeuronRole == NeuronCommon.NeuronRole.Inhibitory ) { return(A2SSynapseE2IDynamicsCfg); } else if (sourceNeuronType == ActivationType.Analog && targetNeuronType == ActivationType.Spiking && sourceNeuronRole == NeuronCommon.NeuronRole.Inhibitory && targetNeuronRole == NeuronCommon.NeuronRole.Excitatory ) { return(A2SSynapseI2EDynamicsCfg); } else if (sourceNeuronType == ActivationType.Analog && targetNeuronType == ActivationType.Spiking && sourceNeuronRole == NeuronCommon.NeuronRole.Inhibitory && targetNeuronRole == NeuronCommon.NeuronRole.Inhibitory ) { return(A2SSynapseI2IDynamicsCfg); } else if (sourceNeuronType == ActivationType.Spiking && targetNeuronType == ActivationType.Analog && sourceNeuronRole == NeuronCommon.NeuronRole.Excitatory && targetNeuronRole == NeuronCommon.NeuronRole.Excitatory ) { return(S2ASynapseE2EDynamicsCfg); } else if (sourceNeuronType == ActivationType.Spiking && targetNeuronType == ActivationType.Analog && sourceNeuronRole == NeuronCommon.NeuronRole.Excitatory && targetNeuronRole == NeuronCommon.NeuronRole.Inhibitory ) { return(S2ASynapseE2IDynamicsCfg); } else if (sourceNeuronType == ActivationType.Spiking && targetNeuronType == ActivationType.Analog && sourceNeuronRole == NeuronCommon.NeuronRole.Inhibitory && targetNeuronRole == NeuronCommon.NeuronRole.Excitatory ) { return(S2ASynapseI2EDynamicsCfg); } else if (sourceNeuronType == ActivationType.Spiking && targetNeuronType == ActivationType.Analog && sourceNeuronRole == NeuronCommon.NeuronRole.Inhibitory && targetNeuronRole == NeuronCommon.NeuronRole.Inhibitory ) { return(S2ASynapseI2IDynamicsCfg); } else if (sourceNeuronType == ActivationType.Analog && targetNeuronType == ActivationType.Analog && sourceNeuronRole == NeuronCommon.NeuronRole.Excitatory && targetNeuronRole == NeuronCommon.NeuronRole.Excitatory ) { return(A2ASynapseE2EDynamicsCfg); } else if (sourceNeuronType == ActivationType.Analog && targetNeuronType == ActivationType.Analog && sourceNeuronRole == NeuronCommon.NeuronRole.Excitatory && targetNeuronRole == NeuronCommon.NeuronRole.Inhibitory ) { return(A2ASynapseE2IDynamicsCfg); } else if (sourceNeuronType == ActivationType.Analog && targetNeuronType == ActivationType.Analog && sourceNeuronRole == NeuronCommon.NeuronRole.Inhibitory && targetNeuronRole == NeuronCommon.NeuronRole.Excitatory ) { return(A2ASynapseI2EDynamicsCfg); } else if (sourceNeuronType == ActivationType.Analog && targetNeuronType == ActivationType.Analog && sourceNeuronRole == NeuronCommon.NeuronRole.Inhibitory && targetNeuronRole == NeuronCommon.NeuronRole.Inhibitory ) { return(A2ASynapseI2IDynamicsCfg); } return(null); }