Changeset 16034 for branches/2904_CalculateImpacts/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs
- Timestamp:
- 07/30/18 16:59:47 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2904_CalculateImpacts/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs
r16030 r16034 33 33 [Content(typeof(IRegressionSolution))] 34 34 public partial class RegressionSolutionVariableImpactsView : DataAnalysisSolutionEvaluationView { 35 private CancellationTokenSource cancellationToken = new CancellationTokenSource();36 35 private enum SortingCriteria { 37 36 ImpactValue, … … 39 38 VariableName 40 39 } 40 private CancellationTokenSource cancellationToken = new CancellationTokenSource(); 41 41 private List<Tuple<string, double>> rawVariableImpacts = new List<Tuple<string, double>>(); 42 42 … … 64 64 Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged); 65 65 } 66 67 66 protected override void DeregisterContentEvents() { 68 67 base.DeregisterContentEvents(); … … 74 73 OnContentChanged(); 75 74 } 76 77 75 protected virtual void Content_ModelChanged(object sender, EventArgs e) { 78 76 OnContentChanged(); 79 77 } 80 81 78 protected override void OnContentChanged() { 82 79 base.OnContentChanged(); … … 87 84 } 88 85 } 89 90 86 private void RegressionSolutionVariableImpactsView_VisibleChanged(object sender, EventArgs e) { 91 87 cancellationToken.Cancel(); 92 88 } 93 89 94 95 90 private void dataPartitionComboBox_SelectedIndexChanged(object sender, EventArgs e) { 96 91 UpdateVariableImpact(); 97 92 } 98 99 93 private void replacementComboBox_SelectedIndexChanged(object sender, EventArgs e) { 100 94 UpdateVariableImpact(); 101 95 } 102 103 96 private void sortByComboBox_SelectedIndexChanged(object sender, EventArgs e) { 104 97 //Update the default ordering (asc,desc), but remove the eventHandler beforehand (otherwise the data would be ordered twice) … … 109 102 UpdateOrdering(); 110 103 } 111 112 104 private void ascendingCheckBox_CheckedChanged(object sender, EventArgs e) { 113 105 UpdateOrdering(); 114 106 } 115 116 107 117 108 private async void UpdateVariableImpact() { … … 135 126 136 127 cancellationToken = new CancellationTokenSource(); 137 //Remember the original ordering of the variables 128 138 129 try { 139 var impacts = await Task.Run(() => RegressionSolutionVariableImpactsCalculator.CalculateImpacts(Content, replMethod, factorReplMethod, dataPartition,140 (i, s) => {141 progress.ProgressValue = i;142 progress.Status = s;143 return cancellationToken.Token.IsCancellationRequested;144 }), cancellationToken.Token);145 146 if (cancellationToken.Token.IsCancellationRequested) { return; }147 130 var problemData = Content.ProblemData; 148 131 var inputvariables = new HashSet<string>(problemData.AllowedInputVariables.Union(Content.Model.VariablesUsedForPrediction)); 132 //Remember the original ordering of the variables 149 133 var originalVariableOrdering = problemData.Dataset.VariableNames 150 134 .Where(v => inputvariables.Contains(v)) … … 152 136 .ToList(); 153 137 138 List<Tuple<string, double>> impacts = null; 139 await Task.Run(() => { impacts = CalculateVariableImpacts(originalVariableOrdering, Content.Model, problemData, Content.EstimatedValues, dataPartition, replMethod, factorReplMethod, cancellationToken.Token, progress); }); 140 if (impacts == null) { return; } 141 154 142 rawVariableImpacts.Clear(); 155 143 originalVariableOrdering.ForEach(v => rawVariableImpacts.Add(new Tuple<string, double>(v, impacts.First(vv => vv.Item1 == v).Item2))); 156 144 UpdateOrdering(); 157 } finally { 145 } 146 finally { 158 147 ((MainForm.WindowsForms.MainForm)MainFormManager.MainForm).RemoveOperationProgressFromView(this); 159 148 } 149 } 150 private List<Tuple<string, double>> CalculateVariableImpacts(List<string> originalVariableOrdering, 151 IRegressionModel model, 152 IRegressionProblemData problemData, 153 IEnumerable<double> estimatedValues, 154 RegressionSolutionVariableImpactsCalculator.DataPartitionEnum dataPartition, 155 RegressionSolutionVariableImpactsCalculator.ReplacementMethodEnum replMethod, 156 RegressionSolutionVariableImpactsCalculator.FactorReplacementMethodEnum factorReplMethod, 157 CancellationToken token, 158 IProgress progress) { 159 List<Tuple<string, double>> impacts = new List<Tuple<string, double>>(); 160 int count = originalVariableOrdering.Count; 161 int i = 0; 162 163 foreach (var variable in originalVariableOrdering) { 164 if (cancellationToken.Token.IsCancellationRequested) { return null; } 165 progress.ProgressValue = (double)++i / count; 166 progress.Status = string.Format("Calculating impact for variable {0} ({1} of {2})", variable, i, count); 167 168 double impact = RegressionSolutionVariableImpactsCalculator.CalculateImpact(variable, model, problemData, Content.EstimatedValues, dataPartition, replMethod, factorReplMethod); 169 impacts.Add(new Tuple<string, double>(variable, impact)); 170 } 171 172 return impacts; 160 173 } 161 174
Note: See TracChangeset
for help on using the changeset viewer.