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