Example #1
0
 public static ResultPoint CreateResultPoint(GroupDietIndividual individual)
 {
     return(new ResultPoint
     {
         Cost = individual.Evaluations.Single(e => e.Type == ObjectiveType.Cost).Score,
         Preferences = individual.Evaluations.Single(e => e.Type == ObjectiveType.Preferences).Score,
         PreparationTime = individual.Evaluations.Single(e => e.Type == ObjectiveType.PreparationTime).Score,
         Macro = individual.Evaluations.Single(e => e.Type == ObjectiveType.Macro).Score
                 //Diet = CreateDietData(individual)
     });
 }
Example #2
0
        //public static double Euclidian(GroupDietIndividual individual, double[] referencePoint)
        //{
        //  var summarizedScores = SummarizeScores(individual);
        //  //macro, cost, time, preferences
        //  return Math.Sqrt(
        //    Math.Pow(individual.Evaluations.Single(e => e.Type == ObjectiveType.Macro).Score / summarizedScores - referencePoint[0], 2) -
        //    Math.Pow(individual.Evaluations.Single(e => e.Type == ObjectiveType.Cost).Score / summarizedScores - referencePoint[1], 2) -
        //    Math.Pow(individual.Evaluations.Single(e => e.Type == ObjectiveType.PreparationTime).Score / summarizedScores - referencePoint[2], 2) -
        //    Math.Pow(individual.Evaluations.Single(e => e.Type == ObjectiveType.Preferences).Score / summarizedScores - referencePoint[3], 2));
        //}

        public static double Euclidian(GroupDietIndividual individual, WeightsModel weights)
        {
            var summarizedScores  = SummarizeScores(individual);
            var normalziedWeights = NormalizeWeights(weights);

            //macro, cost, time, preferences
            return(Math.Sqrt(
                       Math.Pow(individual.Evaluations.Single(e => e.Type == ObjectiveType.Macro).Score / summarizedScores - 1 + normalziedWeights.MacroWeight, 2) +
                       Math.Pow(individual.Evaluations.Single(e => e.Type == ObjectiveType.Cost).Score / summarizedScores - 1 + normalziedWeights.CostWeight, 2) +
                       Math.Pow(individual.Evaluations.Single(e => e.Type == ObjectiveType.PreparationTime).Score / summarizedScores - 1 + normalziedWeights.PreparationTimeWeight, 2) +
                       Math.Pow(individual.Evaluations.Single(e => e.Type == ObjectiveType.Preferences).Score / summarizedScores - 1 + normalziedWeights.PreferncesWeight, 2)));
        }
        public GroupDietViewModel CreateGroupDietViewModel(GroupDietIndividual individual, List <PersonalData> personalDataList)
        {
            var groupDietViewModel = new GroupDietViewModel();
            var dietAnalizer       = new GroupDietAnalyzer();

            groupDietViewModel.Evaluations = individual.Evaluations;

            foreach (var personalData in personalDataList)
            {
                var personDiet = new PersonDietViewModel();

                personDiet.DietSummary = dietAnalizer.SummarizeForPerson(individual.GroupDiet, personalData.Id);
                personDiet.Meals       = GetMealsViewModel(personDiet.DietSummary, individual, personalData);
                groupDietViewModel.PersonDietViewModels.Add(personDiet);
            }

            return(groupDietViewModel);
        }
        private List <MealViewModel> GetMealsViewModel(DietSummary dietSummary, GroupDietIndividual individual, PersonalData personalData)
        {
            var mealViewModels = new List <MealViewModel>();

            foreach (var meal in individual.GroupDiet.Meals)
            {
                var mealVm    = new MealViewModel();
                var recipes   = meal.GetRecipesForPerson(personalData.Id);
                var mealindex = individual.GroupDiet.Meals.IndexOf(meal);
                recipes.ForEach(r => mealVm.Recipes.Add(new RecipeViewModel {
                    Amount = r.Item1 * r.Item2.NominalWeight, Name = r.Item2.Name
                }));
                mealVm.Calories        = (int)dietSummary.CaloriesPerMeal[mealindex];
                mealVm.IsInRange       = personalData.Requirements.MealCaloriesSplit[mealindex].IsInRange(mealVm.Calories);
                mealVm.DistanceToRange = (int)personalData.Requirements.MealCaloriesSplit[mealindex].GetDistanceToRange(mealVm.Calories);

                mealViewModels.Add(mealVm);
            }

            return(mealViewModels);
        }
Example #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);
        }
Example #6
0
 private static DietData CreateDietData(GroupDietIndividual individual)
 {
     return(new DietData {
         Meals = individual.GroupDiet.Meals.Select(CreateMealData).ToList()
     });
 }
Example #7
0
 private static double SummarizeScores(GroupDietIndividual individual)
 {
     return(individual.Evaluations.Select(e => e.Score).Sum());
 }