/// <inheritdoc/>
        public double Compute(BasicStat continuousActivationStat,
                              BasicStat continuousActivationDiffStat,
                              MovingDataWindow activationMDW,
                              SimpleQueue <byte> firingMDW,
                              double activation,
                              double normalizedActivation,
                              bool spike
                              )
        {
            PredictorActivationDiffStatFigureSettings cfg = (PredictorActivationDiffStatFigureSettings)Cfg;

            if (cfg.Window == PredictorActivationDiffStatFigureSettings.NAWindowNum)
            {
                return(continuousActivationDiffStat.Get(cfg.Figure));
            }
            else
            {
                if (activationMDW.UsedCapacity >= cfg.Window)
                {
                    return(activationMDW.GetDataDiffStat(cfg.Window).Get(cfg.Figure));
                }
                else
                {
                    return(0d);
                }
            }
        }
Exemple #2
0
        /// <inheritdoc/>
        public double Compute(BasicStat continuousActivationStat,
                              BasicStat continuousActivationDiffStat,
                              MovingDataWindow activationMDW,
                              SimpleQueue <byte> firingMDW,
                              double activation,
                              double normalizedActivation,
                              bool spike
                              )
        {
            PredictorFiringTraceSettings cfg = (PredictorFiringTraceSettings)Cfg;

            if (cfg.Window == PredictorFiringTraceSettings.NAWindowNum)
            {
                return(_continuousTrace);
            }
            else
            {
                if (firingMDW.Count >= cfg.Window)
                {
                    double trace = 0d;
                    for (int i = cfg.Window - 1; i >= 0; i--)
                    {
                        trace *= (1d - cfg.Fading);
                        trace += firingMDW.GetElementAt(i, true);
                    }
                    return(trace);
                }
                else
                {
                    return(0d);
                }
            }
        }
Exemple #3
0
 /// <inheritdoc/>
 public double Compute(BasicStat continuousActivationStat,
                       BasicStat continuousActivationDiffStat,
                       MovingDataWindow activationMDW,
                       SimpleQueue <byte> firingMDW,
                       double activation,
                       double normalizedActivation,
                       bool spike
                       )
 {
     return(activation);
 }
        /// <inheritdoc/>
        public double Compute(BasicStat continuousActivationStat,
                              BasicStat continuousActivationDiffStat,
                              MovingDataWindow activationMDW,
                              SimpleQueue <byte> firingMDW,
                              double activation,
                              double normalizedActivation,
                              bool spike
                              )
        {
            PredictorActivationPowerSettings cfg = (PredictorActivationPowerSettings)Cfg;

            return(Math.Pow(Math.Abs(activation), cfg.Exponent) * (cfg.KeepSign ? Math.Sign(activation) : 1d));
        }
        /// <inheritdoc/>
        public double Compute(BasicStat continuousActivationStat,
                              BasicStat continuousActivationDiffStat,
                              MovingDataWindow activationMDW,
                              SimpleQueue <byte> firingMDW,
                              double activation,
                              double normalizedActivation,
                              bool spike
                              )
        {
            PredictorActivationDiffRescaledRangeSettings cfg = (PredictorActivationDiffRescaledRangeSettings)Cfg;

            if (activationMDW.UsedCapacity >= cfg.Window)
            {
                return(activationMDW.GetDataDiffRescaledRange(cfg.Window));
            }
            else
            {
                return(0d);
            }
        }
Exemple #6
0
        /// <summary>
        /// Creates new initialized instance.
        /// </summary>
        /// <param name="cfg">The configuration.</param>
        public PredictorsProvider(PredictorsProviderSettings cfg)
        {
            int reqAMDWCapacity = 0;
            int reqFMDWCapacity = 0;

            _predictorCollection = new List <IPredictor>(cfg.NumOfPredictors);
            _activationMDW       = null;
            _firingMDW           = null;
            _activationStat      = null;
            _activationDiffStat  = null;

            foreach (IPredictorSettings predictorCfg in cfg.PredictorCfgCollection)
            {
                IPredictor predictor = PredictorFactory.CreatePredictor(predictorCfg);
                reqAMDWCapacity = Math.Max(reqAMDWCapacity, predictor.Cfg.RequiredWndSizeOfActivations);
                reqFMDWCapacity = Math.Max(reqFMDWCapacity, predictor.Cfg.RequiredWndSizeOfFirings);
                if (predictor.Cfg.NeedsContinuousActivationStat && _activationStat == null)
                {
                    _activationStat = new BasicStat();
                }
                if (predictor.Cfg.NeedsContinuousActivationDiffStat && _activationDiffStat == null)
                {
                    _activationDiffStat = new BasicStat();
                }
                _predictorCollection.Add(predictor);
            }

            if (reqAMDWCapacity > 0)
            {
                _activationMDW = new MovingDataWindow(reqAMDWCapacity);
            }
            if (reqFMDWCapacity > 0)
            {
                _firingMDW = new SimpleQueue <byte>(reqFMDWCapacity);
            }
            Reset();
            return;
        }
Exemple #7
0
        /// <summary>
        /// Creates new initialized instance.
        /// </summary>
        /// <param name="cfg">Configuration to be used. Note that ParamsCfg member inside the cfg must not be null.</param>
        public PredictorsProvider(PredictorsSettings cfg)
        {
            //Check
            if (cfg.ParamsCfg == null)
            {
                throw new ArgumentException("Invalid configuration. ParamsCfg inside the configuration is null.", "cfg");
            }
            //Store configuration
            _cfg = cfg;
            //Determine necessary size of the activation moving window and instantiate it
            int activationMWSize = 0;

            if (_cfg.IsEnabled(PredictorID.ActivationMWAvg))
            {
                switch (_cfg.ParamsCfg.ActivationMWAvgCfg.Weights)
                {
                case PredictorMWAvgWeightsType.Exponential:
                    _activationMWAvgWeights = _expWeightsCache;
                    activationMWSize        = Math.Min(_cfg.ParamsCfg.ActivationMWAvgCfg.Window, _expWeightsCache.Length);
                    break;

                case PredictorMWAvgWeightsType.Linear:
                    _activationMWAvgWeights = _linWeightsCache;
                    activationMWSize        = Math.Min(_cfg.ParamsCfg.ActivationMWAvgCfg.Window, _linWeightsCache.Length);
                    break;

                case PredictorMWAvgWeightsType.Constant:
                    _activationMWAvgWeights = null;
                    activationMWSize        = _cfg.ParamsCfg.ActivationMWAvgCfg.Window;
                    break;

                default:
                    throw new InvalidOperationException($"Unsupported weights type {_cfg.ParamsCfg.ActivationMWAvgCfg.Weights}.");
                }
            }
            _activationMDW = activationMWSize == 0 ? null : new MovingDataWindow(activationMWSize);

            //Determine necessary size of the firing moving window and instantiate it
            int firingMWSize = 0;

            if (_cfg.IsEnabled(PredictorID.FiringMWAvg))
            {
                switch (_cfg.ParamsCfg.FiringMWAvgCfg.Weights)
                {
                case PredictorMWAvgWeightsType.Exponential:
                    _firingMWAvgWeights = _expWeightsCache;
                    firingMWSize        = Math.Min(_cfg.ParamsCfg.FiringMWAvgCfg.Window, _expWeightsCache.Length);
                    break;

                case PredictorMWAvgWeightsType.Linear:
                    _firingMWAvgWeights = _linWeightsCache;
                    firingMWSize        = Math.Min(_cfg.ParamsCfg.FiringMWAvgCfg.Window, _linWeightsCache.Length);
                    break;

                case PredictorMWAvgWeightsType.Constant:
                    _firingMWAvgWeights = null;
                    firingMWSize        = _cfg.ParamsCfg.FiringMWAvgCfg.Window;
                    break;

                default:
                    throw new InvalidOperationException($"Unsupported weights type {_cfg.ParamsCfg.FiringMWAvgCfg.Weights}.");
                }
            }
            if (_cfg.IsEnabled(PredictorID.FiringBinPattern))
            {
                firingMWSize = Math.Max(firingMWSize, _cfg.ParamsCfg.FiringBinPatternCfg.Window);
            }
            if (_cfg.IsEnabled(PredictorID.FiringCount))
            {
                firingMWSize = Math.Max(firingMWSize, _cfg.ParamsCfg.FiringCountCfg.Window);
            }
            _firingMDW = firingMWSize == 0 ? null : new Bitwise.Window(firingMWSize);
            Reset();
            return;
        }