/// <summary> /// The deep copy constructor /// </summary> /// <param name="source">Source instance</param> public PredictorsSettings(PredictorsSettings source) { EnablingSwitchCollection = (bool[])source.EnablingSwitchCollection.Clone(); //Params ParamsCfg = (PredictorsParamsSettings)source.ParamsCfg?.DeepClone(); return; }
/// <summary> /// Creates initialized instance using xml element /// </summary> /// <param name="elem">Xml element containing settings</param> public PredictorsParamsSettings(XElement elem) : this() { //Validation XElement settingsElem = Validate(elem, XsdTypeName); //Parsing foreach (PredictorsProvider.PredictorID predictorID in typeof(PredictorsProvider.PredictorID).GetEnumValues()) { XElement predictorElem = settingsElem.Elements(PredictorsSettings.GetXmlName(predictorID)).FirstOrDefault(); if (predictorElem != null) { switch (predictorID) { case PredictorsProvider.PredictorID.ActivationFadingSum: ActivationFadingSumCfg = new ActivationFadingSumSettings(predictorElem); break; case PredictorsProvider.PredictorID.ActivationMWAvg: ActivationMWAvgCfg = new ActivationMWAvgSettings(predictorElem); break; case PredictorsProvider.PredictorID.FiringFadingSum: FiringFadingSumCfg = new FiringFadingSumSettings(predictorElem); break; case PredictorsProvider.PredictorID.FiringMWAvg: FiringMWAvgCfg = new FiringMWAvgSettings(predictorElem); break; case PredictorsProvider.PredictorID.FiringCount: FiringCountCfg = new FiringCountSettings(predictorElem); break; case PredictorsProvider.PredictorID.FiringBinPattern: FiringBinPatternCfg = new FiringBinPatternSettings(predictorElem); break; default: break; } } } return; }
//Constructors /// <summary> /// Creates initialized instance as a result of L1, L2 and L3 predictors settings. /// (L1 overrides L2 overiddes L3) /// </summary> /// <param name="level1PredictorsCfg">Level1 (lowest level) predictors settings</param> /// <param name="level2PredictorsCfg">Level2 predictors settings</param> /// <param name="level3PredictorsCfg">Level3 (highest level) predictors settings</param> public PredictorsSettings(PredictorsSettings level1PredictorsCfg, PredictorsSettings level2PredictorsCfg, PredictorsSettings level3PredictorsCfg ) { EnablingSwitchCollection = new bool[PredictorsProvider.NumOfSupportedPredictors]; //Params ParamsCfg = level1PredictorsCfg?.ParamsCfg != null ? (PredictorsParamsSettings)level1PredictorsCfg.ParamsCfg.DeepClone() : (level2PredictorsCfg?.ParamsCfg != null ? (PredictorsParamsSettings)level2PredictorsCfg.ParamsCfg.DeepClone() : (level3PredictorsCfg?.ParamsCfg != null ? (PredictorsParamsSettings)level3PredictorsCfg.ParamsCfg.DeepClone() : new PredictorsParamsSettings())); //Enabling switches foreach (PredictorsProvider.PredictorID predictorID in typeof(PredictorsProvider.PredictorID).GetEnumValues()) { EnablingSwitchCollection[(int)predictorID] = ((level1PredictorsCfg == null ? true : level1PredictorsCfg.EnablingSwitchCollection[(int)predictorID]) && (level2PredictorsCfg == null ? true : level2PredictorsCfg.EnablingSwitchCollection[(int)predictorID]) && (level3PredictorsCfg == null ? true : level3PredictorsCfg.EnablingSwitchCollection[(int)predictorID]) ); } return; }
/// <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; }
/// <summary> /// Generates default named xml element containing the settings. /// </summary> /// <param name="suppressDefaults">Specifies whether to ommit optional nodes having set default values</param> /// <returns>XElement containing the settings</returns> public override XElement GetXml(bool suppressDefaults) { return(GetXml(PredictorsSettings.GetXmlName(ID), suppressDefaults)); }