Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/19/17 10:49:02 (7 years ago)
Author:
pfleck
Message:

#1666: Merged into trunk

Location:
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views

  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs

    r14826 r15371  
    2121
    2222using System;
    23 using System.Collections.Generic;
    24 using System.Linq;
    2523using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     24using HeuristicLab.MainForm;
    2625using HeuristicLab.Problems.DataAnalysis.Symbolic.Views;
    2726
    2827namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views {
    2928  public partial class InteractiveSymbolicRegressionSolutionSimplifierView : InteractiveSymbolicDataAnalysisSolutionSimplifierView {
    30     private readonly SymbolicRegressionSolutionImpactValuesCalculator calculator;
    31 
    3229    public new SymbolicRegressionSolution Content {
    3330      get { return (SymbolicRegressionSolution)base.Content; }
     
    3633
    3734    public InteractiveSymbolicRegressionSolutionSimplifierView()
    38       : base() {
     35      : base(new SymbolicRegressionSolutionImpactValuesCalculator()) {
    3936      InitializeComponent();
    4037      this.Caption = "Interactive Regression Solution Simplifier";
    41       calculator = new SymbolicRegressionSolutionImpactValuesCalculator();
    4238    }
    4339
     
    4844    }
    4945
    50 
    51     protected override Dictionary<ISymbolicExpressionTreeNode, Tuple<double, double>> CalculateImpactAndReplacementValues(ISymbolicExpressionTree tree) {
    52       var impactAndReplacementValues = new Dictionary<ISymbolicExpressionTreeNode, Tuple<double, double>>();
    53       foreach (var node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix()) {
    54         double impactValue, replacementValue, newQualityForImpactsCalculation;
    55         calculator.CalculateImpactAndReplacementValues(Content.Model, node, Content.ProblemData, Content.ProblemData.TrainingIndices, out impactValue, out replacementValue, out newQualityForImpactsCalculation);
    56         impactAndReplacementValues.Add(node, new Tuple<double, double>(impactValue, replacementValue));
    57       }
    58       return impactAndReplacementValues;
    59     }
    60 
    61     protected override void btnOptimizeConstants_Click(object sender, EventArgs e) {
    62       var model = Content.Model;
    63       SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(model.Interpreter, model.SymbolicExpressionTree, Content.ProblemData, Content.ProblemData.TrainingIndices,
    64         applyLinearScaling: true, maxIterations: 50, updateVariableWeights: true, lowerEstimationLimit: model.LowerEstimationLimit, upperEstimationLimit: model.UpperEstimationLimit);
    65       UpdateModel(Content.Model.SymbolicExpressionTree);
     46    protected override ISymbolicExpressionTree OptimizeConstants(ISymbolicDataAnalysisModel model, IDataAnalysisProblemData problemData, IProgress progress) {
     47      const int constOptIterations = 50;
     48      var regressionModelModel = (ISymbolicDataAnalysisModel)model.Clone();
     49      var regressionProblemData = (IRegressionProblemData)problemData;
     50      SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(regressionModelModel.Interpreter, regressionModelModel.SymbolicExpressionTree, regressionProblemData, regressionProblemData.TrainingIndices,
     51        applyLinearScaling: true, maxIterations: constOptIterations, updateVariableWeights: true, lowerEstimationLimit: regressionModelModel.LowerEstimationLimit, upperEstimationLimit: regressionModelModel.UpperEstimationLimit,
     52        iterationCallback: (args, func, obj) => {
     53          double newProgressValue = progress.ProgressValue + 1.0 / (constOptIterations + 2); // (maxIterations + 2) iterations are reported
     54          progress.ProgressValue = Math.Min(newProgressValue, 1.0);
     55        });
     56      return model.SymbolicExpressionTree;
    6657    }
    6758  }
Note: See TracChangeset for help on using the changeset viewer.