Example #1
0
        /// <summary>
        /// Sets controls state for specific selected algorithm.
        /// </summary>
        /// <param name="algName">Selected algorithm name.</param>
        public void SelectedAlgorithmChanged(string algName)
        {
            AlgorithmsNameType alg = new AlgorithmsNameType();

            switch (alg[algName])
            {
            case Domain.Algorithms.AlgorithmType.Classic:
            case Domain.Algorithms.AlgorithmType.ClassicWithModification:
                this.View.AlgorithmWithoutWeightsSelected();
                break;

            case Domain.Algorithms.AlgorithmType.ClassicWithWeights:
                this.View.AlgorithmWithWeightsSelected();
                break;
            }

            viewModel.SelectedAlgorithm = algName;
        }
Example #2
0
        /// <summary>
        /// Generates the rules by user specific algorithm and updates the progress bar.
        /// </summary>
        public void GenerateRules()
        {
            TimeSpan start = TimeSpan.Zero, stop = TimeSpan.Zero;

            if (ApplicationModel.System.DecisionAttributes.Where(x => x.Value == true).Count() == 0)
            {
                View.NotifyAboutNotMarketAtLeastOneAttributeAsDecision();
                return;
            }

            AlgorithmsNameType alg = new AlgorithmsNameType();
            string             selectedAlgorithm = viewModel.SelectedAlgorithm;
            IAlgorithm         algorithm         = Bootstrapper.ServiceLocator.GetService <IAlgorithm>(alg[selectedAlgorithm]);

            View.SetProgressBarMaxValue(ApplicationModel.System.Rows.Count *
                                        ApplicationModel.System.DecisionAttributes.Where(x => x.Value == true).Count());

            //update progress bar
            algorithm.Notify += (value) =>
            {
                View.UpdateProgressBar(value);
            };

            //this is for percent of separated rows
            algorithm.SeparatedRows += (value) =>
            {
                ApplicationModel.SeparatedRows = value;
            };

            //set generated rules
            algorithm.Rules += (result) =>
            {
                //Thread.Sleep(20000);
                stop = DateTime.Now.TimeOfDay;
                var group = result.GroupBy(
                    z => z,
                    (rule, count) => new RuleCount
                {
                    Rule  = rule,
                    Count = count.Count()
                },
                    new AssociationRulesComparer());

                ApplicationModel.Rules = group;

                FilterRules();
                View.SetAlgorithmNameInStatusBar(selectedAlgorithm);
                View.SetAlgorithmRunLengthInStatusBar(stop - start);
            };

            algorithm.InformationSystem = ApplicationModel.System;

            //this is true only for algorithm with weights
            if (ApplicationModel.Weights.Count > 0)
            {
                algorithm.Weights = ApplicationModel.Weights;
            }

            start = DateTime.Now.TimeOfDay;
            algorithm.Generate();
        }
Example #3
0
        public string CreateReport()
        {
            string currentDirectory = System.IO.Directory.GetCurrentDirectory();

            //this is a hack for win xp
            //only God and people from M$ knows why in xp current directory is set to the Report subdirectory
            //and not to the directory where the executable file is
            //in win 7 is ok
            int index = currentDirectory.LastIndexOf("\\Reports");

            if (index >= 0)
            {
                currentDirectory = currentDirectory.Remove(index);
            }

            StreamReader template = new StreamReader(currentDirectory + "\\Reports\\Templates\\txtReportTemplate.txt", Encoding.UTF8);

            string templateBody = template.ReadToEnd();

            string result = templateBody
                            .Replace(TemplateElements.alpha, Convert.ToString(ReportDetails.Alpha))
                            .Replace(TemplateElements.attributesQuantity, Convert.ToString(ReportDetails.AttributesQuantity))
                            .Replace(TemplateElements.averageConfidence, Convert.ToString(ReportDetails.AverageConfidence))
                            .Replace(TemplateElements.averageRuleLength, Convert.ToString(ReportDetails.AverageRuleLength))
                            .Replace(TemplateElements.averageSupport, Convert.ToString(ReportDetails.AverageSupport))
                            .Replace(TemplateElements.confidence, Convert.ToString(ReportDetails.Confidence))
                            .Replace(TemplateElements.datasetName, ReportDetails.DataSetName)
                            .Replace(TemplateElements.date, System.DateTime.Now.ToString())
                            .Replace(TemplateElements.generatedDiffrentRulesQuantity,
                                     Convert.ToString(ReportDetails.GenerateDiffrentRulesQuantity))
                            .Replace(TemplateElements.generatedRulesQuantity,
                                     Convert.ToString(ReportDetails.GeneratedRulesQuantity))
                            .Replace(TemplateElements.maximalConfidence, Convert.ToString(ReportDetails.MaximalConfidence))
                            .Replace(TemplateElements.maximalRuleLength,
                                     Convert.ToString(ReportDetails.MaximalRuleLength))
                            .Replace(TemplateElements.maximalSupport,
                                     Convert.ToString(ReportDetails.MaximalSupport))
                            .Replace(TemplateElements.minimalConfidence, Convert.ToString(ReportDetails.MinimalConfidence))
                            .Replace(TemplateElements.minimalRuleLength, Convert.ToString(ReportDetails.MinimalRuleLength))
                            .Replace(TemplateElements.minimalSupport, Convert.ToString(ReportDetails.MinimalSupport))
                            .Replace(TemplateElements.objectsQuantity, Convert.ToString(ReportDetails.ObjectsQuantity))
                            .Replace(TemplateElements.selectedAlgorithm, ReportDetails.SelectedAlgorithm)
                            .Replace(TemplateElements.support, Convert.ToString(ReportDetails.Support))
                            .Replace(TemplateElements.minimalUpperBound, Convert.ToString(ReportDetails.MinimalUpperBound))
                            .Replace(TemplateElements.averageUpperBound, Convert.ToString(ReportDetails.AverageUpperBound))
                            .Replace(TemplateElements.maximalUpperBound, Convert.ToString(ReportDetails.MaximalUpperBound))
                            .Replace(TemplateElements.minimalLowerBound, Convert.ToString(ReportDetails.MinimalLowerBound))
                            .Replace(TemplateElements.averageLowerBound, Convert.ToString(ReportDetails.AverageLowerBound))
                            .Replace(TemplateElements.maximalLowerBound, Convert.ToString(ReportDetails.MaximalLowerBound))
            ;

            AlgorithmsNameType algorithms = new AlgorithmsNameType();

            if (algorithms[ReportDetails.SelectedAlgorithm] == Algorithms.AlgorithmType.ClassicWithWeights)
            {
                result = result
                         .Replace(TemplateElements.gamma, Convert.ToString(ReportDetails.Gamma))
                         .Replace(TemplateElements.weights, ConvertWeightsToString());
            }
            else
            {
                result = result
                         .Replace(TemplateElements.gamma, "nie zdefiniowano")
                         .Replace(TemplateElements.weights, "nie zdefiniowano");
            }

            if (SettingsManager.Settings.InsertInfSysInReport)
            {
                result = result
                         .Replace(TemplateElements.informationSystem, ConvertInformationSystemToString());
            }
            else
            {
                result = result
                         .Replace(TemplateElements.informationSystem, "nie zdefiniowano");
            }

            if (SettingsManager.Settings.PercentageOfSeparatedRows)
            {
                result = result
                         .Replace(TemplateElements.percentOfSeparatedRows, ConvertPercentageOfSeparatedRowsToString());
            }
            else
            {
                result = result
                         .Replace(TemplateElements.percentOfSeparatedRows, "nie zdefiniowano");
            }

            StringBuilder rules = new StringBuilder();

            foreach (var row in ReportDetails.GeneratedRules.Rows)
            {
                var objects = ((DataRow)row).ItemArray;

                rules.AppendLine(
                    System.String.Format("Reguła asocjacyjna: {0}, wsparcie[%]: {1}, zaufanie[%]: {2}, długość reguły: {3}, liczba powtórzeń: {4}, górna granica: {5}, dolna granica: {6}",
                                         objects[0], objects[1], objects[2], objects[3], objects[6], objects[4], objects[5]));
            }

            result = result
                     .Replace(TemplateElements.rules, rules.ToString());

            StringBuilder attributes = new StringBuilder();

            foreach (string singleAttr in ReportDetails.DecisionAttributes)
            {
                attributes.AppendLine(singleAttr);
            }

            result = result
                     .Replace(TemplateElements.decisionAttributes, attributes.ToString());

            return(result);
        }