Free cookie consent management tool by TermsFeed Policy Generator

source: branches/ProblemRefactoring/HeuristicLab.Algorithms.ALPS/3.3/MatingPoolCreator.cs @ 15301

Last change on this file since 15301 was 13206, checked in by pfleck, 9 years ago

#2269 Fixed typos and renamed some stuff suggested by ascheibe and adapted project for mono.

  • The initialization of layer 0 is done similar to other algorithms where general initialization is done in the algorithm itself and variables used and produced during the main-loop is initialized in the main-loop-operator.
  • The GeneralizedRankSelector is used as default selector because it generally works the best (rank compensates the large quality range of multiple layers and high selection pressure via pressure-parameter). Proportional selection performs very badly because the selection pressure is too low for ALPS.
  • Concerning ReduceToPopulationSize in the EldersEmigrator, the behavior it is not completely clear in the original paper. Reducing the population to the population size seems the more logical way, therefore it is default. An empty layer could happen in extremely rare situations, but it never happens to me so far.
  • Concerning opening a new layer, when taking a closer look at the ages, all individual tends to be as old as possible, in the standard version with AgeInheritance==1. That means they usually get too old in exactly after the generation the AgeLimits for the current last layer states. This way it is not necessary to check if any individual becomes too old for the current last layer. For AgeInheritance<1 it can happen that there would actually be no need to open a new layer; however, it will be opened anyway.
File size: 3.3 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using HeuristicLab.Common;
23using HeuristicLab.Core;
24using HeuristicLab.Data;
25using HeuristicLab.Operators;
26using HeuristicLab.Parameters;
27using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
28
29namespace HeuristicLab.Algorithms.ALPS {
30  [Item("MatingPoolCreator", "An operator which creates mating pools based on a set of sub-populations. For each sub-population, the individuals from the previous sub-population are copied into the current sub-population.")]
31  [StorableClass]
32  public sealed class MatingPoolCreator : SingleSuccessorOperator {
33    public IValueLookupParameter<IntValue> MatingPoolRangeParameter {
34      get { return (IValueLookupParameter<IntValue>)Parameters["MatingPoolRange"]; }
35    }
36
37    [StorableConstructor]
38    private MatingPoolCreator(bool deserializing)
39      : base(deserializing) { }
40    private MatingPoolCreator(MatingPoolCreator original, Cloner cloner)
41      : base(original, cloner) { }
42    public override IDeepCloneable Clone(Cloner cloner) {
43      return new MatingPoolCreator(this, cloner);
44    }
45    public MatingPoolCreator()
46      : base() {
47      Parameters.Add(new ValueLookupParameter<IntValue>("MatingPoolRange", "The range of sub-populations used for creating a mating pool. (1 = current + previous sub-population)", new IntValue(1)));
48    }
49
50    /// <summary>
51    /// Copies the subscopes of the n previous scopes into the current scope. (default n = 1)
52    /// <pre>
53    ///          __ scope __              __ scope __
54    ///         /     |     \            /     |     \
55    ///       Pop1   Pop2   Pop3  =>   Pop1   Pop2   Pop3
56    ///       /|\    /|\    /|\         /|\   /|\    /|\
57    ///       ABC    DEF    GHI         ABC   DEF    GHI
58    ///                                       ABC    DEF
59    /// </pre>
60    /// </summary>
61    /// <returns>The next operation.</returns>
62    public override IOperation Apply() {
63      var subScopes = ExecutionContext.Scope.SubScopes;
64      int range = MatingPoolRangeParameter.ActualValue.Value;
65
66      for (int targetIndex = subScopes.Count - 1; targetIndex > 0; targetIndex--) {
67        var targetScope = subScopes[targetIndex];
68        for (int n = 1; (n <= range) && (targetIndex - n >= 0); n++) {
69          var prevScope = subScopes[targetIndex - n];
70          var individuals = prevScope.SubScopes;
71          foreach (var individual in individuals) {
72            targetScope.SubScopes.Add((IScope)individual.Clone());
73          }
74        }
75      }
76
77      return base.Apply();
78    }
79  }
80}
Note: See TracBrowser for help on using the repository browser.