Exemple #1
0
        /// <summary>
        /// Provides a model for component.
        /// </summary>
        /// <param name="componentName">A component name.</param>
        /// <param name="simulation">Simulation.</param>
        /// <param name="model">A model for component.</param>
        /// <returns>
        /// If a model is stochastic (dev, lot) then a copy of model with be returned.
        /// If a model is not stochastic then a raw model is returned.
        /// </returns>
        public Model ProvideStochasticModel(string componentName, Simulation simulation, Model model)
        {
            if (ModelsGenerators.Any(m => m.Key == model.Name))
            {
                var    modelForComponentGenerator = ModelsGenerators.First(m => m.Key == model.Name);
                string modelId = $"{model.Name}#{componentName}_{simulation.Name}";

                var modelForComponent = modelForComponentGenerator.Value(modelId);

                if (!StochasticModels.ContainsKey(simulation))
                {
                    StochasticModels[simulation] = new Dictionary <string, List <Model> >();
                }

                if (!StochasticModels[simulation].ContainsKey(model.Name))
                {
                    StochasticModels[simulation][model.Name] = new List <Model>();
                }

                StochasticModels[simulation][model.Name].Add(modelForComponent);
                return(modelForComponent);
            }

            return(model);
        }
Exemple #2
0
        /// <summary>
        /// Provides a model for component.
        /// </summary>
        /// <param name="componentName">A component name.</param>
        /// <param name="simulation">Simulation.</param>
        /// <param name="model">A model for component.</param>
        /// <returns>
        /// If a model is stochastic (dev, lot) then a copy of model with be returned.
        /// If a model is not stochastic then a raw model is returned.
        /// </returns>
        public Model ProvideStochasticModel(string componentName, BaseSimulation simulation, Model model)
        {
            if (ModelsGenerators.ContainsKey(model))
            {
                string modelId           = $"{model.Name}#{componentName}_{simulation.Name}";
                var    modelForComponent = ModelsGenerators[model](modelId);

                if (!StochasticModels.ContainsKey(simulation))
                {
                    StochasticModels[simulation] = new Dictionary <Model, List <Model> >();
                }

                if (!StochasticModels[simulation].ContainsKey(model))
                {
                    StochasticModels[simulation][model] = new List <Model>();
                }

                StochasticModels[simulation][model].Add(modelForComponent);
                return(modelForComponent);
            }

            return(model);
        }
Exemple #3
0
        /// <summary>
        /// Registers that a model has a dev parameter.
        /// </summary>
        /// <param name="model">A model.</param>
        /// <param name="generator">A model generator.</param>
        /// <param name="parameter">A parameter.</param>
        /// <param name="tolerance">A tolerance (value of dev).</param>
        /// <param name="distributionName">Distribution name.</param>
        public void RegisterModelDev(
            Model model,
            Func <string, Model> generator,
            Parameter parameter,
            Parameter tolerance,
            string distributionName)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            if (generator == null)
            {
                throw new ArgumentNullException(nameof(generator));
            }

            if (parameter == null)
            {
                throw new ArgumentNullException(nameof(parameter));
            }

            if (tolerance == null)
            {
                throw new ArgumentNullException(nameof(tolerance));
            }

            if (!ModelsWithDev.ContainsKey(model))
            {
                ModelsWithDev[model] = new Dictionary <Parameter, ParameterRandomness>();
            }

            ModelsWithDev[model][parameter] = new ParameterRandomness
            {
                RandomDistributionName = distributionName,
                Tolerance = tolerance,
            };

            if (!ModelsGenerators.ContainsKey(model))
            {
                ModelsGenerators[model] = generator;
            }
        }
Exemple #4
0
        /// <summary>
        /// Registers that a model has a lot parameter.
        /// </summary>
        /// <param name="model">A model.</param>
        /// <param name="generator">A model generator.</param>
        /// <param name="parameter">A parameter.</param>
        /// <param name="tolerance">A tolerance (value of lot).</param>
        /// <param name="distributionName">Distribution name.</param>
        public void RegisterModelLot(
            Model model,
            Func <string, Model> generator,
            Parameter parameter,
            Parameter tolerance,
            string distributionName)
        {
            if (!ModelsWithLot.ContainsKey(model))
            {
                ModelsWithLot[model] = new Dictionary <Parameter, ParameterRandomness>();
            }

            ModelsWithLot[model][parameter] = new ParameterRandomness
            {
                RandomDistributionName = distributionName,
                Tolerance = tolerance,
            };

            if (!ModelsGenerators.ContainsKey(model))
            {
                ModelsGenerators[model] = generator;
            }
        }