public OptimizationResult()
 {
     Inputs = new List<VariableInfo>();
     Uniforms = new List<VariableInfo>();
     Textures = new List<VariableInfo>();
     Statistics = new OptimizationStatistics();
 }
        private void OnStrategyExecutorStatusChanged(bool status, string key)
        {
            try
            {
                if (_asyncClassLogger.IsInfoEnabled)
                {
                    _asyncClassLogger.Info("Strategy: " + key + " is running: " + status, _type.FullName, "OnStrategyExecutorStatusChanged");
                }

                // Get Statistics if the strategy is completed
                if (!status)
                {
                    StrategyExecutor strategyExecutor;
                    if (_strategiesCollection.TryRemove(key, out strategyExecutor))
                    {
                        StringBuilder parametersInfo = new StringBuilder();

                        foreach (object ctorArgument in strategyExecutor.CtorArguments)
                        {
                            parametersInfo.Append(ctorArgument.ToString());
                            parametersInfo.Append(" | ");
                        }

                        // Create new object to be used with Event Aggregator
                        var optimizationStatistics =
                            new OptimizationStatistics(strategyExecutor.Statistics, parametersInfo.ToString());

                        // Unhook Event
                        strategyExecutor.StatusChanged -= OnStrategyExecutorStatusChanged;

                        // Stop Strategy
                        strategyExecutor.StopStrategy();
                        EventSystem.Publish <OptimizationStatistics>(optimizationStatistics);

                        // Close all connections
                        strategyExecutor.Close();

                        // Publish event to notify listeners
                        EventSystem.Publish <OptimizationStatistics>(optimizationStatistics);

                        // Execute next iteration
                        StartStrategyExecution();
                    }
                }
            }
            catch (Exception exception)
            {
                _asyncClassLogger.Error(exception, _type.FullName, "OnStrategyExecutorStatusChanged");
            }
        }
示例#3
0
        private void DisplayOptimizationStatistics(OptimizationStatistics optimizationStatistics)
        {
            try
            {
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("Displaying optimization statistics", _type.FullName, "DisplayOptimizationStatistics");
                }

                // Display on UI
                _currentDispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => StatisticsCollection.Add(optimizationStatistics)));
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "DisplayOptimizationStatistics");
            }
        }
示例#4
0
        /// <summary>
        /// Start Strategy Optimization
        /// </summary>
        /// <param name="optimizationParameters">Contains info for the parameters to be used for optimization</param>
        private void StartOptimization(BruteForceParameters optimizationParameters)
        {
            try
            {
                // Save instance
                _optimizationParameters = optimizationParameters;

                if (_asyncClassLogger.IsInfoEnabled)
                {
                    _asyncClassLogger.Info("Getting argument combinations", _type.FullName, "StartOptimization");
                }

                // Change Status to indicate on UI
                _optimizationParameters.Status = OptimizationStatus.Working;

                // Clear all previous information
                _strategiesCollection.Clear();
                _ctorArguments.Clear();

                // Get Parameter values to be used in the Constructor
                object[] ctorArguments = optimizationParameters.GetParameterValues();

                // Get Conditional Parameter values to be used for creating Iterations
                Tuple <int, object, double>[] conditionalParameters = optimizationParameters.GetConditionalParameters();

                // Save Parameter Details
                _parmatersDetails = optimizationParameters.ParameterDetails;

                // Get all ctor arguments to be used for optimization
                CreateCtorCombinations(ctorArguments, conditionalParameters);

                // Initialize Stratgey for each set of arguments
                foreach (object[] ctorArgumentValues in _ctorArguments)
                {
                    // Get new Key.
                    string key = ApplicationIdGenerator.NextId();

                    var instanceParameterDetails = new Dictionary <string, ParameterDetail>();

                    for (int i = 0; i < ctorArgumentValues.Length; i++)
                    {
                        // Create new parameter details to be when creating Strategy Instance object
                        ParameterDetail tempParameterDetail = new ParameterDetail(_parmatersDetails[i].ParameterType, ctorArgumentValues[i]);

                        instanceParameterDetails.Add(_parmatersDetails[i].Description, tempParameterDetail);
                    }

                    // Create Strategy Instance object
                    var instance = new StrategyInstance(key, instanceParameterDetails, optimizationParameters.StrategyType);

                    // Save Strategy details in new Strategy Executor object
                    var strategyExecutor = new StrategyExecutor(instance, _currentDispatcher);

                    // Register Event
                    strategyExecutor.StatusChanged += OnStrategyExecutorStatusChanged;

                    // Add to local map
                    _strategiesCollection.AddOrUpdate(key, strategyExecutor, (ky, value) => strategyExecutor);

                    StringBuilder parametersInfo = new StringBuilder();
                    foreach (object ctorArgument in strategyExecutor.CtorArguments)
                    {
                        parametersInfo.Append(ctorArgument.ToString());
                        parametersInfo.Append(" | ");
                    }

                    // Create new object to be used with Event Aggregator
                    var optimizationStatistics = new OptimizationStatistics(strategyExecutor.StrategyKey);
                    optimizationStatistics.Description      = parametersInfo.ToString();
                    optimizationStatistics.ExecutionDetails = instance.ExecutionDetails;

                    // Raise event to Bind statistics to UI and will be updated as each instance is executed
                    EventSystem.Publish <OptimizationStatistics>(optimizationStatistics);
                }

                // Save total number of iterations count
                _optimizationParameters.TotalIterations = _strategiesCollection.Count;

                // Start executing each instance
                StartStrategyExecution();
            }
            catch (Exception exception)
            {
                _asyncClassLogger.Error(exception, _type.FullName, "StartOptimization");
            }
        }
 /// <summary>
 /// Displays results obtained from Brute Force optimization
 /// </summary>
 /// <param name="optimizationStatistics">Inidividual Brute Force iteration results</param>
 private void DisplayOptimizationStatistics(OptimizationStatistics optimizationStatistics)
 {
     _currentDispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => OptimizationStatisticsCollection.Add(optimizationStatistics)));
 }