/// <summary> /// Находит наилучшие решения по методу Електра. /// </summary> /// <param name="current">Варианты выбора и параметры каждого варианта.</param> /// <returns>Таблица с новыми значениями.</returns> public static TableOfResults ElectraMethod(TableOfExemplars current) { Dictionary <KeyValuePair <Exemplar, Exemplar>, ElementOfTable> values = new Dictionary <KeyValuePair <Exemplar, Exemplar>, ElementOfTable>(); foreach (var pair in current.Join()) { Exemplar first = pair.Key; Exemplar second = pair.Value; Dictionary <Exemplar, double> score = new Dictionary <Exemplar, double>(2) { [first] = 0, [second] = 0 }; foreach (Column difference in current.Columns) { if (first.IsBetter(difference, second)) { score[first] += difference.Weight; } else if (second.IsBetter(difference, first)) { score[second] += difference.Weight; } } values[pair] = score[first] / score[second]; } return(new TableOfResults(values)); }
public static void Main() { IEnumerable <Column> columns = GetColumns(); TableOfExemplars exemplars = new TableOfExemplars(columns); exemplars.AddRange(GetExemplars(exemplars.Columns)); Console.WriteLine(exemplars); var res = StaticTools.ElectraMethod(exemplars); do { res.DecisionThreshold = GetDouble("Введите порог решения (например, 1): "); Console.WriteLine(res); } while (GetBoolean("Изменить порог решения?")); }