static void Main(string[] args) { WeightedCriteriaRelation weightedCriteriaRelation = ReadWeightedCriteriaRelation(); WriteResults(weightedCriteriaRelation); Task21(weightedCriteriaRelation); Task22(weightedCriteriaRelation); Task23(weightedCriteriaRelation); }
public static void WriteResults(WeightedCriteriaRelation weightedCriteriaRelation) { string directoryPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName; string fileName = $"{directoryPath}\\Lab4\\Var52-ArturSavchuk.txt"; File.WriteAllText(fileName, string.Empty); File.AppendAllLines(fileName, new List <string> { "матриця індексiв узгодження C", GetRelationString(weightedCriteriaRelation.CRelation), "матриця індексiв неузгодження D", GetRelationString(weightedCriteriaRelation.DRelation), "Значення порогів для індексів узгодження та неузгодження c, d", $"{weightedCriteriaRelation.C} {weightedCriteriaRelation.D}", "Відношення для порогових значень c, d:", weightedCriteriaRelation.BestRelation.ToString(), "Ядро відношення:", string.Join(" ", weightedCriteriaRelation.Core) }); }
public static void Task21(WeightedCriteriaRelation weightedCriteriaRelation) { double c = 0.5; weightedCriteriaRelation = new WeightedCriteriaRelation( weightedCriteriaRelation.Evaluations, weightedCriteriaRelation.Weights.ToList(), c: c, d: 0); Console.WriteLine($"Для значення d = 0 розмiр ядра складає {weightedCriteriaRelation.Core.Count}"); Console.WriteLine($"Поточне наповнення ядра: {string.Join(" ", weightedCriteriaRelation.Core)}"); Console.WriteLine(); var bfsCycleFinder = new BfsCycleFinder(); List <double> dValues = new List <double>() { 0 }; List <int> sizes = new List <int>() { weightedCriteriaRelation.Core.Count }; IReadOnlyCollection <int> currentCore = weightedCriteriaRelation.Core; IEnumerable <int> addedCoreAlternatives; IEnumerable <int> removedCoreAlternatives; for (double d = 0.001; d <= 0.5; d = Math.Round(d + 0.001, 3, MidpointRounding.AwayFromZero)) { weightedCriteriaRelation = new WeightedCriteriaRelation( weightedCriteriaRelation.Evaluations, weightedCriteriaRelation.Weights.ToList(), c: c, d: d); if (bfsCycleFinder.HasCycle(weightedCriteriaRelation.BestRelation)) { Console.WriteLine($"Для значення d = {string.Format("{0:0.000}", d)} у вiдношеннi для порогових значень 'c', 'd' був знайдений цикл, тому аналiз для поточного значення 'с' варто припинити"); break; } removedCoreAlternatives = currentCore.Except(weightedCriteriaRelation.Core); addedCoreAlternatives = weightedCriteriaRelation.Core.Except(currentCore); if (removedCoreAlternatives.Count() != 0 || addedCoreAlternatives.Count() != 0) { if (weightedCriteriaRelation.Core.Count != sizes.Last()) { Console.WriteLine($"Для значення d = {string.Format("{0:0.000}", d)} розмiр ядра змiнився з {sizes.Last()} на {weightedCriteriaRelation.Core.Count}"); } else { Console.WriteLine($"Для значення d = {string.Format("{0:0.000}", d)} розмiр ядра не змiнився, але змінилося його наповнення"); } Console.WriteLine($"Попереднє наповнення ядра: {string.Join(" ", currentCore)}"); Console.WriteLine($"Поточне наповнення ядра: {string.Join(" ", weightedCriteriaRelation.Core)}"); if (removedCoreAlternatives.Count() != 0) { Console.WriteLine($"З ядра були виключенi значення: {string.Join(" ", removedCoreAlternatives)}"); } if (addedCoreAlternatives.Count() != 0) { Console.WriteLine($"До ядра були доданi значення: {string.Join(" ", addedCoreAlternatives)}"); } Console.WriteLine(); } dValues.Add(d); sizes.Add(weightedCriteriaRelation.Core.Count); currentCore = weightedCriteriaRelation.Core; } string directoryPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.FullName; string fileName = $"{directoryPath}\\Lab4\\sizes-d.txt"; File.WriteAllText(fileName, string.Empty); File.WriteAllLines(fileName, new List <string> { string.Join(", ", dValues.Select(elem => string.Format("{0:0.000}", elem).Replace(",", "."))), string.Join(", ", sizes) }); }