#region License Information
/* HeuristicLab
* Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
*
* This file is part of HeuristicLab.
*
* HeuristicLab is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* HeuristicLab is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with HeuristicLab. If not, see .
*/
#endregion
using HeuristicLab.Core;
using HeuristicLab.DataAnalysis;
using HeuristicLab.GP.Interfaces;
using HeuristicLab.Operators;
using HeuristicLab.Modeling;
using HeuristicLab.Logging;
using HeuristicLab.Selection;
using HeuristicLab.Data;
namespace HeuristicLab.GP.StructureIdentification {
public static class DefaultStructureIdentificationOperators {
public static IOperator CreateFunctionLibraryInjector() {
CombinedOperator op = new CombinedOperator();
op.Name = "FunctionLibraryInjector";
SequentialProcessor seq = new SequentialProcessor();
seq.AddSubOperator(new FunctionLibraryInjector());
seq.AddSubOperator(new HL3TreeEvaluatorInjector());
op.OperatorGraph.AddOperator(seq);
op.OperatorGraph.InitialOperator = seq;
return op;
}
public static IOperator CreateInitialPopulationEvaluator() {
MeanSquaredErrorEvaluator eval = new MeanSquaredErrorEvaluator();
eval.Name = "Evaluator";
eval.GetVariableInfo("MSE").ActualName = "Quality";
eval.GetVariableInfo("SamplesStart").ActualName = "ActualTrainingSamplesStart";
eval.GetVariableInfo("SamplesEnd").ActualName = "ActualTrainingSamplesEnd";
return eval;
}
public static IOperator CreateEvaluator() {
return CreateInitialPopulationEvaluator();
}
public static IOperator CreateGenerationStepHook() {
CombinedOperator op = new CombinedOperator();
SequentialProcessor seq = new SequentialProcessor();
UniformSequentialSubScopesProcessor subScopesProc = new UniformSequentialSubScopesProcessor();
SequentialProcessor individualProc = new SequentialProcessor();
MeanSquaredErrorEvaluator validationEvaluator = new MeanSquaredErrorEvaluator();
validationEvaluator.Name = "ValidationEvaluator";
validationEvaluator.GetVariableInfo("MSE").ActualName = "ValidationQuality";
validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
individualProc.AddSubOperator(validationEvaluator);
BestSolutionStorer solutionStorer = new BestSolutionStorer();
solutionStorer.GetVariableInfo("BestSolution").ActualName = "BestValidationSolution";
solutionStorer.GetVariableInfo("Quality").ActualName = "ValidationQuality";
BestAverageWorstQualityCalculator validationQualityCalculator = new BestAverageWorstQualityCalculator();
validationQualityCalculator.Name = "BestAverageWorstValidationQualityCalculator";
validationQualityCalculator.GetVariableInfo("Quality").ActualName = "ValidationQuality";
validationQualityCalculator.GetVariableInfo("BestQuality").ActualName = "BestValidationQuality";
validationQualityCalculator.GetVariableInfo("AverageQuality").ActualName = "AverageValidationQuality";
validationQualityCalculator.GetVariableInfo("WorstQuality").ActualName = "WorstValidationQuality";
subScopesProc.AddSubOperator(individualProc);
seq.AddSubOperator(subScopesProc);
seq.AddSubOperator(solutionStorer);
seq.AddSubOperator(validationQualityCalculator);
op.OperatorGraph.AddOperator(seq);
op.OperatorGraph.InitialOperator = seq;
return op;
}
public static IOperator CreatePreparationForPostProcessingOperator() {
SequentialProcessor seq = new SequentialProcessor();
LeftReducer cleanUp = new LeftReducer();
cleanUp.Name = "Reset Population";
seq.AddSubOperator(cleanUp);
SolutionExtractor extractor = new SolutionExtractor();
extractor.GetVariableInfo("Scope").ActualName = "BestValidationSolution";
SequentialSubScopesProcessor seqSubScopeProc = new SequentialSubScopesProcessor();
SequentialProcessor solutionProc = new SequentialProcessor();
seq.AddSubOperator(extractor);
seq.AddSubOperator(seqSubScopeProc);
seqSubScopeProc.AddSubOperator(solutionProc);
HL3TreeEvaluatorInjector evaluatorInjector = new HL3TreeEvaluatorInjector();
evaluatorInjector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData(1000.0)));
evaluatorInjector.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
#region simple evaluators
SimpleEvaluator trainingEvaluator = new SimpleEvaluator();
trainingEvaluator.Name = "TrainingEvaluator";
trainingEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
trainingEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
trainingEvaluator.GetVariableInfo("Values").ActualName = "TrainingValues";
trainingEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
SimpleEvaluator validationEvaluator = new SimpleEvaluator();
validationEvaluator.Name = "ValidationEvaluator";
validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
validationEvaluator.GetVariableInfo("Values").ActualName = "ValidationValues";
validationEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
SimpleEvaluator testEvaluator = new SimpleEvaluator();
testEvaluator.Name = "TestEvaluator";
testEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
testEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
testEvaluator.GetVariableInfo("Values").ActualName = "TestValues";
testEvaluator.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
solutionProc.AddSubOperator(evaluatorInjector);
solutionProc.AddSubOperator(trainingEvaluator);
solutionProc.AddSubOperator(validationEvaluator);
solutionProc.AddSubOperator(testEvaluator);
#endregion
#region variable impacts
// calculate and set variable impacts
VariableNamesExtractor namesExtractor = new VariableNamesExtractor();
namesExtractor.GetVariableInfo("VariableNames").ActualName = "InputVariableNames";
PredictorBuilder predictorBuilder = new PredictorBuilder();
predictorBuilder.GetVariableInfo("TreeEvaluator").ActualName = "ModelAnalysisTreeEvaluator";
solutionProc.AddSubOperator(namesExtractor);
solutionProc.AddSubOperator(predictorBuilder);
#endregion
return seq;
}
public static void PopulateAnalyzerModel(IScope bestModelScope, IAnalyzerModel model) {
model.SetMetaData("EvaluatedSolutions", bestModelScope.GetVariableValue("EvaluatedSolutions", false).Data);
IGeneticProgrammingModel gpModel = bestModelScope.GetVariableValue("FunctionTree", false);
model.SetMetaData("TreeSize", gpModel.Size);
model.SetMetaData("TreeHeight", gpModel.Height);
}
}
}