/// <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; }
/// <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(); }
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); }