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, }); }
//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 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)); }
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); }