Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/20/13 10:52:38 (10 years ago)
Author:
mkommend
Message:

#1997: Worked on symbolic data analysis island algorithms:

  • Refactored and removed unnecessary code in symbolic island GA and symbolic island GA evaluator.
  • Added EnumerableItem to ease the passing of rows to the actual evaluator.
  • Added prototype of island offspring selection GA.
  • Corrected build configuration (plugin classes, project settings, ...)
Location:
branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3
Files:
1 added
3 edited

Legend:

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

    r9182 r10142  
    4141      <SpecificVersion>False</SpecificVersion>
    4242      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Analysis-3.3.dll</HintPath>
     43      <Private>False</Private>
    4344    </Reference>
    4445    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    4546      <SpecificVersion>False</SpecificVersion>
    4647      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
     48      <Private>False</Private>
    4749    </Reference>
    4850    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    4951      <SpecificVersion>False</SpecificVersion>
    5052      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
     53      <Private>False</Private>
    5154    </Reference>
    5255    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    5356      <SpecificVersion>False</SpecificVersion>
    5457      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
     58      <Private>False</Private>
    5559    </Reference>
    5660    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    5761      <SpecificVersion>False</SpecificVersion>
    5862      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
     63      <Private>False</Private>
    5964    </Reference>
    6065    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    6166      <SpecificVersion>False</SpecificVersion>
    6267      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll</HintPath>
     68      <Private>False</Private>
    6369    </Reference>
    6470    <Reference Include="HeuristicLab.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    6571      <SpecificVersion>False</SpecificVersion>
    6672      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
     73      <Private>False</Private>
    6774    </Reference>
    6875    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    6976      <SpecificVersion>False</SpecificVersion>
    7077      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
     78      <Private>False</Private>
    7179    </Reference>
    7280    <Reference Include="HeuristicLab.Optimization.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    7381      <SpecificVersion>False</SpecificVersion>
    7482      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization.Operators-3.3.dll</HintPath>
     83      <Private>False</Private>
    7584    </Reference>
    7685    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    7786      <SpecificVersion>False</SpecificVersion>
    7887      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
     88      <Private>False</Private>
    7989    </Reference>
    8090    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    8191      <SpecificVersion>False</SpecificVersion>
    8292      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
     93      <Private>False</Private>
    8394    </Reference>
    8495    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
     
    90101      <SpecificVersion>False</SpecificVersion>
    91102      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.DataAnalysis-3.4.dll</HintPath>
    92     </Reference>
    93     <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    94       <SpecificVersion>False</SpecificVersion>
    95       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.dll</HintPath>
     103      <Private>False</Private>
    96104    </Reference>
    97105    <Reference Include="HeuristicLab.Random-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    98106      <SpecificVersion>False</SpecificVersion>
    99107      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Random-3.3.dll</HintPath>
     108      <Private>False</Private>
    100109    </Reference>
    101110    <Reference Include="HeuristicLab.Selection-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
    102111      <SpecificVersion>False</SpecificVersion>
    103112      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Selection-3.3.dll</HintPath>
     113      <Private>False</Private>
    104114    </Reference>
    105115    <Reference Include="System" />
     
    113123  </ItemGroup>
    114124  <ItemGroup>
     125    <Compile Include="SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm.cs" />
    115126    <Compile Include="ISymbolicDataAnalysisIslandGAEvaluator .cs" />
    116127    <Compile Include="ScopeTreeAssigner.cs" />
     
    129140      <Project>{a51da44f-cb35-4f6f-99f5-2a2e904ab93b}</Project>
    130141      <Name>HeuristicLab.Algorithms.GeneticAlgorithm-3.3</Name>
     142      <Private>False</Private>
     143    </ProjectReference>
     144    <ProjectReference Include="..\..\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm\3.3\HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj">
     145      <Project>{f409dd9e-1e9c-4eb1-aa3a-9f6e987c6e58}</Project>
     146      <Name>HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3</Name>
     147      <Private>False</Private>
     148    </ProjectReference>
     149    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj">
     150      <Project>{3d28463f-ec96-4d82-afee-38be91a0ca00}</Project>
     151      <Name>HeuristicLab.Problems.DataAnalysis.Symbolic-3.4</Name>
     152      <Private>False</Private>
    131153    </ProjectReference>
    132154  </ItemGroup>
  • branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGAEvaluator.cs

    r9182 r10142  
    7171      get { return (ILookupParameter<IntValue>)Parameters[RandomSamplesParameterName]; }
    7272    }
     73
     74    public IValueParameter<EnumerableItem<int>> RowsParameter {
     75      get { return (IValueParameter<EnumerableItem<int>>)Parameters["Rows"]; }
     76    }
    7377    #endregion
    7478
     
    9397      Parameters.Add(new LookupParameter<IntRange>(FixedSamplesPartitionParameterName, "The data partition which is used to calculate the fitness on the fixed samples."));
    9498      Parameters.Add(new LookupParameter<IntValue>(RandomSamplesParameterName, "The number of random samples used for fitness calculation in each island."));
     99      Parameters.Add(new OptionalValueParameter<EnumerableItem<int>>("Rows", "TODO"));
    95100
    96101      EvaluatorParameter.Hidden = true;
     
    99104    public override IOperation Apply() {
    100105      var evaluator = EvaluatorParameter.ActualValue;
    101       var tree = SymbolicExpressionTreeParameter.ActualValue;
    102106      var problemData = ProblemDataParameter.ActualValue;
    103107
    104       var samplesStart = FitnessCalculationPartitionParameter.ActualValue.Start;
    105       var samplesEnd = FitnessCalculationPartitionParameter.ActualValue.End;
    106       var fixedSamplesStart = FixedSamplesPartitionParameter.ActualValue.Start;
    107       var fixedSamplesEnd = FixedSamplesPartitionParameter.ActualValue.End;
     108      var samples = FitnessCalculationPartitionParameter.ActualValue;
     109      var fixedSamples = FixedSamplesPartitionParameter.ActualValue;
    108110      var randomSamples = RandomSamplesParameter.ActualValue.Value;
    109       var maxRandomSamples = samplesEnd - samplesStart - fixedSamplesEnd + fixedSamplesStart;
    110111
    111       //create rows for evaluation
    112       var fixedRows = Enumerable.Range(fixedSamplesStart, fixedSamplesEnd - fixedSamplesStart);
    113       var randomRows = Enumerable.Range(samplesStart, samplesEnd - samplesStart).Where(r => r < fixedSamplesStart || r >= fixedSamplesEnd);
    114       randomRows = randomRows.SampleRandomWithoutRepetition(RandomParameter.ActualValue, randomSamples, maxRandomSamples);
    115       var rows = fixedRows.Concat(randomRows);
     112      //create fixed rows enumerable
     113      var rows = Enumerable.Range(fixedSamples.Start, fixedSamples.Size);
     114      //create randomly chosen rows enumerable
     115      if (randomSamples > 0) {
     116        if (randomSamples > samples.Size - fixedSamples.Size) {
     117          var error = string.Format("Could not select {0} random samples, because there are {1} total samples present from which {2} where used in the fixed partition. Please lower the number of random samples in the algorithm configuration.", randomSamples, samples.Size, fixedSamples.Size);
     118          throw new OperatorExecutionException(this, error);
     119        }
     120        var randomRows = Enumerable.Range(samples.Start, samples.Size).Where(r => r < fixedSamples.Start || r >= fixedSamples.End);
     121        randomRows = randomRows.SampleRandomWithoutRepetition(RandomParameter.ActualValue, randomSamples, samples.Size - fixedSamples.Size);
    116122
     123        rows = rows.Concat(randomRows);
     124      }
     125      //filter out test rows
     126      rows = rows.Where(r => r < problemData.TestPartition.Start && r > problemData.TestPartition.End);
     127
     128      //execution context is created manually to be able to clear the rows parameter easily
     129      RowsParameter.Value = new EnumerableItem<int>(rows);
    117130      var executionContext = new ExecutionContext(ExecutionContext, evaluator, ExecutionContext.Scope);
    118       var fitness = evaluator.Evaluate(executionContext, tree, problemData, rows);
    119       QualityParameter.ActualValue = new DoubleValue(fitness);
    120       return base.Apply();
     131      var successor = evaluator.Execute(executionContext, this.CancellationToken);
     132      RowsParameter.Value = null;
     133      return new OperationCollection(successor, base.Apply());
    121134    }
    122135  }
  • branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs

    r9182 r10142  
    2727using HeuristicLab.Core;
    2828using HeuristicLab.Data;
    29 using HeuristicLab.Operators;
    3029using HeuristicLab.Optimization;
    3130using HeuristicLab.Parameters;
     
    3433using HeuristicLab.Problems.DataAnalysis.Symbolic;
    3534using HeuristicLab.Random;
    36 using HeuristicLab.Selection;
    3735
    3836namespace HeuristicLab.Algorithms.DataAnalysis.Symbolic {
    39   [Item("Symbolic DataAnalysis Island Genetic Algorithm", "A symbolic data analysis island genetic algorithm.")]
     37  [Item("Symbolic Data Analysis Island Genetic Algorithm", "A symbolic data analysis island genetic algorithm.")]
    4038  [Creatable("Data Analysis")]
    4139  [StorableClass]
     
    113111      Parameters.Add(new LookupParameter<ISingleObjectiveEvaluator>(ProblemEvaluatorParameterName, "Internal parameter for name translation", "Evaluator"));
    114112
    115       Elites.Value = 0;
    116       ElitesParameter.Hidden = true;
    117 
    118113      ScopeTreeAssigner<IntRange> fixedSamplesPartitionCreator = new ScopeTreeAssigner<IntRange>();
     114      fixedSamplesPartitionCreator.Name = "Create fixed evaluation partition";
    119115      fixedSamplesPartitionCreator.LeftSideParameter.ActualName = FixedSamplesPartitionParameterName;
    120116      fixedSamplesPartitionCreator.RightSideParameter.ActualName = FixedSamplesPartitionsParameterName;
     
    123119      fixedSamplesPartitionCreator.Successor = insertionPoint.Successor;
    124120      insertionPoint.Successor = fixedSamplesPartitionCreator;
    125 
    126       //necessary to reevaluate elites
    127       var evaluatorPlaceHolder = new Placeholder();
    128       evaluatorPlaceHolder.OperatorParameter.ActualName = "Evaluator";
    129 
    130       UniformSubScopesProcessor subScopesProcessor = new UniformSubScopesProcessor();
    131       subScopesProcessor.Name = "Reevaluate elites";
    132       subScopesProcessor.Parallel.Value = true;
    133       subScopesProcessor.Operator = evaluatorPlaceHolder;
    134       OperatorGraph.Iterate().OfType<RightReducer>().First().Successor = subScopesProcessor;
    135121
    136122      RegisterParameterEvents();
     
    143129      NumberOfIslandsParameter.Value.ValueChanged += (o, ev) => RecalculateFixedSamplesPartitions();
    144130      FixedSamplesParameter.Value.ValueChanged += (o, e) => RecalculateFixedSamplesPartitions();
     131      RandomSamplesParameter.Value.ValueChanged += (o, e) => { ReevaluteElites = RandomSamples != 0; };
    145132      Analyzer.Operators.PropertyChanged += (o, e) => ParameterizeAnalyzers();
    146     }
    147 
    148     protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
    149       ParameterizeProblemEvaluator();
    150       base.Problem_EvaluatorChanged(sender, e);
    151     }
    152 
    153     private void ParameterizeProblemEvaluator() {
    154       var regresssionEvaluator = Problem.Evaluator as ISymbolicDataAnalysisEvaluator<IRegressionProblemData>;
    155       if (regresssionEvaluator != null) {
    156         regresssionEvaluator.EvaluationPartitionParameter.ActualName = FixedSamplesPartitionParameterName;
    157       }
    158       var classificationEvaluator = Problem.Evaluator as ISymbolicDataAnalysisEvaluator<IClassificationProblemData>;
    159       if (classificationEvaluator != null) {
    160         classificationEvaluator.EvaluationPartitionParameter.ActualName = FixedSamplesPartitionParameterName;
    161       }
    162133    }
    163134
     
    173144    }
    174145
    175 
    176     private void ParameterizeAnalyzers() {
     146    protected override void ParameterizeAnalyzers() {
     147      base.ParameterizeAnalyzers();
    177148      foreach (var analyzer in Analyzer.Operators.OfType<ISymbolicDataAnalysisAnalyzer>()) {
    178149        IParameter evaluatorParameter;
     
    193164      RandomSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
    194165      RecalculateFixedSamplesPartitions();
    195       ParameterizeProblemEvaluator();
    196166      base.Problem_Reset(sender, e);
    197167    }
     
    213183        EvaluatorParameter.Value = null;
    214184
    215       ParameterizeProblemEvaluator();
    216185      ParameterizeStochasticOperatorForIsland(EvaluatorParameter.Value);
    217186
     
    231200      var islands = NumberOfIslands.Value;
    232201
    233       int offset = 0;
    234       //fixed samples partition do not overlap
    235       if (((double)totalSamples) / fixedSamples <= islands) {
    236         offset = totalSamples / islands;
    237       } else {
    238         offset = (totalSamples - fixedSamples) / (islands - 1);
    239       }
    240 
     202      int offset = (int)Math.Ceiling(((double)(totalSamples - fixedSamples)) / (islands - 1));
    241203      List<IntRange> partitions = new List<IntRange>();
    242204      for (int i = 0; i < islands; i++) {
Note: See TracChangeset for help on using the changeset viewer.