Free cookie consent management tool by TermsFeed Policy Generator

Changeset 2328


Ignore:
Timestamp:
09/03/09 15:00:23 (15 years ago)
Author:
gkronber
Message:

this is the remaining part of changeset r2327.
Applied changes in modeling plugins that are necessary for the new model analyzer (#722)

  • predictor has properties for the lower and upper limit of the predicted value
  • added views for predictors that show the limits (also added a new view for GeneticProgrammingModel that shows the size and height of the model)
  • Reintroduced TreeEvaluatorInjectors that read a PunishmentFactor and calculate the lower and upper limits for estimated values (limits are set in the tree evaluators)
  • Added operators to create Predictors. Changed modeling algorithms to use the predictors for the calculation of final model qualities and variable impacts (to be compatible with the new model analyzer the predictors use a very large PunishmentFactor)
  • replaced all private implementations of double.IsAlmost and use HL.Commons instead (see #733 r2324)
  • Implemented operator SolutionExtractor and moved BestSolutionStorer from HL.Logging to HL.Modeling (fixes #734)
Location:
trunk/sources
Files:
1 added
30 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.GP.Boolean/3.3/BooleanTreeInterpreter.cs

    r2222 r2328  
    2727using System.Xml;
    2828using System.Diagnostics;
     29using HeuristicLab.Common;
    2930using HeuristicLab.Data;
    3031using HeuristicLab.GP.Interfaces;
     
    6768            var varNode = (VariableFunctionTree)t;
    6869            int index = dataset.GetVariableIndex(varNode.VariableName);
    69             return !IsAlmost(dataset.GetValue(currentRow, index), 0.0);
     70            return !dataset.GetValue(currentRow, index).IsAlmost(0.0);
    7071          }
    7172        case SymbolTable.UNKNOWN:
     
    7475      }
    7576    }
    76 
    77     private bool IsAlmost(double x, double y) {
    78       return Math.Abs(x - y) < EPSILON;
    79     }
    8077  }
    8178}
  • trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLab.GP.Boolean-3.3.csproj

    r2222 r2328  
    100100  </ItemGroup>
    101101  <ItemGroup>
     102    <ProjectReference Include="..\..\HeuristicLab.Common\3.2\HeuristicLab.Common-3.2.csproj">
     103      <Project>{1FC004FC-59AF-4249-B1B6-FF25873A20E4}</Project>
     104      <Name>HeuristicLab.Common-3.2</Name>
     105    </ProjectReference>
    102106    <ProjectReference Include="..\..\HeuristicLab.Core\3.2\HeuristicLab.Core-3.2.csproj">
    103107      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
  • trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLabGPBooleanPlugin.cs

    r2222 r2328  
    2828  [ClassInfo(Name = "HeuristicLab.GP.Boolean-3.3")]
    2929  [PluginFile(Filename = "HeuristicLab.GP.Boolean-3.3.dll", Filetype = PluginFileType.Assembly)]
     30  [Dependency(Dependency = "HeuristicLab.Common-3.2")]
    3031  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
    3132  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
  • trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/ClassificationMeanSquaredErrorEvaluator.cs

    r2222 r2328  
    2323using HeuristicLab.Core;
    2424using HeuristicLab.Data;
     25using HeuristicLab.Common;
    2526
    2627namespace HeuristicLab.GP.StructureIdentification.Classification {
     
    4950          // on the lower end and upper end only add linear error if the absolute error is larger than 1
    5051          // the error>1.0 constraint is needed for balance because in the interval ]-1, 1[ the squared error is smaller than the absolute error
    51           if ((IsEqual(original, classes[0]) && error < -1.0) ||
    52             (IsEqual(original, classes[classes.Length - 1]) && error > 1.0)) {
     52          if ((original.IsAlmost(classes[0]) && error < -1.0) ||
     53            (original.IsAlmost(classes[classes.Length - 1]) && error > 1.0)) {
    5354            errorsSquaredSum += Math.Abs(error); // only add linear error below the smallest class or above the largest class
    5455          } else {
     
    7172      mse.Data = errorsSquaredSum;
    7273    }
    73 
    74     private bool IsEqual(double x, double y) {
    75       return Math.Abs(x - y) < EPSILON;
    76     }
    7774  }
    7875}
  • trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/HeuristicLab.GP.StructureIdentification.Classification-3.3.csproj

    r2222 r2328  
    9494  </ItemGroup>
    9595  <ItemGroup>
     96    <ProjectReference Include="..\..\HeuristicLab.Common\3.2\HeuristicLab.Common-3.2.csproj">
     97      <Project>{1FC004FC-59AF-4249-B1B6-FF25873A20E4}</Project>
     98      <Name>HeuristicLab.Common-3.2</Name>
     99    </ProjectReference>
    96100    <ProjectReference Include="..\..\HeuristicLab.Core\3.2\HeuristicLab.Core-3.2.csproj">
    97101      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
  • trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/HeuristicLabGPClassificationPlugin.cs

    r2222 r2328  
    2828  [ClassInfo(Name = "HeuristicLab.GP.StructureIdentification.Classification-3.3")]
    2929  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification.Classification-3.3.dll", Filetype = PluginFileType.Assembly)]
     30  [Dependency(Dependency = "HeuristicLab.Common-3.2")]
    3031  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
    3132  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
  • trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassModeller.cs

    r2222 r2328  
    2222using System;
    2323using System.Collections.Generic;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Data;
     
    8384            double[] row = new double[dataset.Columns];
    8485            double targetValue = origDataset.GetValue(k, targetVariable);
    85             if (IsEqual(targetValue, classAValue)) {
     86            if (targetValue.IsAlmost(classAValue)) {
    8687              for (int l = 0; l < row.Length; l++) {
    8788                row[l] = origDataset.GetValue(k, l);
     
    8990              row[targetVariable] = 0;
    9091              rows.Add(row);
    91             } else if (IsEqual(targetValue, classBValue)) {
     92            } else if (targetValue.IsAlmost(classBValue)) {
    9293              for (int l = 0; l < row.Length; l++) {
    9394                row[l] = origDataset.GetValue(k, l);
     
    102103            double[] row = new double[dataset.Columns];
    103104            double targetValue = origDataset.GetValue(k, targetVariable);
    104             if (IsEqual(targetValue, classAValue)) {
     105            if (targetValue.IsAlmost(classAValue)) {
    105106              for (int l = 0; l < row.Length; l++) {
    106107                row[l] = origDataset.GetValue(k, l);
     
    108109              row[targetVariable] = 0;
    109110              rows.Add(row);
    110             } else if (IsEqual(targetValue, classBValue)) {
     111            } else if (targetValue.IsAlmost(classBValue)) {
    111112              for (int l = 0; l < row.Length; l++) {
    112113                row[l] = origDataset.GetValue(k, l);
     
    141142      return null;
    142143    }
    143 
    144     private bool IsEqual(double x, double y) {
    145       return Math.Abs(x - y) < EPSILON;
    146     }
    147144  }
    148145}
  • trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassOneVsOneAnalyzer.cs

    r2285 r2328  
    2525using HeuristicLab.DataAnalysis;
    2626using HeuristicLab.GP.Interfaces;
     27using HeuristicLab.Common;
    2728
    2829namespace HeuristicLab.GP.StructureIdentification.Classification {
     
    4445    private const string TREEEVALUATOR = "TreeEvaluator";
    4546
    46     private const double EPSILON = 1E-6;
    4747    public override string Description {
    4848      get { return @"TASK"; }
     
    5656      AddVariableInfo(new VariableInfo(CLASSAVALUE, "The original class value of the class A in the subscope", typeof(DoubleData), VariableKind.In));
    5757      AddVariableInfo(new VariableInfo(CLASSBVALUE, "The original class value of the class B in the subscope", typeof(DoubleData), VariableKind.In));
    58       AddVariableInfo(new VariableInfo(TRAININGSAMPLESSTART, "The start of training samples in the original dataset", typeof(IntData), VariableKind.In));
    59       AddVariableInfo(new VariableInfo(TRAININGSAMPLESEND, "The end of training samples in the original dataset", typeof(IntData), VariableKind.In));
    6058      AddVariableInfo(new VariableInfo(SAMPLESSTART, "The start of samples in the original dataset", typeof(IntData), VariableKind.In));
    6159      AddVariableInfo(new VariableInfo(SAMPLESEND, "The end of samples in the original dataset", typeof(IntData), VariableKind.In));
     
    8482
    8583        ITreeEvaluator evaluator = GetVariableValue<ITreeEvaluator>(TREEEVALUATOR, bestScope, true);
    86         evaluator.PrepareForEvaluation(dataset, targetVariable, trainingSamplesStart, trainingSamplesEnd, gpModel.FunctionTree);
     84        evaluator.PrepareForEvaluation(dataset, gpModel.FunctionTree);
    8785        for(int i = 0; i < (samplesEnd - samplesStart); i++) {
    8886          double est = evaluator.Evaluate(i + samplesStart);
     
    110108          }
    111109        }
    112         if(IsEqual(originalClassValue, estimatedClassValue) && sameVotes == 0) correctlyClassified++;
     110        if(originalClassValue.IsAlmost(estimatedClassValue) && sameVotes == 0) correctlyClassified++;
    113111      }
    114112
     
    122120    private void CastVote(int[,] votes, int sample, double votedClass, ItemList<DoubleData> classValues) {
    123121      for(int i = 0; i < classValues.Count; i++) {
    124         if(IsEqual(classValues[i].Data, votedClass)) votes[sample, i]++;
     122        if(classValues[i].Data.IsAlmost(votedClass)) votes[sample, i]++;
    125123      }
    126     }
    127 
    128     private bool IsEqual(double x, double y) {
    129       return Math.Abs(x - y) < EPSILON;
    130124    }
    131125  }
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses/AlgorithmBase.cs

    r2319 r2328  
    3333using HeuristicLab.Random;
    3434using HeuristicLab.Selection;
     35using HeuristicLab.Operators.Programmable;
    3536
    3637namespace HeuristicLab.GP.StructureIdentification {
     
    7576        if (!engine.Terminated) throw new InvalidOperationException("The algorithm is still running. Wait until the algorithm is terminated to retrieve the result.");
    7677        if (model == null) {
    77           IScope bestModelScope = engine.GlobalScope.GetVariableValue<IScope>("BestValidationSolution", false);
     78          IScope bestModelScope = engine.GlobalScope.SubScopes[0];
    7879          model = CreateGPModel(bestModelScope);
    7980        }
     
    140141
    141142      IOperator globalInjector = CreateGlobalInjector();
     143      IOperator treeEvaluatorInjector = new HL2TreeEvaluatorInjector();
    142144      IOperator initialization = CreateInitialization();
    143145      IOperator funLibInjector = CreateFunctionLibraryInjector();
     
    163165      seq.AddSubOperator(problemInjector);
    164166      seq.AddSubOperator(globalInjector);
     167      seq.AddSubOperator(treeEvaluatorInjector);
    165168      seq.AddSubOperator(funLibInjector);
    166169      seq.AddSubOperator(initialization);
    167170      seq.AddSubOperator(mainLoop);
    168171      seq.AddSubOperator(cleanUp);
     172      seq.AddSubOperator(CreateModelAnalysisOperator());
    169173
    170174      initialization.AddSubOperator(treeCreator);
     
    179183      this.algorithm = seq;
    180184      return algo;
     185    }
     186
     187    protected internal virtual IOperator CreateModelAnalysisOperator() {
     188      CombinedOperator op = new CombinedOperator();
     189      SequentialProcessor seq = new SequentialProcessor();
     190      SolutionExtractor extractor = new SolutionExtractor();
     191      extractor.GetVariableInfo("Scope").ActualName = "BestValidationSolution";
     192      SequentialSubScopesProcessor seqSubScopeProc = new SequentialSubScopesProcessor();
     193      SequentialProcessor solutionProc = new SequentialProcessor();
     194
     195      seq.AddSubOperator(extractor);
     196      seq.AddSubOperator(seqSubScopeProc);
     197      seqSubScopeProc.AddSubOperator(solutionProc);
     198
     199      HL2TreeEvaluatorInjector evaluatorInjector = new HL2TreeEvaluatorInjector();
     200      evaluatorInjector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(1000.0)));
     201      evaluatorInjector.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     202
     203      #region MSE
     204      MeanSquaredErrorEvaluator trainingMseEvaluator = new MeanSquaredErrorEvaluator();
     205      trainingMseEvaluator.Name = "TrainingMseEvaluator";
     206      trainingMseEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     207      trainingMseEvaluator.GetVariableInfo("MSE").ActualName = "TrainingMSE";
     208      trainingMseEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
     209      trainingMseEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
     210      MeanSquaredErrorEvaluator validationMseEvaluator = new MeanSquaredErrorEvaluator();
     211      validationMseEvaluator.Name = "ValidationMseEvaluator";
     212      validationMseEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     213      validationMseEvaluator.GetVariableInfo("MSE").ActualName = "ValidationMSE";
     214      validationMseEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     215      validationMseEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     216      MeanSquaredErrorEvaluator testMseEvaluator = new MeanSquaredErrorEvaluator();
     217      testMseEvaluator.Name = "TestMeanSquaredErrorEvaluator";
     218      testMseEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     219      testMseEvaluator.GetVariableInfo("MSE").ActualName = "TestMSE";
     220      testMseEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
     221      testMseEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
     222      #endregion
     223      #region MAPE
     224      MeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
     225      trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
     226      trainingMapeEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     227      trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
     228      trainingMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
     229      trainingMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
     230      MeanAbsolutePercentageErrorEvaluator validationMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
     231      validationMapeEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     232      validationMapeEvaluator.Name = "ValidationMapeEvaluator";
     233      validationMapeEvaluator.GetVariableInfo("MAPE").ActualName = "ValidationMAPE";
     234      validationMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     235      validationMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     236      MeanAbsolutePercentageErrorEvaluator testMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
     237      testMapeEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     238      testMapeEvaluator.Name = "TestMapeEvaluator";
     239      testMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TestMAPE";
     240      testMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
     241      testMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
     242      #endregion
     243      #region MAPRE
     244      MeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
     245      trainingMapreEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     246      trainingMapreEvaluator.Name = "TrainingMapreEvaluator";
     247      trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TrainingMAPRE";
     248      trainingMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
     249      trainingMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
     250      MeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
     251      validationMapreEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     252      validationMapreEvaluator.Name = "ValidationMapreEvaluator";
     253      validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "ValidationMAPRE";
     254      validationMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     255      validationMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     256      MeanAbsolutePercentageOfRangeErrorEvaluator testMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
     257      testMapreEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     258      testMapreEvaluator.Name = "TestMapreEvaluator";
     259      testMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TestMAPRE";
     260      testMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
     261      testMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
     262      #endregion MAPRE
     263      #region R2
     264      CoefficientOfDeterminationEvaluator trainingR2Evaluator = new CoefficientOfDeterminationEvaluator();
     265      trainingR2Evaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     266      trainingR2Evaluator.Name = "TrainingR2Evaluator";
     267      trainingR2Evaluator.GetVariableInfo("R2").ActualName = "TrainingR2";
     268      trainingR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
     269      trainingR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
     270      CoefficientOfDeterminationEvaluator validationR2Evaluator = new CoefficientOfDeterminationEvaluator();
     271      validationR2Evaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     272      validationR2Evaluator.Name = "ValidationR2Evaluator";
     273      validationR2Evaluator.GetVariableInfo("R2").ActualName = "ValidationR2";
     274      validationR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     275      validationR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     276      CoefficientOfDeterminationEvaluator testR2Evaluator = new CoefficientOfDeterminationEvaluator();
     277      testR2Evaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     278      testR2Evaluator.Name = "TestR2Evaluator";
     279      testR2Evaluator.GetVariableInfo("R2").ActualName = "TestR2";
     280      testR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
     281      testR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
     282      #endregion
     283      #region VAF
     284      VarianceAccountedForEvaluator trainingVAFEvaluator = new VarianceAccountedForEvaluator();
     285      trainingVAFEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     286      trainingVAFEvaluator.Name = "TrainingVAFEvaluator";
     287      trainingVAFEvaluator.GetVariableInfo("VAF").ActualName = "TrainingVAF";
     288      trainingVAFEvaluator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
     289      trainingVAFEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
     290      VarianceAccountedForEvaluator validationVAFEvaluator = new VarianceAccountedForEvaluator();
     291      validationVAFEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     292      validationVAFEvaluator.Name = "ValidationVAFEvaluator";
     293      validationVAFEvaluator.GetVariableInfo("VAF").ActualName = "ValidationVAF";
     294      validationVAFEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     295      validationVAFEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     296      VarianceAccountedForEvaluator testVAFEvaluator = new VarianceAccountedForEvaluator();
     297      testVAFEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     298      testVAFEvaluator.Name = "TestVAFEvaluator";
     299      testVAFEvaluator.GetVariableInfo("VAF").ActualName = "TestVAF";
     300      testVAFEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
     301      testVAFEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
     302      #endregion
     303
     304      solutionProc.AddSubOperator(evaluatorInjector);
     305      solutionProc.AddSubOperator(trainingMseEvaluator);
     306      solutionProc.AddSubOperator(validationMseEvaluator);
     307      solutionProc.AddSubOperator(testMseEvaluator);
     308      solutionProc.AddSubOperator(trainingMapeEvaluator);
     309      solutionProc.AddSubOperator(validationMapeEvaluator);
     310      solutionProc.AddSubOperator(testMapeEvaluator);
     311      solutionProc.AddSubOperator(trainingMapreEvaluator);
     312      solutionProc.AddSubOperator(validationMapreEvaluator);
     313      solutionProc.AddSubOperator(testMapreEvaluator);
     314      solutionProc.AddSubOperator(trainingR2Evaluator);
     315      solutionProc.AddSubOperator(validationR2Evaluator);
     316      solutionProc.AddSubOperator(testR2Evaluator);
     317      solutionProc.AddSubOperator(trainingVAFEvaluator);
     318      solutionProc.AddSubOperator(validationVAFEvaluator);
     319      solutionProc.AddSubOperator(testVAFEvaluator);
     320
     321      #region variable impacts
     322      // calculate and set variable impacts
     323      VariableNamesExtractor namesExtractor = new VariableNamesExtractor();
     324      namesExtractor.GetVariableInfo("VariableNames").ActualName = "InputVariableNames";
     325      PredictorBuilder predictorBuilder = new PredictorBuilder();
     326      predictorBuilder.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
     327      predictorBuilder.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(1000.0)));
     328
     329      VariableEvaluationImpactCalculator evaluationImpactCalculator = new VariableEvaluationImpactCalculator();
     330      evaluationImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
     331      evaluationImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
     332      VariableQualityImpactCalculator qualityImpactCalculator = new VariableQualityImpactCalculator();
     333      qualityImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
     334      qualityImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
     335
     336      solutionProc.AddSubOperator(namesExtractor);
     337      solutionProc.AddSubOperator(predictorBuilder);
     338      solutionProc.AddSubOperator(evaluationImpactCalculator);
     339      solutionProc.AddSubOperator(qualityImpactCalculator);
     340      #endregion
     341
     342      op.OperatorGraph.AddOperator(seq);
     343      op.OperatorGraph.InitialOperator = seq;
     344      return op;
    181345    }
    182346
     
    207371      injector.AddVariable(new HeuristicLab.Core.Variable("Parents", new IntData()));
    208372      injector.AddVariable(new HeuristicLab.Core.Variable("UseEstimatedTargetValue", new BoolData()));
    209       injector.AddVariable(new HeuristicLab.Core.Variable("TreeEvaluator", new HL2TreeEvaluator()));
     373      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(10.0)));
    210374      return injector;
    211375    }
     
    312476    protected internal virtual IOperator CreateBestSolutionProcessor() {
    313477      SequentialProcessor seq = new SequentialProcessor();
    314       // calculate and set variable impacts
    315       VariableNamesExtractor namesExtractor = new VariableNamesExtractor();
    316       namesExtractor.GetVariableInfo("VariableNames").ActualName = "InputVariableNames";
    317       PredictorBuilder predictorBuilder = new PredictorBuilder();
    318 
    319       VariableEvaluationImpactCalculator evaluationImpactCalculator = new VariableEvaluationImpactCalculator();
    320       evaluationImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
    321       evaluationImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
    322       VariableQualityImpactCalculator qualityImpactCalculator = new VariableQualityImpactCalculator();
    323       qualityImpactCalculator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
    324       qualityImpactCalculator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
    325 
    326       seq.AddSubOperator(namesExtractor);
    327       seq.AddSubOperator(predictorBuilder);
    328       seq.AddSubOperator(evaluationImpactCalculator);
    329       seq.AddSubOperator(qualityImpactCalculator);
     478      ProgrammableOperator progOperator = new ProgrammableOperator();
     479      progOperator.RemoveVariableInfo("Result");
     480      progOperator.AddVariableInfo(new HeuristicLab.Core.VariableInfo("EvaluatedSolutions", "", typeof(IntData), VariableKind.In));
     481      progOperator.Code = @"
     482int evalSolutions = EvaluatedSolutions.Data;
     483scope.AddVariable(new Variable(""EvaluatedSolutions"", new IntData(evalSolutions)));
     484";
     485      seq.AddSubOperator(progOperator);
    330486      return seq;
    331487    }
     
    439595      model.TestSamplesEnd = bestModelScope.GetVariableValue<IntData>("TestSamplesEnd", true).Data;
    440596
    441       model.TrainingMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("Quality", false).Data;
    442       model.ValidationMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("ValidationQuality", false).Data;
     597      model.TrainingMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("TrainingMSE", false).Data;
     598      model.ValidationMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("ValidationMSE", false).Data;
     599      model.TestMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("TestMSE", false).Data;
     600      model.TrainingCoefficientOfDetermination = bestModelScope.GetVariableValue<DoubleData>("TrainingR2", false).Data;
     601      model.ValidationCoefficientOfDetermination = bestModelScope.GetVariableValue<DoubleData>("ValidationR2", false).Data;
     602      model.TestCoefficientOfDetermination = bestModelScope.GetVariableValue<DoubleData>("TestR2", false).Data;
     603      model.TrainingMeanAbsolutePercentageError = bestModelScope.GetVariableValue<DoubleData>("TrainingMAPE", false).Data;
     604      model.ValidationMeanAbsolutePercentageError = bestModelScope.GetVariableValue<DoubleData>("ValidationMAPE", false).Data;
     605      model.TestMeanAbsolutePercentageError = bestModelScope.GetVariableValue<DoubleData>("TestMAPE", false).Data;
     606      model.TrainingMeanAbsolutePercentageOfRangeError = bestModelScope.GetVariableValue<DoubleData>("TrainingMAPRE", false).Data;
     607      model.ValidationMeanAbsolutePercentageOfRangeError = bestModelScope.GetVariableValue<DoubleData>("ValidationMAPRE", false).Data;
     608      model.TestMeanAbsolutePercentageOfRangeError = bestModelScope.GetVariableValue<DoubleData>("TestMAPRE", false).Data;
     609      model.TrainingVarianceAccountedFor = bestModelScope.GetVariableValue<DoubleData>("TrainingVAF", false).Data;
     610      model.ValidationVarianceAccountedFor = bestModelScope.GetVariableValue<DoubleData>("ValidationVAF", false).Data;
     611      model.TestVarianceAccountedFor = bestModelScope.GetVariableValue<DoubleData>("TestVAF", false).Data;
    443612
    444613      ItemList evaluationImpacts = bestModelScope.GetVariableValue<ItemList>("VariableEvaluationImpacts", false);
     
    456625        model.AddInputVariable(variableName);
    457626      }
    458       Engine.GlobalScope.RemoveSubScope(bestModelScope);
     627
    459628      return model;
    460629    }
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses/TreeEvaluatorBase.cs

    r2285 r2328  
    3333  public abstract class TreeEvaluatorBase : ItemBase, ITreeEvaluator {
    3434    protected const double EPSILON = 1.0e-7;
    35     protected double maxValue = double.MaxValue;
    36     protected double minValue = double.MinValue;
    37     private double punishmentFactor = 10.0; // we should provide a view for treeevaluators that allows to change this value
    3835
    3936    protected class Instr {
     
    5047    protected int sampleIndex;
    5148
     49    public double UpperEvaluationLimit { get; set; }
     50    public double LowerEvaluationLimit { get; set; }
     51
     52    public TreeEvaluatorBase() // for persistence
     53      : this(double.MinValue, double.MaxValue) {
     54    }
     55
     56    public TreeEvaluatorBase(double minEstimatedValue, double maxEstimatedValue)
     57      : base() {
     58      UpperEvaluationLimit = maxEstimatedValue;
     59      LowerEvaluationLimit = minEstimatedValue;
     60    }
     61
    5262    public void PrepareForEvaluation(Dataset dataset, IFunctionTree functionTree) {
    5363      this.dataset = dataset;
     
    5767        codeArr[i++] = TranslateToInstr(tree);
    5868      }
    59     }
    60 
    61     public void PrepareForEvaluation(Dataset dataset, int targetVariable, int start, int end, IFunctionTree functionTree) {
    62       // calculate upper and lower bounds for the estimated value (mean +/- punishmentFactor * range)
    63       double mean = dataset.GetMean(targetVariable, start, end);
    64       double range = dataset.GetRange(targetVariable, start, end);
    65       maxValue = mean + punishmentFactor * range;
    66       minValue = mean - punishmentFactor * range;
    67       PrepareForEvaluation(dataset, functionTree);
    6869    }
    6970
     
    106107      this.sampleIndex = sampleIndex;
    107108
    108       double estimated = EvaluateBakedCode();
    109       if (double.IsNaN(estimated) || double.IsInfinity(estimated)) estimated = maxValue;
    110       else if (estimated < minValue) estimated = minValue;
    111       else if (estimated > maxValue) estimated = maxValue;
     109      double estimated = Math.Min(Math.Max(EvaluateBakedCode(), LowerEvaluationLimit), UpperEvaluationLimit);
     110      if (double.IsNaN(estimated)) estimated = UpperEvaluationLimit;
    112111      return estimated;
    113112    }
     
    126125    public override object Clone(IDictionary<Guid, object> clonedObjects) {
    127126      TreeEvaluatorBase clone = (TreeEvaluatorBase)base.Clone(clonedObjects);
    128       clone.maxValue = maxValue;
    129       clone.minValue = minValue;
    130       clone.punishmentFactor = punishmentFactor;
     127      clone.UpperEvaluationLimit = UpperEvaluationLimit;
     128      clone.LowerEvaluationLimit = LowerEvaluationLimit;
    131129      return clone;
    132130    }
     
    134132    public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
    135133      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
    136       XmlAttribute maxValueAttribute = document.CreateAttribute("MaxPredictionValue");
    137       XmlAttribute minValueAttribute = document.CreateAttribute("MinPredictionValue");
    138       XmlAttribute punishmentFactorAttribute = document.CreateAttribute("PunishmentFactor");
    139       maxValueAttribute.Value = XmlConvert.ToString(maxValue);
    140       minValueAttribute.Value = XmlConvert.ToString(minValue);
    141       punishmentFactorAttribute.Value = XmlConvert.ToString(punishmentFactor);
    142 
    143       node.Attributes.Append(punishmentFactorAttribute);
     134      XmlAttribute maxValueAttribute = document.CreateAttribute("UpperEvaluationLimit");
     135      XmlAttribute minValueAttribute = document.CreateAttribute("LowerEvaluationLimit");
     136      maxValueAttribute.Value = XmlConvert.ToString(UpperEvaluationLimit);
     137      minValueAttribute.Value = XmlConvert.ToString(LowerEvaluationLimit);
    144138      node.Attributes.Append(minValueAttribute);
    145139      node.Attributes.Append(maxValueAttribute);
     
    149143    public override void Populate(System.Xml.XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
    150144      base.Populate(node, restoredObjects);
    151       minValue = XmlConvert.ToDouble(node.Attributes["MinPredictionValue"].Value);
    152       maxValue = XmlConvert.ToDouble(node.Attributes["MaxPredictionValue"].Value);
    153       punishmentFactor = XmlConvert.ToDouble(node.Attributes["PunishmentFactor"].Value);
     145      LowerEvaluationLimit = XmlConvert.ToDouble(node.Attributes["LowerEvaluationLimit"].Value);
     146      UpperEvaluationLimit = XmlConvert.ToDouble(node.Attributes["UpperEvaluationLimit"].Value);
    154147    }
    155148  }
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/GPEvaluatorBase.cs

    r2285 r2328  
    3434      AddVariableInfo(new VariableInfo("TargetVariable", "Index of the column of the dataset that holds the target variable", typeof(IntData), VariableKind.In));
    3535      AddVariableInfo(new VariableInfo("TotalEvaluatedNodes", "Number of evaluated nodes", typeof(DoubleData), VariableKind.In | VariableKind.Out));
    36       AddVariableInfo(new VariableInfo("TrainingSamplesStart", "Start index of training samples in dataset", typeof(IntData), VariableKind.In));
    37       AddVariableInfo(new VariableInfo("TrainingSamplesEnd", "End index of training samples in dataset", typeof(IntData), VariableKind.In));
    3836      AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
    3937      AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
     
    4745      IGeneticProgrammingModel gpModel = GetVariableValue<IGeneticProgrammingModel>("FunctionTree", scope, true);
    4846      double totalEvaluatedNodes = scope.GetVariableValue<DoubleData>("TotalEvaluatedNodes", true).Data;
    49       int trainingStart = GetVariableValue<IntData>("TrainingSamplesStart", scope, true).Data;
    50       int trainingEnd = GetVariableValue<IntData>("TrainingSamplesEnd", scope, true).Data;
    5147      int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data;
    5248      int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data;
    5349      bool useEstimatedValues = GetVariableValue<BoolData>("UseEstimatedTargetValue", scope, true).Data;
    5450      ITreeEvaluator evaluator = GetVariableValue<ITreeEvaluator>("TreeEvaluator", scope, true);
    55       evaluator.PrepareForEvaluation(dataset, targetVariable, trainingStart, trainingEnd, gpModel.FunctionTree);
     51      evaluator.PrepareForEvaluation(dataset, gpModel.FunctionTree);
    5652
    5753      double[] backupValues = null;
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HL2TreeEvaluator.cs

    r2222 r2328  
    2828  /// </summary>
    2929  public class HL2TreeEvaluator : TreeEvaluatorBase {
     30    public HL2TreeEvaluator() : base() { } // for persistence
     31    public HL2TreeEvaluator(double minValue, double maxValue) : base(minValue, maxValue) { }
    3032
    3133    protected override double EvaluateBakedCode() {
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HL3TreeEvaluator.cs

    r2324 r2328  
    3030  /// </summary>
    3131  public class HL3TreeEvaluator : TreeEvaluatorBase {
     32    public HL3TreeEvaluator() : base() { } // for persistence
     33    public HL3TreeEvaluator(double minValue, double maxValue) : base(minValue, maxValue) { }
     34
    3235    protected override double EvaluateBakedCode() {
    3336      Instr currInstr = codeArr[PC++];
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLab.GP.StructureIdentification-3.3.csproj

    r2324 r2328  
    8585    <Compile Include="BaseClasses\FunctionTreeBase.cs" />
    8686    <Compile Include="BaseClasses\TreeEvaluatorBase.cs" />
     87    <Compile Include="HL3TreeEvaluatorInjector.cs" />
     88    <Compile Include="HL2TreeEvaluatorInjector.cs" />
    8789    <Compile Include="PredictorBuilder.cs" />
    8890    <Compile Include="Predictor.cs" />
    8991    <Compile Include="Evaluators\SimpleGPEvaluatorBase.cs" />
    9092    <Compile Include="HL3TreeEvaluator.cs" />
     93    <Compile Include="PredictorView.cs">
     94      <SubType>UserControl</SubType>
     95    </Compile>
     96    <Compile Include="PredictorView.Designer.cs">
     97      <DependentUpon>PredictorView.cs</DependentUpon>
     98    </Compile>
    9199    <Compile Include="Symbols\Addition.cs" />
    92100    <Compile Include="Symbols\And.cs" />
     
    222230      <DependentUpon>OffSpringSelectionGpEditor.cs</DependentUpon>
    223231    </EmbeddedResource>
     232    <EmbeddedResource Include="PredictorView.resx">
     233      <DependentUpon>PredictorView.cs</DependentUpon>
     234    </EmbeddedResource>
    224235    <EmbeddedResource Include="StandardGpEditor.resx">
    225236      <DependentUpon>StandardGpEditor.cs</DependentUpon>
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ITreeEvaluator.cs

    r2285 r2328  
    2626namespace HeuristicLab.GP.StructureIdentification {
    2727  public interface ITreeEvaluator : IItem {
    28     void PrepareForEvaluation(Dataset dataset, int targetVariable, int start, int end, IFunctionTree functionTree);
     28    double LowerEvaluationLimit { get; set; }
     29    double UpperEvaluationLimit { get; set; }
    2930    void PrepareForEvaluation(Dataset dataset, IFunctionTree functionTree);
    3031    double Evaluate(int sampleIndex);
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Predictor.cs

    r2317 r2328  
    3131
    3232namespace HeuristicLab.GP.StructureIdentification {
    33   public class Predictor : ItemBase, IPredictor {
     33  public class Predictor : PredictorBase {
    3434    private ITreeEvaluator treeEvaluator;
    35    
    36 
    37     public Predictor() : base() { } // for persistence
    38     public Predictor(ITreeEvaluator evaluator, IGeneticProgrammingModel tree)
    39       : base() {
    40       this.treeEvaluator = evaluator;
    41       this.functionTree = tree;
    42     }
    4335
    4436    private IGeneticProgrammingModel functionTree;
     
    4638      get { return functionTree; }
    4739    }
     40    public Predictor() : base() { } // for persistence
     41    public Predictor(ITreeEvaluator evaluator, IGeneticProgrammingModel tree, double lowerPredictionLimit, double upperPredictionLimit)
     42      : base(lowerPredictionLimit, upperPredictionLimit) {
     43      this.treeEvaluator = evaluator;
     44      this.functionTree = tree;
     45    }
    4846
    49     public double[] Predict(Dataset input, int start, int end) {
     47    public override double[] Predict(Dataset input, int start, int end) {
     48      treeEvaluator.UpperEvaluationLimit = UpperPredictionLimit;
     49      treeEvaluator.LowerEvaluationLimit = LowerPredictionLimit;
     50
    5051      if (start < 0 || end <= start) throw new ArgumentException("start must be larger than zero and strictly smaller than end");
    5152      if (end > input.Rows) throw new ArgumentOutOfRangeException("number of rows in input is smaller then end");
     
    5960
    6061    public override IView CreateView() {
    61       return functionTree.CreateView();
     62      return new PredictorView(this);
    6263    }
    6364
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/PredictorBuilder.cs

    r2319 r2328  
    2828using HeuristicLab.GP.Interfaces;
    2929using HeuristicLab.Modeling;
     30using HeuristicLab.DataAnalysis;
    3031
    3132namespace HeuristicLab.GP.StructureIdentification {
     
    3536      AddVariableInfo(new VariableInfo("FunctionTree", "The function tree", typeof(IGeneticProgrammingModel), VariableKind.In));
    3637      AddVariableInfo(new VariableInfo("TreeEvaluator", "The tree evaluator used to evaluate the model", typeof(ITreeEvaluator), VariableKind.In));
     38      AddVariableInfo(new VariableInfo("PunishmentFactor", "The punishment factor limits the estimated values to a certain range", typeof(DoubleData), VariableKind.In));
     39      AddVariableInfo(new VariableInfo("Dataset", "The dataset", typeof(Dataset), VariableKind.In));
     40      AddVariableInfo(new VariableInfo("TrainingSamplesStart", "Start index of training set", typeof(DoubleData), VariableKind.In));
     41      AddVariableInfo(new VariableInfo("TrainingSamplesEnd", "End index of training set", typeof(DoubleData), VariableKind.In));
     42      AddVariableInfo(new VariableInfo("TargetVariable", "Index of the target variable", typeof(IntData), VariableKind.In));
    3743      AddVariableInfo(new VariableInfo("Predictor", "The predictor combines the function tree and the evaluator and can be used to generate estimated values", typeof(IPredictor), VariableKind.New));
    3844    }
     
    4450    public override IOperation Apply(IScope scope) {
    4551      IGeneticProgrammingModel model = GetVariableValue<IGeneticProgrammingModel>("FunctionTree", scope, true);
    46       ITreeEvaluator evaluator = GetVariableValue<ITreeEvaluator>("TreeEvaluator", scope, true);
    47       scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("Predictor"), new Predictor(evaluator, model)));
     52      ITreeEvaluator evaluator = (ITreeEvaluator)GetVariableValue<ITreeEvaluator>("TreeEvaluator", scope, true).Clone();
     53      double punishmentFactor = GetVariableValue<DoubleData>("PunishmentFactor", scope, true).Data;
     54      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
     55      int start = GetVariableValue<IntData>("TrainingSamplesStart", scope, true).Data;
     56      int end = GetVariableValue<IntData>("TrainingSamplesEnd", scope, true).Data;
     57      int targetVariable = GetVariableValue<IntData>("TargetVariable", scope, true).Data;
     58      double mean = dataset.GetMean(targetVariable, start, end);
     59      double range = dataset.GetRange(targetVariable, start, end);
     60      double minEstimatedValue = mean - punishmentFactor * range;
     61      double maxEstimatedValue = mean + punishmentFactor * range;
     62      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("Predictor"), new Predictor(evaluator, model, minEstimatedValue, maxEstimatedValue)));
    4863      return null;
    4964    }
  • trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs

    r2319 r2328  
    115115
    116116    protected internal override IOperator CreateProblemInjector() {
    117       SequentialProcessor seq = new SequentialProcessor();     
     117      SequentialProcessor seq = new SequentialProcessor();
    118118      var probInject = new ProblemInjector();
    119119      probInject.GetVariableInfo("MaxNumberOfTrainingSamples").Local = true;
     
    201201      manipulator.OperatorGraph.InitialOperator = multibranch;
    202202      return manipulator;
    203     }
    204 
    205     protected internal override IOperator CreateBestSolutionProcessor() {     
    206       SequentialProcessor bestSolutionProcessor = new SequentialProcessor();
    207       bestSolutionProcessor.AddSubOperator(base.CreateBestSolutionProcessor());
    208 
    209       #region MSE
    210       MeanSquaredErrorEvaluator testMseEvaluator = new MeanSquaredErrorEvaluator();
    211       testMseEvaluator.Name = "TestMeanSquaredErrorEvaluator";
    212       testMseEvaluator.GetVariableInfo("MSE").ActualName = "TestQuality";
    213       testMseEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
    214       testMseEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
    215       #endregion
    216       #region MAPE
    217       MeanAbsolutePercentageErrorEvaluator trainingMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
    218       trainingMapeEvaluator.Name = "TrainingMapeEvaluator";
    219       trainingMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TrainingMAPE";
    220       trainingMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
    221       trainingMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
    222       MeanAbsolutePercentageErrorEvaluator validationMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
    223       validationMapeEvaluator.Name = "ValidationMapeEvaluator";
    224       validationMapeEvaluator.GetVariableInfo("MAPE").ActualName = "ValidationMAPE";
    225       validationMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
    226       validationMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
    227       MeanAbsolutePercentageErrorEvaluator testMapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
    228       testMapeEvaluator.Name = "TestMapeEvaluator";
    229       testMapeEvaluator.GetVariableInfo("MAPE").ActualName = "TestMAPE";
    230       testMapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
    231       testMapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
    232       #endregion
    233       #region MAPRE
    234       MeanAbsolutePercentageOfRangeErrorEvaluator trainingMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
    235       trainingMapreEvaluator.Name = "TrainingMapreEvaluator";
    236       trainingMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TrainingMAPRE";
    237       trainingMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
    238       trainingMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
    239       MeanAbsolutePercentageOfRangeErrorEvaluator validationMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
    240       validationMapreEvaluator.Name = "ValidationMapreEvaluator";
    241       validationMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "ValidationMAPRE";
    242       validationMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
    243       validationMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
    244       MeanAbsolutePercentageOfRangeErrorEvaluator testMapreEvaluator = new MeanAbsolutePercentageOfRangeErrorEvaluator();
    245       testMapreEvaluator.Name = "TestMapreEvaluator";
    246       testMapreEvaluator.GetVariableInfo("MAPRE").ActualName = "TestMAPRE";
    247       testMapreEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
    248       testMapreEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
    249       #endregion MAPRE
    250       #region R2
    251       CoefficientOfDeterminationEvaluator trainingR2Evaluator = new CoefficientOfDeterminationEvaluator();
    252       trainingR2Evaluator.Name = "TrainingR2Evaluator";
    253       trainingR2Evaluator.GetVariableInfo("R2").ActualName = "TrainingR2";
    254       trainingR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
    255       trainingR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
    256       CoefficientOfDeterminationEvaluator validationR2Evaluator = new CoefficientOfDeterminationEvaluator();
    257       validationR2Evaluator.Name = "ValidationR2Evaluator";
    258       validationR2Evaluator.GetVariableInfo("R2").ActualName = "ValidationR2";
    259       validationR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
    260       validationR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
    261       CoefficientOfDeterminationEvaluator testR2Evaluator = new CoefficientOfDeterminationEvaluator();
    262       testR2Evaluator.Name = "TestR2Evaluator";
    263       testR2Evaluator.GetVariableInfo("R2").ActualName = "TestR2";
    264       testR2Evaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
    265       testR2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
    266       #endregion
    267       #region VAF
    268       VarianceAccountedForEvaluator trainingVAFEvaluator = new VarianceAccountedForEvaluator();
    269       trainingVAFEvaluator.Name = "TrainingVAFEvaluator";
    270       trainingVAFEvaluator.GetVariableInfo("VAF").ActualName = "TrainingVAF";
    271       trainingVAFEvaluator.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
    272       trainingVAFEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
    273       VarianceAccountedForEvaluator validationVAFEvaluator = new VarianceAccountedForEvaluator();
    274       validationVAFEvaluator.Name = "ValidationVAFEvaluator";
    275       validationVAFEvaluator.GetVariableInfo("VAF").ActualName = "ValidationVAF";
    276       validationVAFEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
    277       validationVAFEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
    278       VarianceAccountedForEvaluator testVAFEvaluator = new VarianceAccountedForEvaluator();
    279       testVAFEvaluator.Name = "TestVAFEvaluator";
    280       testVAFEvaluator.GetVariableInfo("VAF").ActualName = "TestVAF";
    281       testVAFEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
    282       testVAFEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
    283       #endregion
    284       ProgrammableOperator progOperator = new ProgrammableOperator();
    285       progOperator.RemoveVariableInfo("Result");
    286       progOperator.AddVariableInfo(new HeuristicLab.Core.VariableInfo("EvaluatedSolutions", "", typeof(IntData), VariableKind.In));
    287       progOperator.Code = @"
    288 int evalSolutions = EvaluatedSolutions.Data;
    289 scope.AddVariable(new Variable(""EvaluatedSolutions"", new IntData(evalSolutions)));
    290 ";
    291       bestSolutionProcessor.AddSubOperator(testMseEvaluator);
    292       bestSolutionProcessor.AddSubOperator(trainingMapeEvaluator);
    293       bestSolutionProcessor.AddSubOperator(validationMapeEvaluator);
    294       bestSolutionProcessor.AddSubOperator(testMapeEvaluator);
    295       bestSolutionProcessor.AddSubOperator(trainingMapreEvaluator);
    296       bestSolutionProcessor.AddSubOperator(validationMapreEvaluator);
    297       bestSolutionProcessor.AddSubOperator(testMapreEvaluator);
    298       bestSolutionProcessor.AddSubOperator(trainingR2Evaluator);
    299       bestSolutionProcessor.AddSubOperator(validationR2Evaluator);
    300       bestSolutionProcessor.AddSubOperator(testR2Evaluator);
    301       bestSolutionProcessor.AddSubOperator(trainingVAFEvaluator);
    302       bestSolutionProcessor.AddSubOperator(validationVAFEvaluator);
    303       bestSolutionProcessor.AddSubOperator(testVAFEvaluator);
    304       bestSolutionProcessor.AddSubOperator(progOperator);
    305       return bestSolutionProcessor;
    306203    }
    307204
     
    338235    }
    339236
    340     protected internal override IAnalyzerModel CreateGPModel(IScope bestModelScope) {
    341       IAnalyzerModel model = base.CreateGPModel(bestModelScope);
    342       model.TestMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("TestQuality", false).Data;
    343       model.TrainingCoefficientOfDetermination = bestModelScope.GetVariableValue<DoubleData>("TrainingR2", false).Data;
    344       model.ValidationCoefficientOfDetermination = bestModelScope.GetVariableValue<DoubleData>("ValidationR2", false).Data;
    345       model.TestCoefficientOfDetermination = bestModelScope.GetVariableValue<DoubleData>("TestR2", false).Data;
    346       model.TrainingMeanAbsolutePercentageError = bestModelScope.GetVariableValue<DoubleData>("TrainingMAPE", false).Data;
    347       model.ValidationMeanAbsolutePercentageError = bestModelScope.GetVariableValue<DoubleData>("ValidationMAPE", false).Data;
    348       model.TestMeanAbsolutePercentageError = bestModelScope.GetVariableValue<DoubleData>("TestMAPE", false).Data;
    349       model.TrainingMeanAbsolutePercentageOfRangeError = bestModelScope.GetVariableValue<DoubleData>("TrainingMAPRE", false).Data;
    350       model.ValidationMeanAbsolutePercentageOfRangeError = bestModelScope.GetVariableValue<DoubleData>("ValidationMAPRE", false).Data;
    351       model.TestMeanAbsolutePercentageOfRangeError = bestModelScope.GetVariableValue<DoubleData>("TestMAPRE", false).Data;
    352       model.TrainingVarianceAccountedFor = bestModelScope.GetVariableValue<DoubleData>("TrainingVAF", false).Data;
    353       model.ValidationVarianceAccountedFor = bestModelScope.GetVariableValue<DoubleData>("ValidationVAF", false).Data;
    354       model.TestVarianceAccountedFor = bestModelScope.GetVariableValue<DoubleData>("TestVAF", false).Data;
    355 
    356       return model;
    357     }
    358 
    359237    public virtual IEditor CreateEditor() {
    360238      return new StandardGpEditor(this);
  • trunk/sources/HeuristicLab.GP/3.3/FunctionTreeView.Designer.cs

    r2222 r2328  
    5252      // funTreeView
    5353      //
    54       this.funTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
    5554      this.funTreeView.HideSelection = false;
    5655      this.funTreeView.Location = new System.Drawing.Point(0, 0);
     
    7372    #endregion
    7473
    75     private System.Windows.Forms.ContextMenu treeNodeContextMenu;
    76     private System.Windows.Forms.TreeView funTreeView;
     74    protected System.Windows.Forms.ContextMenu treeNodeContextMenu;
     75    protected System.Windows.Forms.TreeView funTreeView;
    7776  }
    7877}
  • trunk/sources/HeuristicLab.GP/3.3/GeneticProgrammingModel.cs

    r2235 r2328  
    9797
    9898    public override IView CreateView() {
    99       return new FunctionTreeView(this.FunctionTree);
     99      return new GeneticProgrammingModelView(this);
    100100    }
    101101  }
  • trunk/sources/HeuristicLab.GP/3.3/HeuristicLab.GP-3.3.csproj

    r2235 r2328  
    8989    <Compile Include="BaseClasses\Terminal.cs" />
    9090    <Compile Include="BaseClasses\UnaryFunction.cs" />
     91    <Compile Include="GeneticProgrammingModelView.cs">
     92      <SubType>UserControl</SubType>
     93    </Compile>
     94    <Compile Include="GeneticProgrammingModelView.Designer.cs">
     95      <DependentUpon>GeneticProgrammingModelView.cs</DependentUpon>
     96    </Compile>
    9197    <Compile Include="FunctionLibrary.cs" />
    9298    <Compile Include="FunctionLibraryEditor.cs">
     
    127133  </ItemGroup>
    128134  <ItemGroup>
     135    <EmbeddedResource Include="GeneticProgrammingModelView.resx">
     136      <DependentUpon>GeneticProgrammingModelView.cs</DependentUpon>
     137    </EmbeddedResource>
    129138    <EmbeddedResource Include="FunctionLibraryEditor.resx">
    130139      <DependentUpon>FunctionLibraryEditor.cs</DependentUpon>
  • trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs

    r2319 r2328  
    9797      problemInjector.AddVariable(new HeuristicLab.Core.Variable("MaxNumberOfTrainingSamples", new IntData(5000)));
    9898
     99      HL2TreeEvaluatorInjector treeEvaluatorInjector = new HL2TreeEvaluatorInjector();
     100
    99101      IOperator shuffler = new DatasetShuffler();
    100102      shuffler.GetVariableInfo("ShuffleStart").ActualName = "TrainingSamplesStart";
     
    108110      seq.AddSubOperator(problemInjector);
    109111      seq.AddSubOperator(globalInjector);
     112      seq.AddSubOperator(treeEvaluatorInjector);
    110113      seq.AddSubOperator(shuffler);
    111114      seq.AddSubOperator(lrOperator);
     
    120123    private IOperator CreateGlobalInjector() {
    121124      VariableInjector injector = new VariableInjector();
    122       injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(10)));
     125      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(1000)));
    123126      injector.AddVariable(new HeuristicLab.Core.Variable("TotalEvaluatedNodes", new DoubleData(0)));
    124       injector.AddVariable(new HeuristicLab.Core.Variable("TreeEvaluator", new HL2TreeEvaluator()));
    125127      injector.AddVariable(new HeuristicLab.Core.Variable("UseEstimatedTargetValue", new BoolData(false)));
    126128
     
    272274    }
    273275
    274 
    275276    protected internal virtual IAnalyzerModel CreateLRModel(IScope bestModelScope) {
    276277      IAnalyzerModel model = new AnalyzerModel();
  • trunk/sources/HeuristicLab.Logging/3.2/HeuristicLab.Logging-3.2.csproj

    r1782 r2328  
    8080  <ItemGroup>
    8181    <Compile Include="BestAverageWorstQualityCalculator.cs" />
    82     <Compile Include="BestSolutionStorer.cs" />
    8382    <Compile Include="PointXYChartView.cs">
    8483      <SubType>UserControl</SubType>
  • trunk/sources/HeuristicLab.Modeling/3.2/BestSolutionStorer.cs

    r2326 r2328  
    2525using HeuristicLab.Core;
    2626using HeuristicLab.Data;
    27 using HeuristicLab.Operators;
    2827
    29 namespace HeuristicLab.Logging {
     28namespace HeuristicLab.Modeling {
    3029  /// <summary>
    3130  /// Keeps a variable in the global scope that contains the scope representing the best solution.
  • trunk/sources/HeuristicLab.Modeling/3.2/HeuristicLab.Modeling-3.2.csproj

    r2324 r2328  
    8383  <ItemGroup>
    8484    <Compile Include="AnalyzerModel.cs" />
     85    <Compile Include="BestSolutionStorer.cs" />
    8586    <Compile Include="ClassificationProblemInjector.cs" />
     87    <Compile Include="SolutionExtractor.cs" />
     88    <Compile Include="PredictorBase.cs" />
    8689    <Compile Include="IAnalyzerModel.cs" />
    8790    <Compile Include="MatrixCreator.cs" />
  • trunk/sources/HeuristicLab.Modeling/3.2/IPredictor.cs

    r2285 r2328  
    2828namespace HeuristicLab.Modeling {
    2929  public interface IPredictor : IItem {
     30    double UpperPredictionLimit { get; set; }
     31    double LowerPredictionLimit { get; set; }
    3032    double[] Predict(Dataset dataset, int start, int end);
    3133  }
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj

    r2319 r2328  
    8383  </ItemGroup>
    8484  <ItemGroup>
     85    <Compile Include="PredictorView.cs">
     86      <SubType>UserControl</SubType>
     87    </Compile>
     88    <Compile Include="PredictorView.Designer.cs">
     89      <DependentUpon>PredictorView.cs</DependentUpon>
     90    </Compile>
    8591    <Compile Include="Predictor.cs" />
    8692    <Compile Include="PredictorBuilder.cs" />
     
    154160  </ItemGroup>
    155161  <ItemGroup>
     162    <EmbeddedResource Include="PredictorView.resx">
     163      <DependentUpon>PredictorView.cs</DependentUpon>
     164    </EmbeddedResource>
    156165    <EmbeddedResource Include="SVMModelView.resx">
    157166      <DependentUpon>SVMModelView.cs</DependentUpon>
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/Predictor.cs

    r2290 r2328  
    3232
    3333namespace HeuristicLab.SupportVectorMachines {
    34   public class Predictor : ItemBase, IPredictor {
     34  public class Predictor : PredictorBase {
    3535    private SVMModel svmModel;
     36    public SVMModel Model {
     37      get { return svmModel; }
     38    }
     39
    3640    private Dictionary<string, int> variableNames = new Dictionary<string, int>();
    3741    private string targetVariable;
     
    4650    }
    4751
    48     public double[] Predict(Dataset input, int start, int end) {
     52    public override double[] Predict(Dataset input, int start, int end) {
    4953      if (start < 0 || end <= start) throw new ArgumentException("start must be larger than zero and strictly smaller than end");
    5054      if (end > input.Rows) throw new ArgumentOutOfRangeException("number of rows in input is smaller then end");
     
    6468      double[] result = new double[rows];
    6569      for (int row = 0; row < rows; row++) {
    66         result[row] = SVM.Prediction.Predict(model, scaledProblem.X[row]);
     70        result[row] = Math.Max(Math.Min(SVM.Prediction.Predict(model, scaledProblem.X[row]), UpperPredictionLimit), LowerPredictionLimit);
    6771      }
    6872      return result;
     
    7074
    7175    public override IView CreateView() {
    72       return svmModel.CreateView();
     76      return new PredictorView(this);
    7377    }
    7478
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/PredictorBuilder.cs

    r2319 r2328  
    3737      AddVariableInfo(new VariableInfo("TargetVariable", "The target variable", typeof(StringData), VariableKind.In));
    3838      AddVariableInfo(new VariableInfo("InputVariables", "The input variable names", typeof(StringData), VariableKind.In));
     39      AddVariableInfo(new VariableInfo("TrainingSamplesStart", "Start index of the training set", typeof(IntData), VariableKind.In));
     40      AddVariableInfo(new VariableInfo("TrainingSamplesEnd", "End index of the training set", typeof(IntData), VariableKind.In));
     41      AddVariableInfo(new VariableInfo("PunishmentFactor", "The punishment factor limits the range of predicted values", typeof(DoubleData), VariableKind.In));
    3942      AddVariableInfo(new VariableInfo("Predictor", "The predictor can be used to generate estimated values", typeof(IPredictor), VariableKind.New));
    4043    }
     
    4851      SVMModel model = GetVariableValue<SVMModel>("SVMModel", scope, true);
    4952      int targetVariable = GetVariableValue<IntData>("TargetVariable", scope, true).Data;
     53      int start = GetVariableValue<IntData>("TrainingSamplesStart", scope, true).Data;
     54      int end = GetVariableValue<IntData>("TrainingSamplesEnd", scope, true).Data;
     55      double punishmentFactor = GetVariableValue<DoubleData>("PunishmentFactor", scope, true).Data;
     56
    5057      string targetVariableName = ds.GetVariableName(targetVariable);
    5158      ItemList inputVariables = GetVariableValue<ItemList>("InputVariables", scope, true);
     
    5360      for (int i = 0; i < ds.Columns; i++) variableNames[ds.GetVariableName(i)] = i;
    5461
    55       scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("Predictor"), new Predictor(model, targetVariableName, variableNames)));
     62      double mean = ds.GetMean(targetVariable, start, end);
     63      double range = ds.GetRange(targetVariable, start, end);
     64
     65      Predictor predictor = new Predictor(model, targetVariableName, variableNames);
     66      predictor.LowerPredictionLimit = mean - punishmentFactor * range;
     67      predictor.UpperPredictionLimit = mean + punishmentFactor * range;
     68      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("Predictor"), predictor));
    5669      return null;
    5770    }
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMModelView.cs

    r2322 r2328  
    3333  public partial class SVMModelView : ViewBase {
    3434    private SVMModel model;
    35    
     35    public SVMModelView() : base() {
     36      InitializeComponent();
     37    }   
    3638    public SVMModelView(SVMModel model) : base() {
    3739      InitializeComponent();
    3840      this.model = model;
    39       model.Changed += (sender, args) => UpdateControls();
     41      model.Changed += (sender, args) => Refresh();
    4042
    41       UpdateControls();
    42     }
    43 
    44     protected override void UpdateControls() {
    45       base.UpdateControls();
    46       numberOfSupportVectors.Text = model.Model.SupportVectorCount.ToString();
    47       rho.Text = model.Model.Rho[0].ToString();
    48       svmType.Text = model.Model.Parameter.SvmType.ToString();
    49       kernelType.Text = model.Model.Parameter.KernelType.ToString();
    50       gamma.Text = model.Model.Parameter.Gamma.ToString();
     43      numberOfSupportVectors.DataBindings.Add(new Binding("Text", model.Model, "SupportVectorCount"));
     44      rho.DataBindings.Add(new Binding("Text", model.Model, "Rho"));
     45      svmType.DataBindings.Add(new Binding("Text", model.Model.Parameter, "SvmType"));
     46      kernelType.DataBindings.Add(new Binding("Text", model.Model.Parameter, "KernelType"));
     47      gamma.DataBindings.Add(new Binding("Text", model.Model.Parameter, "Gamma"));
    5148    }
    5249  }
  • trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs

    r2319 r2328  
    394394      injector.AddVariable(new HeuristicLab.Core.Variable("KernelType", new StringData("RBF")));
    395395      injector.AddVariable(new HeuristicLab.Core.Variable("Type", new StringData("NU_SVR")));
     396      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(1000.0)));
    396397
    397398      return injector;
Note: See TracChangeset for help on using the changeset viewer.