/// <summary>
        /// Request <seealso cref="OptimizationManagerGeneticAlgorithm"/> to start the Optimization Process
        /// </summary>
        private void StartGeneticOptimization()
        {
            // Reset Value
            RoundsCompleted = 0;

            // Array of object to be used as parameters for given strategy
            var parameterValues = GetParameterValues(SelectedStrategy.ParameterDetails).ToArray();

            var optimizationParametersDetail = new SortedDictionary <int, OptimizationParameterDetail>();

            foreach (var optimizationParameterDetail in OptimizationParameters)
            {
                optimizationParametersDetail.Add(optimizationParameterDetail.Index, optimizationParameterDetail);
            }

            var strategyDetails = new GeneticAlgorithmParameters(SelectedStrategy.StrategyType, parameterValues,
                                                                 optimizationParametersDetail, _iterations, _populationSize, _rounds);

            // Change Status
            Status = OptimizationStatus.Working;

            // Clear existing data
            OptimizedParameters.Clear();

            // Raise Event to notify listeners to start Optimization Process
            Task.Factory.StartNew(() => { EventSystem.Publish <GeneticAlgorithmParameters>(strategyDetails); });
        }
        /// <summary>
        /// Displays GA Optimization Result on UI
        /// </summary>
        /// <param name="optimizationResult">Contains optimized parameters information</param>
        private void DisplayResult(GeneticAlgorithmResult optimizationResult)
        {
            _currentDispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
            {
                RoundsCompleted++;

                foreach (OptimizationParameterDetail optimizationParameterDetail in optimizationResult.ParameterList)
                {
                    OptimizedParameters.Add(optimizationParameterDetail);
                }

                if (RoundsCompleted == Rounds)
                {
                    Status = OptimizationStatus.Completed;
                }
            }));
        }
 public void AddOptimizedParameter(OptimizedParameterDTO optimizedParameterDTO)
 {
     OptimizedParameters.Add(optimizedParameterDTO);
 }