Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/22/08 15:20:53 (16 years ago)
Author:
gkronber
Message:

fixed persistence of hard-coded standard GP and added operators to track the best solution on the validation set. #224 (Simple frontend for GP for non-expert users (similar to HeurisicLab.SGA))

Location:
branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj

    r1051 r1052  
    145145      <Name>HeuristicLab.Logging</Name>
    146146    </ProjectReference>
     147    <ProjectReference Include="..\HeuristicLab.Operators.Programmable\HeuristicLab.Operators.Programmable.csproj">
     148      <Project>{E3CCBFC6-900C-41B6-AFB8-6646DB097435}</Project>
     149      <Name>HeuristicLab.Operators.Programmable</Name>
     150    </ProjectReference>
    147151    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
    148152      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
  • branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs

    r1051 r1052  
    3333using HeuristicLab.Logging;
    3434using HeuristicLab.Data;
     35using HeuristicLab.Operators.Programmable;
    3536
    3637namespace HeuristicLab.GP.StructureIdentification {
     
    107108      TournamentSize = 7;
    108109      MutationRate = 0.15;
     110      Elites = 1;
    109111      engine = new SequentialEngine.SequentialEngine();
    110112      CombinedOperator algo = CreateAlgorithm();
     
    123125      randomInjector.Name = "Random Injector";
    124126      VariableInjector globalInjector = CreateGlobalInjector();
    125       VariableInjector problemInjector = new VariableInjector();
    126       problemInjector.Name = "Problem Injector";
    127127      CombinedOperator initialization = CreateInialization();
    128128      initialization.Name = "Initialization";
     
    156156      seq.AddSubOperator(randomInjector);
    157157      seq.AddSubOperator(globalInjector);
    158       seq.AddSubOperator(problemInjector);
    159158      seq.AddSubOperator(funLibInjector);
    160159      seq.AddSubOperator(initialization);
     
    187186      injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeHeight", new IntData(maxTreeHeight)));
    188187      injector.AddVariable(new HeuristicLab.Core.Variable("MaxTreeSize", new IntData(maxTreeSize)));
     188      injector.AddVariable(new HeuristicLab.Core.Variable("EvaluatedSolutions", new IntData(0)));
    189189      injector.AddVariable(new HeuristicLab.Core.Variable("TotalEvaluatedNodes", new DoubleData(0)));
    190190      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(punishmentFactor)));
     
    247247      evaluator.Name = "Evaluator (extr.)";
    248248      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
     249      MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
     250      validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
     251      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     252      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     253      Counter evalCounter = new Counter();
     254      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
    249255
    250256      seq.AddSubOperator(subScopesCreater);
     
    253259      individualSeq.AddSubOperator(treeCreater);
    254260      individualSeq.AddSubOperator(evaluator);
     261      individualSeq.AddSubOperator(validationEvaluator);
     262      individualSeq.AddSubOperator(evalCounter);
    255263
    256264      init.OperatorGraph.AddOperator(seq);
     
    266274      CombinedOperator replacement = CreateReplacement();
    267275      replacement.Name = "Replacement";
     276      BestSolutionStorer solutionStorer = CreateBestSolutionStorer();
    268277      BestAverageWorstQualityCalculator qualityCalculator = new BestAverageWorstQualityCalculator();
     278      BestAverageWorstQualityCalculator validationQualityCalculator = new BestAverageWorstQualityCalculator();
     279      validationQualityCalculator.Name = "ValidationQualityCalculator";
     280      validationQualityCalculator.GetVariableInfo("BestQuality").ActualName = "BestValidationQuality";
     281      validationQualityCalculator.GetVariableInfo("AverageQuality").ActualName = "AverageValidationQuality";
     282      validationQualityCalculator.GetVariableInfo("WorstQuality").ActualName = "WorstValidationQuality";
    269283      DataCollector collector = new DataCollector();
    270284      ItemList<StringData> names = collector.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
     
    272286      names.Add(new StringData("AverageQuality"));
    273287      names.Add(new StringData("WorstQuality"));
     288      names.Add(new StringData("BestValidationQuality"));
     289      names.Add(new StringData("AverageValidationQuality"));
     290      names.Add(new StringData("WorstValidationQuality"));
    274291      LinechartInjector lineChartInjector = new LinechartInjector();
    275292      lineChartInjector.GetVariableInfo("Linechart").ActualName = "Quality Linechart";
    276       lineChartInjector.GetVariable("NumberOfLines").GetValue<IntData>().Data = 3;
     293      lineChartInjector.GetVariable("NumberOfLines").GetValue<IntData>().Data = 6;
    277294      QualityLogger qualityLogger = new QualityLogger();
     295      QualityLogger validationQualityLogger = new QualityLogger();
     296      validationQualityCalculator.Name = "ValidationQualityLogger";
     297      validationQualityLogger.GetVariableInfo("Quality").ActualName = "ValidationQuality";
     298      validationQualityLogger.GetVariableInfo("QualityLog").ActualName = "ValidationQualityLog";
    278299      Counter counter = new Counter();
    279300      counter.GetVariableInfo("Value").ActualName = "Generations";
     
    287308      seq.AddSubOperator(childCreater);
    288309      seq.AddSubOperator(replacement);
     310      seq.AddSubOperator(solutionStorer);
    289311      seq.AddSubOperator(qualityCalculator);
     312      seq.AddSubOperator(validationQualityCalculator);
    290313      seq.AddSubOperator(collector);
    291314      seq.AddSubOperator(lineChartInjector);
    292315      seq.AddSubOperator(qualityLogger);
     316      seq.AddSubOperator(validationQualityLogger);
    293317      seq.AddSubOperator(counter);
    294318      seq.AddSubOperator(comparator);
     
    299323      main.OperatorGraph.InitialOperator = seq;
    300324      return main;
     325    }
     326
     327    private BestSolutionStorer CreateBestSolutionStorer() {
     328      BestSolutionStorer solutionStorer = new BestSolutionStorer();
     329      solutionStorer.GetVariableInfo("Quality").ActualName = "ValidationQuality";
     330      solutionStorer.GetVariableInfo("BestSolution").ActualName = "BestValidationSolution";
     331      SequentialProcessor bestSolutionProcessor = new SequentialProcessor();
     332      MeanAbsolutePercentageErrorEvaluator mapeEvaluator = new MeanAbsolutePercentageErrorEvaluator();
     333      mapeEvaluator.Name = "ValidationMapeEvaluator";
     334      mapeEvaluator.GetVariableInfo("MAPE").ActualName = "ValidationMAPE";
     335      mapeEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     336      mapeEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     337      CoefficientOfDeterminationEvaluator r2Evaluator = new CoefficientOfDeterminationEvaluator();
     338      r2Evaluator.Name = "ValidationR2Evaluator";
     339      r2Evaluator.GetVariableInfo("R2").ActualName = "ValidationR2";
     340      r2Evaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     341      r2Evaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     342      ProgrammableOperator progOperator = new ProgrammableOperator();
     343      progOperator.RemoveVariableInfo("Result");
     344      progOperator.AddVariableInfo(new HeuristicLab.Core.VariableInfo("EvaluatedSolutions", "", typeof(IntData), VariableKind.In));
     345      progOperator.Code = @"
     346int evalSolutions = EvaluatedSolutions.Data;
     347scope.AddVariable(new Variable(""EvaluatedSolutions"", new IntData(evalSolutions)));
     348";
     349      solutionStorer.AddSubOperator(bestSolutionProcessor);
     350      bestSolutionProcessor.AddSubOperator(mapeEvaluator);
     351      bestSolutionProcessor.AddSubOperator(r2Evaluator);
     352      bestSolutionProcessor.AddSubOperator(progOperator);
     353      return solutionStorer;
    301354    }
    302355
     
    356409      evaluator.Name = "Evaluator (extr.)";
    357410      evaluator.GetVariableInfo("Operator").ActualName = "Evaluator";
     411      MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
     412      validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
     413      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
     414      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
     415      Counter evalCounter = new Counter();
     416      evalCounter.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
     417
    358418      Sorter sorter = new Sorter();
    359419      sorter.GetVariableInfo("Descending").ActualName = "Maximization";
     
    371431      cond.AddSubOperator(manipulator);
    372432      individualSeqProc.AddSubOperator(evaluator);
     433      individualSeqProc.AddSubOperator(validationEvaluator);
     434      individualSeqProc.AddSubOperator(evalCounter);
    373435      selectedProc.AddSubOperator(sorter);
    374436
     
    382444    }
    383445
    384     public IView CreateView() {
     446    public override IView CreateView() {
    385447      return new StandardGpEditor(this);
    386448    }
     449
     450    public override object Clone(IDictionary<Guid, object> clonedObjects) {
     451      StandardGP clone = new StandardGP();
     452      clonedObjects.Add(Guid, clone);
     453      clone.engine = (SequentialEngine.SequentialEngine)Auxiliary.Clone(Engine, clonedObjects);
     454      return clone;
     455    }
     456    #region SetReferences Method
     457    private void SetReferences() {
     458      // SGA
     459      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
     460      // SequentialProcessor in SGA
     461      algorithm = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
     462      // RandomInjector
     463      RandomInjector ri = (RandomInjector)algorithm.SubOperators[1];
     464      setSeedRandomly = ri.GetVariable("SetSeedRandomly").GetValue<BoolData>();
     465      seed = ri.GetVariable("Seed").GetValue<IntData>();
     466      // VariableInjector
     467      VariableInjector vi = (VariableInjector)algorithm.SubOperators[2];
     468      populationSize = vi.GetVariable("PopulationSize").GetValue<IntData>();
     469      parents = vi.GetVariable("Parents").GetValue<IntData>();
     470      maxGenerations = vi.GetVariable("MaxGenerations").GetValue<IntData>();
     471      mutationRate = vi.GetVariable("MutationRate").GetValue<DoubleData>();
     472      elites = vi.GetVariable("Elites").GetValue<IntData>();
     473    }
     474    #endregion
     475
     476    #region Persistence Methods
     477    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
     478      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
     479      node.AppendChild(PersistenceManager.Persist("Engine", Engine, document, persistedObjects));
     480      return node;
     481    }
     482    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
     483      base.Populate(node, restoredObjects);
     484      engine = (SequentialEngine.SequentialEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
     485      SetReferences();
     486    }
     487    #endregion
    387488  }
    388489}
  • branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGpEditor.cs

    r1051 r1052  
    131131    #endregion
    132132
     133
    133134  }
    134135}
Note: See TracChangeset for help on using the changeset viewer.