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