Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/19/12 10:33:27 (12 years ago)
Author:
mkommend
Message:

#1997: Added first working version of SymbolicDataAnalysisIslandGA.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs

    r9067 r9077  
    2727using HeuristicLab.Core;
    2828using HeuristicLab.Data;
     29using HeuristicLab.Optimization;
    2930using HeuristicLab.Parameters;
    3031using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     32using HeuristicLab.Problems.DataAnalysis;
    3133using HeuristicLab.Problems.DataAnalysis.Symbolic;
     34using HeuristicLab.Random;
    3235
    3336namespace HeuristicLab.Algorithms.DataAnalysis.Symbolic {
     
    3740  public sealed class SymbolicDataAnalysisIslandGeneticAlgorithm : IslandGeneticAlgorithm {
    3841    private const string FixedSamplesParameterName = "NumberOfFixedSamples";
     42    private const string FixedSamplesPartitionParameterName = "FixedSamplesPartition";
    3943    private const string FixedSamplesPartitionsParameterName = "FixedSamplesPartitions";
    4044    private const string RandomSamplesParameterName = "NumberOfRandomSamples";
     45    private const string EvaluatorParameterName = "IslandEvaluator";
     46    private const string ProblemEvaluatorParameterName = "ProblemEvaluator";
    4147
    4248    #region Problem Properties
     
    5965    public IFixedValueParameter<IntValue> RandomSamplesParameter {
    6066      get { return (IFixedValueParameter<IntValue>)Parameters[RandomSamplesParameterName]; }
     67    }
     68    public IValueParameter<ISymbolicDataAnalysisIslandGAEvaluator> EvaluatorParameter {
     69      get { return (IValueParameter<ISymbolicDataAnalysisIslandGAEvaluator>)Parameters[EvaluatorParameterName]; }
     70    }
     71    private ILookupParameter<ISingleObjectiveEvaluator> ProblemEvaluatorParameter {
     72      get { return (ILookupParameter<ISingleObjectiveEvaluator>)Parameters[ProblemEvaluatorParameterName]; }
    6173    }
    6274    #endregion
     
    95107      Parameters.Add(new FixedValueParameter<IntValue>(FixedSamplesParameterName, "The number of fixed samples used for fitness calculation in each island.", new IntValue(0)));
    96108      Parameters.Add(new ValueParameter<ItemArray<IntRange>>(FixedSamplesPartitionsParameterName, "The fixed samples partitions used for fitness calculation for every island."));
    97       Parameters.Add(new FixedValueParameter<IntValue>(RandomSamplesParameterName, "The number of random samples used for fitness calculation in each island..", new IntValue(0)));
     109      Parameters.Add(new FixedValueParameter<IntValue>(RandomSamplesParameterName, "The number of random samples used for fitness calculation in each island.", new IntValue(0)));
     110      Parameters.Add(new OptionalValueParameter<ISymbolicDataAnalysisIslandGAEvaluator>(EvaluatorParameterName, "The evaluator of the algorithm."));
     111      Parameters.Add(new LookupParameter<ISingleObjectiveEvaluator>(ProblemEvaluatorParameterName, "Internal parameter for name translation", "Evaluator"));
     112
     113      ScopeTreeAssigner<IntRange> fixedSamplesPartitionCreator = new ScopeTreeAssigner<IntRange>();
     114      fixedSamplesPartitionCreator.LeftSideParameter.ActualName = FixedSamplesPartitionParameterName;
     115      fixedSamplesPartitionCreator.RightSideParameter.ActualName = FixedSamplesPartitionsParameterName;
     116
     117      RandomCreator insertionPoint = OperatorGraph.Iterate().OfType<RandomCreator>().Skip(1).First();
     118      fixedSamplesPartitionCreator.Successor = insertionPoint.Successor;
     119      insertionPoint.Successor = fixedSamplesPartitionCreator;
    98120
    99121      RegisterParameterEvents();
    100122      RecalculateFixedSamplesPartitions();
     123    }
     124
     125    protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
     126      ParameterizeProblemEvaluator();
     127      base.Problem_EvaluatorChanged(sender, e);
     128    }
     129
     130    private void ParameterizeProblemEvaluator() {
     131      var regresssionEvaluator = Problem.Evaluator as ISymbolicDataAnalysisEvaluator<IRegressionProblemData>;
     132      if (regresssionEvaluator != null) {
     133        regresssionEvaluator.EvaluationPartitionParameter.ActualName = FixedSamplesPartitionParameterName;
     134      }
     135      var classificationEvaluator = Problem.Evaluator as ISymbolicDataAnalysisEvaluator<IClassificationProblemData>;
     136      if (classificationEvaluator != null) {
     137        classificationEvaluator.EvaluationPartitionParameter.ActualName = FixedSamplesPartitionParameterName;
     138      }
     139    }
     140
     141    protected override void ParameterizeSolutionsCreator() {
     142      base.ParameterizeSolutionsCreator();
     143      SolutionsCreator.EvaluatorParameter.ActualName = EvaluatorParameterName;
     144    }
     145
     146    protected override void ParameterizeMainLoop() {
     147      base.ParameterizeMainLoop();
     148      MainLoop.EvaluatorParameter.ActualName = EvaluatorParameterName;
     149      MainLoop.QualityParameter.ActualName = EvaluatorParameter.Value.QualityParameter.ActualName;
    101150    }
    102151
     
    114163    protected override void Problem_Reset(object sender, EventArgs e) {
    115164      RecalculateFixedSamplesPartitions();
     165      ParameterizeProblemEvaluator();
    116166      base.Problem_Reset(sender, e);
    117167    }
    118168
    119169    protected override void OnProblemChanged() {
     170      Problem.FitnessCalculationPartition.ValueChanged += (o, e) => RecalculateFixedSamplesPartitions();
     171
     172      ParameterizeProblemEvaluator();
     173      if (Problem is IRegressionProblem) {
     174        var evaluator = new SymbolicDataAnalysisIslandGAEvaluator<IRegressionProblemData>();
     175        evaluator.FixedSamplesParameter.ActualName = FixedSamplesParameterName;
     176        evaluator.RandomSamplesParameter.ActualName = RandomSamplesParameterName;
     177        EvaluatorParameter.Value = evaluator;
     178      } else if (Problem is IClassificationProblem) {
     179        var evaluator = new SymbolicDataAnalysisIslandGAEvaluator<IClassificationProblemData>();
     180        evaluator.FixedSamplesParameter.ActualName = FixedSamplesParameterName;
     181        evaluator.RandomSamplesParameter.ActualName = RandomSamplesParameterName;
     182        EvaluatorParameter.Value = evaluator;
     183      } else
     184        EvaluatorParameter.Value = null;
     185
     186      ParameterizeStochasticOperatorForIsland(EvaluatorParameter.Value);
     187
     188      RecalculateFixedSamplesPartitions();
    120189      base.OnProblemChanged();
    121       Problem.FitnessCalculationPartition.ValueChanged += (o, e) => RecalculateFixedSamplesPartitions();
    122       RecalculateFixedSamplesPartitions();
    123190    }
    124191
Note: See TracChangeset for help on using the changeset viewer.