Exemple #1
0
        async Task ExecuteRunHeuristic()
        {
            try
            {
                List <Problem> problems = null;
                IHeuristicConfigurationSetting settings = null;
                if (Context.Instance.Settings.GeneralSettings.MultiplesExecutions)
                {
                    problems = Context.Instance.Problems;
                }
                else
                {
                    problems = new List <Problem> {
                        Context.Instance.Problems.Where(t => t.ID_Problem.Equals(DARPSelected)).ToList().First()
                    }
                };

                switch (Context.Instance.Settings.GeneralSettings.DefaultHeuristic)
                {
                case "ILS":
                    settings = Context.Instance.Settings.ILSConfigurationSettings;
                    break;

                default:
                    settings = Context.Instance.Settings.ILSConfigurationSettings;
                    break;
                }

                //Mostrar Splash
                splashController.ShowSplash(new SplashInfo());
                RunMetaheuristicInput input = new RunMetaheuristicInput {
                    Problems = problems, HeuristicSettings = settings, Random = new Random(1)
                };
                RunMetaheuristicOutput output = await processController.Specific.RunMetaheuristic.ExecuteProcess(input);

                if (output != null)
                {
                    Context.Instance.Solutions = output.Solutions;
                    DARPResults       = new ResultsViewModel(output.Solutions.First());
                    ILSEvolution      = new ILSEvolutionViewModel(output.Solutions.First());
                    VNSOperators      = new VNSOperatorsViewModel(output.Solutions.First());
                    AlgorithmSummary  = new SummaryResultsViewModel(output.Solutions.First());
                    ChartsViewModel   = new ChartsViewModel(output.Solutions.First());
                    HeuristicExecuted = true;
                    TabSelected       = 1;
                    SetStatus(Constants.StatusType.Ok, String.Format(Properties.Resources.HEURISTIC_EXECUTED_SUCCESFULLY));
                }
                else
                {
                    SetStatus(Constants.StatusType.Ok, String.Format(Properties.Resources.HEURISTIC_EXECUTED_FAIL));
                }
            }
            finally
            {
                splashController.HideSplash();
            }
        }
Exemple #2
0
        public static List <Solution> Optimization(RunMetaheuristicInput input)
        {
            var problems = input.Problems;

            //Set randomized value.
            _random = input.Random;
            List <Solution> Solutions = new List <Solution>();

            var default_Metaheuristic = Constants.TypeMetaheuristics.ILS;

            IMetaheuristic metaheuristic = MetaheuristicFactory.CreateMetaheuristic(default_Metaheuristic, input.HeuristicSettings, input.Problems.First(), input.Random);



            //Ejecutar cada problema.
            foreach (var problem in problems)
            {
                //Primer paso. Preprocesar los problemas (ajustar ventanas de tiempo cuando sea posible).
                SplashGlobalData.SetSplashData(Constants.SPLASH_NAME_PROBLEM, problem.ID_Problem);
                SplashGlobalData.SetSplashData(Constants.SPLASH_PROGRESS, 0.0);
                //Create Solution
                for (int number_Repetition = 0; number_Repetition < input.HeuristicSettings.MaxRepetitions; number_Repetition++)
                {
                    var      watch    = System.Diagnostics.Stopwatch.StartNew();
                    Solution solution = new Solution(problem.ID_Problem);
                    DARPAlgorithms.BuildInitialSolution(ref solution, problem, ref _random);
                    solution.InitialSolution = GenericCopier <Solution> .DeepCopy(solution);

                    //Update Splash.
                    SplashGlobalData.SetSplashData(Constants.SPLASH_NUMBER_REPETITION, number_Repetition + 1);
                    SplashGlobalData.SetSplashData(Constants.SPLASH_PROGRESS, Convert.ToDouble(SplashGlobalData.GetSplashData <double>(Constants.SPLASH_PROGRESS)) + 1);

                    //Execute Heuristic
                    metaheuristic.ExecuteMetaheuristic(ref solution);
                    watch.Stop();
                    solution.ExecutionTime = watch.ElapsedMilliseconds;
                    Solutions.Add(solution);
                    //Validation.Validator.ValidateSolution(ref solution, problem);
                }
            }

            return(Solutions);
        }