Beispiel #1
0
        private static WeightsModel NormalizeWeights(WeightsModel weights)
        {
            var sum = weights.CostWeight + weights.MacroWeight + weights.PreferncesWeight + weights.PreparationTimeWeight;

            return(new WeightsModel
            {
                MacroWeight = weights.MacroWeight / sum,
                PreparationTimeWeight = weights.PreparationTimeWeight / sum,
                PreferncesWeight = weights.PreferncesWeight / sum,
                CostWeight = weights.CostWeight / sum,
            });
        }
Beispiel #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)));
        }
Beispiel #3
0
        public List <GroupDietIndividual> AhpSort(List <GroupDietIndividual> individuals, List <AhpModel> ahpModels)
        {
            var priorityVectors = ahpModels.Select(GetPriorityVector).ToList();

            var averageWeightModel = new WeightsModel
            {
                MacroWeight           = priorityVectors.Select(v => v.MacroWeight).Average(),
                CostWeight            = priorityVectors.Select(v => v.CostWeight).Average(),
                PreferncesWeight      = priorityVectors.Select(v => v.PreferncesWeight).Average(),
                PreparationTimeWeight = priorityVectors.Select(v => v.PreparationTimeWeight).Average()
            };

            return(EuclideanSort(individuals, averageWeightModel));
        }
Beispiel #4
0
        private List <GroupDietIndividual> EuclideanSort(List <GroupDietIndividual> individuals, WeightsModel weights)
        {
            var macroMin       = individuals.Select(i => i.Evaluations.Single(e => e.Type == ObjectiveType.Macro).Score).Min();
            var prepTimeMin    = individuals.Select(i => i.Evaluations.Single(e => e.Type == ObjectiveType.PreparationTime).Score).Min();
            var costMin        = individuals.Select(i => i.Evaluations.Single(e => e.Type == ObjectiveType.Cost).Score).Min();
            var preferencesMin = individuals.Select(i => i.Evaluations.Single(e => e.Type == ObjectiveType.Preferences).Score).Min();

            var macroMax       = individuals.Select(i => i.Evaluations.Single(e => e.Type == ObjectiveType.Macro).Score).Max();
            var prepTimeMax    = individuals.Select(i => i.Evaluations.Single(e => e.Type == ObjectiveType.PreparationTime).Score).Max();
            var costMax        = individuals.Select(i => i.Evaluations.Single(e => e.Type == ObjectiveType.Cost).Score).Max();
            var preferencesMax = individuals.Select(i => i.Evaluations.Single(e => e.Type == ObjectiveType.Preferences).Score).Max();


            var sorted = individuals.OrderBy(i => EuclidianHelper.Euclidian(new GroupDietIndividual(new GroupDiet())
            {
                Evaluations = new List <Evaluation>
                {
                    Normalize(i.Evaluations.Single(e => e.Type == ObjectiveType.Macro), macroMin, macroMax),
                    Normalize(i.Evaluations.Single(e => e.Type == ObjectiveType.PreparationTime), prepTimeMin, prepTimeMax),
                    Normalize(i.Evaluations.Single(e => e.Type == ObjectiveType.Cost), costMin, costMax),
                    Normalize(i.Evaluations.Single(e => e.Type == ObjectiveType.Preferences), preferencesMin, preferencesMax)
                }
            }, weights)).ToList();

            return(sorted);
        }