コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: StorageHelper.cs プロジェクト: lulzzz/DietPlanner
        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);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: lulzzz/DietPlanner
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 public static void SaveNsgaResult(this TempDataDictionary tempData, NsgaResult nsgaResult)
 {
     tempData[NsgaResultKey] = nsgaResult;
 }
コード例 #7
0
ファイル: Program.cs プロジェクト: lulzzz/DietPlanner
        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();
        }