示例#1
0
        static void Main(string[] args)
        {
            WeightedCriteriaRelation weightedCriteriaRelation = ReadWeightedCriteriaRelation();

            WriteResults(weightedCriteriaRelation);
            Task21(weightedCriteriaRelation);
            Task22(weightedCriteriaRelation);
            Task23(weightedCriteriaRelation);
        }
示例#2
0
        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)
            });
        }
示例#3
0
        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)
            });
        }