Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/25/20 16:26:46 (4 years ago)
Author:
pfleck
Message:

#3040 Reenabled the old optimize button in the simplifier and added a new button for const opt with vectors.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs

    r17502 r17633  
    4343
    4444      var tree = Content?.Model?.SymbolicExpressionTree;
    45       //btnOptimizeConstants.Enabled = tree != null && NonlinearLeastSquaresConstantOptimizationEvaluator.CanOptimizeConstants(tree);
    46       btnOptimizeConstants.Enabled = tree != null && TensorFlowConstantOptimizationEvaluator.CanOptimizeConstants(tree);
     45      btnOptimizeConstants.Enabled = tree != null && NonlinearLeastSquaresConstantOptimizationEvaluator.CanOptimizeConstants(tree);
     46      btnVectorOptimizeConstants.Enabled = tree != null && TensorFlowConstantOptimizationEvaluator.CanOptimizeConstants(tree);
     47      nudLearningRate.Enabled = tree != null && TensorFlowConstantOptimizationEvaluator.CanOptimizeConstants(tree);
    4748    }
    4849
     
    6465      int reps = 0;
    6566
    66       //do {
    67       //  prevResult = result;
    68       //  tree = NonlinearLeastSquaresConstantOptimizationEvaluator.OptimizeTree(tree, regressionProblemData, regressionProblemData.TrainingIndices,
    69       //    applyLinearScaling: true, maxIterations: constOptIterations, updateVariableWeights: true,
    70       //    cancellationToken: cancellationToken, iterationCallback: (args, func, obj) => {
    71       //      double newProgressValue = progress.ProgressValue + (1.0 / (constOptIterations + 2) / maxRepetitions); // (constOptIterations + 2) iterations are reported
    72       //      progress.ProgressValue = Math.Min(newProgressValue, 1.0);
    73       //    });
    74       //  result = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(model.Interpreter, tree,
    75       //    model.LowerEstimationLimit, model.UpperEstimationLimit, regressionProblemData, regressionProblemData.TrainingIndices, applyLinearScaling: true);
    76       //  reps++;
    77       //  improvement = result - prevResult;
    78       //} while (improvement > minimumImprovement && reps < maxRepetitions &&
    79       //         progress.ProgressState != ProgressState.StopRequested &&
    80       //         progress.ProgressState != ProgressState.CancelRequested);
    81       //return tree;
     67      do {
     68        prevResult = result;
     69        tree = NonlinearLeastSquaresConstantOptimizationEvaluator.OptimizeTree(tree, regressionProblemData, regressionProblemData.TrainingIndices,
     70          applyLinearScaling: true, maxIterations: constOptIterations, updateVariableWeights: true,
     71          cancellationToken: cancellationToken, iterationCallback: (args, func, obj) => {
     72            double newProgressValue = progress.ProgressValue + (1.0 / (constOptIterations + 2) / maxRepetitions); // (constOptIterations + 2) iterations are reported
     73            progress.ProgressValue = Math.Min(newProgressValue, 1.0);
     74          });
     75        result = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(model.Interpreter, tree,
     76          model.LowerEstimationLimit, model.UpperEstimationLimit, regressionProblemData, regressionProblemData.TrainingIndices, applyLinearScaling: true);
     77        reps++;
     78        improvement = result - prevResult;
     79      } while (improvement > minimumImprovement && reps < maxRepetitions &&
     80               progress.ProgressState != ProgressState.StopRequested &&
     81               progress.ProgressState != ProgressState.CancelRequested);
     82      return tree;
     83    }
     84
     85    protected override ISymbolicExpressionTree VectorOptimizeConstants(ISymbolicExpressionTree tree, CancellationToken cancellationToken, IProgress progress) {
    8286      const int maxIterations = 1000;
     87      var regressionProblemData = Content.ProblemData;
     88      progress.CanBeStopped = true;
     89
     90      var learningRate = Math.Pow(10, (double)nudLearningRate.Value);
     91
    8392      return TensorFlowConstantOptimizationEvaluator.OptimizeTree(tree, regressionProblemData,
    8493        regressionProblemData.TrainingIndices,
    85         applyLinearScaling: false, updateVariableWeights: true, maxIterations: maxIterations, learningRate: 0.0001,
     94        applyLinearScaling: false, updateVariableWeights: true, maxIterations: maxIterations, learningRate: learningRate,
    8695        cancellationToken: cancellationToken,
    8796        progress: new SynchronousProgress<double>(cost => {
Note: See TracChangeset for help on using the changeset viewer.