Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/30/18 16:59:47 (6 years ago)
Author:
fholzing
Message:

#2904: Removed callback, adapted both view and calculator.

Location:
branches/2904_CalculateImpacts/HeuristicLab.Problems.DataAnalysis.Views/3.4
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2904_CalculateImpacts/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj

    r16030 r16034  
    5252    <DebugType>pdbonly</DebugType>
    5353    <Optimize>true</Optimize>
    54     <OutputPath>..\..\..\trunk\bin\</OutputPath>
     54    <OutputPath>..\..\..\..\trunk\bin\</OutputPath>
    5555    <DefineConstants>TRACE</DefineConstants>
    5656    <ErrorReport>prompt</ErrorReport>
  • branches/2904_CalculateImpacts/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionVariableImpactsView.cs

    r16030 r16034  
    3333  [Content(typeof(IRegressionSolution))]
    3434  public partial class RegressionSolutionVariableImpactsView : DataAnalysisSolutionEvaluationView {
    35     private CancellationTokenSource cancellationToken = new CancellationTokenSource();
    3635    private enum SortingCriteria {
    3736      ImpactValue,
     
    3938      VariableName
    4039    }
     40    private CancellationTokenSource cancellationToken = new CancellationTokenSource();
    4141    private List<Tuple<string, double>> rawVariableImpacts = new List<Tuple<string, double>>();
    4242
     
    6464      Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
    6565    }
    66 
    6766    protected override void DeregisterContentEvents() {
    6867      base.DeregisterContentEvents();
     
    7473      OnContentChanged();
    7574    }
    76 
    7775    protected virtual void Content_ModelChanged(object sender, EventArgs e) {
    7876      OnContentChanged();
    7977    }
    80 
    8178    protected override void OnContentChanged() {
    8279      base.OnContentChanged();
     
    8784      }
    8885    }
    89 
    9086    private void RegressionSolutionVariableImpactsView_VisibleChanged(object sender, EventArgs e) {
    9187      cancellationToken.Cancel();
    9288    }
    9389
    94 
    9590    private void dataPartitionComboBox_SelectedIndexChanged(object sender, EventArgs e) {
    9691      UpdateVariableImpact();
    9792    }
    98 
    9993    private void replacementComboBox_SelectedIndexChanged(object sender, EventArgs e) {
    10094      UpdateVariableImpact();
    10195    }
    102 
    10396    private void sortByComboBox_SelectedIndexChanged(object sender, EventArgs e) {
    10497      //Update the default ordering (asc,desc), but remove the eventHandler beforehand (otherwise the data would be ordered twice)
     
    109102      UpdateOrdering();
    110103    }
    111 
    112104    private void ascendingCheckBox_CheckedChanged(object sender, EventArgs e) {
    113105      UpdateOrdering();
    114106    }
    115 
    116107
    117108    private async void UpdateVariableImpact() {
     
    135126
    136127      cancellationToken = new CancellationTokenSource();
    137       //Remember the original ordering of the variables
     128
    138129      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; }
    147130        var problemData = Content.ProblemData;
    148131        var inputvariables = new HashSet<string>(problemData.AllowedInputVariables.Union(Content.Model.VariablesUsedForPrediction));
     132        //Remember the original ordering of the variables
    149133        var originalVariableOrdering = problemData.Dataset.VariableNames
    150134          .Where(v => inputvariables.Contains(v))
     
    152136          .ToList();
    153137
     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
    154142        rawVariableImpacts.Clear();
    155143        originalVariableOrdering.ForEach(v => rawVariableImpacts.Add(new Tuple<string, double>(v, impacts.First(vv => vv.Item1 == v).Item2)));
    156144        UpdateOrdering();
    157       } finally {
     145      }
     146      finally {
    158147        ((MainForm.WindowsForms.MainForm)MainFormManager.MainForm).RemoveOperationProgressFromView(this);
    159148      }
     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;
    160173    }
    161174
Note: See TracChangeset for help on using the changeset viewer.