Free cookie consent management tool by TermsFeed Policy Generator

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/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • 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  }
Note: See TracChangeset for help on using the changeset viewer.