コード例 #1
0
        private void OnLoaded()
        {
            #region Ładowanie Plików
            List <Record>             data          = XlsxReader.ReadXlsx("..\\..\\..\\Resources\\weatherAUS.xlsx");
            List <LinguisticVariable> variables     = LinguisticVariableSerializer.Deserialize("..\\..\\..\\Resources\\linguisticVariables.xml");
            List <LinguisticVariable> quantifiers   = LinguisticVariableSerializer.Deserialize("..\\..\\..\\Resources\\linguisticQuantifiers.xml");
            List <LinguisticVariable> qualificators = LinguisticVariableSerializer.Deserialize("..\\..\\..\\Resources\\linguisticQualificators.xml");
            #endregion

            var             groups = variables.GroupBy(variable => variable.MemberToExtract).ToList();
            List <FuzzySet> sets   = new List <FuzzySet>();
            foreach (var group in groups)
            {
                var movedGroupings = new List <Tuple <string, List <LinguisticVariable> > >
                {
                    new Tuple <string, List <LinguisticVariable> >(group.Key, group.ToList())
                };
                movedGroupings.AddRange(groups.Where(linguisticVariables => linguisticVariables != group).Take(2)
                                        .Select(g => new Tuple <string, List <LinguisticVariable> >(g.Key, g.ToList())));
                sets = sets.Concat(GetSets(data, movedGroupings)).ToList();
            }

            var           i         = 0;
            List <double> qualities = new List <double>();
            foreach (var fuzzySet in sets)
            {
                Process(fuzzySet);
                fuzzySet.Qualificator = new FuzzySet(data, qualificators[i++]);
                if (i == qualificators.Count)
                {
                    i = 0;
                }
                Process(fuzzySet);

                void Process(FuzzySet set)
                {
                    SummarizationResult summarizationResult = new SummarizationResult();
                    string bestResult = "";
                    double quality    = 0;

                    foreach (var quantifier in quantifiers)
                    {
                        double degreeOfTruth = set.DegreeOfTruth(quantifier);
                        var    summarization = $"{quantifier.Name} wpisów wskazuje {set} [Jakość: {degreeOfTruth:N3}]";
                        if (degreeOfTruth > quality)
                        {
                            bestResult = summarization;
                            quality    = degreeOfTruth;
                        }

                        summarizationResult.AllSummarizations.Add(summarization);
                    }
                    qualities.Add(quality);
                    summarizationResult.BestSummarization = bestResult;
                    Summarizations.Add(summarizationResult);
                }
            }
            Results.ItemsSource = Summarizations;
        }
コード例 #2
0
ファイル: MainWindow.xaml.cs プロジェクト: Drutol/KSR
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            var data      = new DataExtractor().ObtainRecords().ToList();
            var variables =
                JsonConvert.DeserializeObject <List <LinguisticVariable> >(
                    File.ReadAllText("Data/linguisticVariables.json"));
            var quantifiers =
                JsonConvert.DeserializeObject <List <LinguisticVariable> >(
                    File.ReadAllText("Data/linguisticQuantifiers.json"));
            var qualificators =
                JsonConvert.DeserializeObject <List <LinguisticVariable> >(
                    File.ReadAllText("Data/linguisticQualificators.json"));

            var groupings = variables.GroupBy(variable => variable.MemberToExtract).ToList();
            var sets      = new List <FuzzySet>();

            foreach (var grouping in groupings)
            {
                var movedGroping = new List <Tuple <string, List <LinguisticVariable> > >
                {
                    new Tuple <string, List <LinguisticVariable> >(grouping.Key, grouping.ToList())
                };
                movedGroping.AddRange(groupings.Where(linguisticVariables => linguisticVariables != grouping).Take(2)
                                      .Select(g => new Tuple <string, List <LinguisticVariable> >(g.Key, g.ToList())));
                sets = sets.Concat(GetSets(data, movedGroping)).ToList();
            }

            var i  = 0;
            var sw = new Stopwatch();

            sw.Start();
            var summarizations = new List <SummarizationResult>();
            var qualities      = new List <double>();

            foreach (var fuzzySet in sets)
            {
                Process(fuzzySet);
                fuzzySet.Qualificator = new FuzzySet(data, qualificators[i++]);
                if (i == qualificators.Count)
                {
                    i = 0;
                }
                Process(fuzzySet);


                void Process(FuzzySet set)
                {
                    var    result  = new SummarizationResult();
                    var    best    = "";
                    double quality = 0;

                    foreach (var quantifier in quantifiers)
                    {
                        var t             = set.DegreeOfTruth(quantifier);
                        var summarization = $"{quantifier.Name} people {set} [Quality: {t:N5}]";
                        if (t > quality)
                        {
                            best    = summarization;
                            quality = t;
                        }

                        result.AllSummarizations.Add(summarization);
                    }

                    qualities.Add(quality);
                    result.BestSummarization = best;
                    summarizations.Add(result);
                }
            }

            sw.Stop();
            var avg = qualities.Average();

            Results.ItemsSource = summarizations;
        }