public GroupDietsResultViewModel Build(NsgaResult result, List <PersonalData> personalDataList) { var groupDietsResultViewModel = new GroupDietsResultViewModel(); groupDietsResultViewModel.PersonalDatas = personalDataList; groupDietsResultViewModel.GroupDiets = CreateGroupDietsViewModel(result, personalDataList); groupDietsResultViewModel.GroupDiets = groupDietsResultViewModel.GroupDiets.OrderBy(d => d.Evaluations.Single(e => e.Type == ObjectiveType.Macro).Score).ToList(); return(groupDietsResultViewModel); }
private List <GroupDietViewModel> CreateGroupDietsViewModel(NsgaResult result, List <PersonalData> personalDataList) { var models = new List <GroupDietViewModel>(); var individuals = result.Fronts.SelectMany(f => f.Select(i => i as GroupDietIndividual)); foreach (var individual in individuals) { models.Add(CreateGroupDietViewModel(individual, personalDataList)); } return(models); }
public static FrontResult CreatTestResult(NsgaResult nsgaResult, Configuration configuration) { var testResult = new FrontResult { Iterations = configuration.MaxIterations, PopulationSize = configuration.PopulationSize, MutationProbability = configuration.MutationProbability, Time = nsgaResult.Log.SolvingTime, ResultPoints = nsgaResult.Fronts.SelectMany(f => f).Select(g => CreateResultPoint((GroupDietIndividual)g)).ToList(), SeriesName = CreateName(configuration) }; return(testResult); }
private static NsgaResult RunConfigurationWithTimer(int maxSeconds, Configuration configuration, List <Recipe> recipes, List <PersonalData> personalData) { NsgaResult result = new NsgaResult(); var failed = false; var watch = new Stopwatch(); var workerThread = new Thread(() => { try { watch.Start(); result = RunConfiguration(configuration, recipes, personalData); watch.Stop(); } catch (Exception ex) { watch.Stop(); failed = true; Console.WriteLine($"Aborted (calculation time exceeded {maxSeconds} seconds limit)"); } }); var timeoutTimer = new Timer(s => { workerThread.Abort(); }, null, TimeSpan.FromSeconds(maxSeconds), TimeSpan.FromDays(1)); workerThread.Start(); workerThread.Join(); if (!failed && result.Fronts.First().Any(i => !i.IsFeasible)) { failed = true; Console.WriteLine("Aborted (getting infeasible solutions)"); } return(failed ? null : result); }
public void T1() { var groupDiet = GetDiet(); var pd = new List <PersonalData> { GetPersonalData(0), GetPersonalData(1) }; var individual = new GroupDietIndividual(groupDiet); var ev = new GroupDietEvaluator(pd, new GroupDietAnalyzer()); ev.Evaluate(individual); var builder = new GroupDietViewModelBuilder(); var nsgRes = new NsgaResult(); nsgRes.Fronts.Add(new List <Individual> { individual }); var vm = builder.Build(nsgRes, pd); vm.GroupDiets.First().Evaluations.First().Score.Should().Be(250); }
public static void SaveNsgaResult(this TempDataDictionary tempData, NsgaResult nsgaResult) { tempData[NsgaResultKey] = nsgaResult; }
public static void Main(string[] args) { //min max step reps timeout // args = new[] { "population", "100", "150", "25", "2", "33" }; var arguments = new string[10]; Console.Write("mutation base: \n"); arguments[7] = Console.ReadLine(); Console.Write("iterations base: \n"); arguments[8] = Console.ReadLine(); Console.Write("population base: \n"); arguments[9] = Console.ReadLine(); Console.Write("series for: mutation, iterations, population? \n"); arguments[0] = Console.ReadLine(); Console.Write("min: \n"); arguments[1] = Console.ReadLine(); Console.Write("max: \n"); arguments[2] = Console.ReadLine(); Console.Write("step: \n"); arguments[3] = Console.ReadLine(); Console.Write("repeats: \n"); arguments[4] = Console.ReadLine(); Console.Write("time bound [s]: \n"); arguments[5] = Console.ReadLine(); Console.Write("number of people: \n"); arguments[6] = Console.ReadLine(); var recipesProvider = new CsvRecipeProvider(new Random(), "DataProviders/Csv/ingredientsv3.csv"); var recipes = recipesProvider.GetRecipes(); var numOfPeople = int.Parse(arguments[6]); var personalData = GetPersonalData().Take(numOfPeople).ToList(); var repeats = int.Parse(arguments[4]); var timeBound = int.Parse(arguments[5]); string seriesName; var configurations = CreateConfigurations(arguments, out seriesName); seriesName += "_" + repeats + "_ppl" + numOfPeople + DateTime.Now.ToString(dateFormat); var totalSteps = configurations.Count * repeats; var currentStep = 0; var testStop = false; foreach (var configuration in configurations) { for (int j = 0; j < repeats; j++) { NsgaResult result = null; var nullResultCounter = 0; while (result == null && !testStop) { nullResultCounter++; if (nullResultCounter > 3) { testStop = true; } result = RunConfigurationWithTimer(timeBound, configuration, recipes, personalData); } if (testStop) { Console.WriteLine("Program stopped due to failing tests"); break; } currentStep++; Console.WriteLine((double)currentStep * 100 / totalSteps + "% " + (double)result.Log.SolvingTime / 1000); var testResult = StorageHelper.CreatTestResult(result, configuration); StorageHelper.SaveAsJson(OutputPath, seriesName, testResult); } if (testStop) { break; } } Console.WriteLine("done"); Console.ReadKey(); }