Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Algorithms.ALPS/3.3/LastLayerCloner.cs @ 13891

Last change on this file since 13891 was 13206, checked in by pfleck, 8 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: 2.7 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 System;
23using System.Linq;
24using HeuristicLab.Common;
25using HeuristicLab.Core;
26using HeuristicLab.Operators;
27using HeuristicLab.Parameters;
28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
29
30namespace HeuristicLab.Algorithms.ALPS {
31  [Item("LastLayerCloner", "An operator that creates a new layer by cloning the current last one.")]
32  [StorableClass]
33  public sealed class LastLayerCloner : SingleSuccessorOperator {
34    public OperatorParameter NewLayerOperatorParameter {
35      get { return (OperatorParameter)Parameters["NewLayerOperator"]; }
36    }
37
38    public IOperator NewLayerOperator {
39      get { return NewLayerOperatorParameter.Value; }
40      set { NewLayerOperatorParameter.Value = value; }
41    }
42
43    [StorableConstructor]
44    private LastLayerCloner(bool deserializing) : base(deserializing) { }
45
46    private LastLayerCloner(LastLayerCloner original, Cloner cloner)
47      : base(original, cloner) {
48    }
49    public override IDeepCloneable Clone(Cloner cloner) {
50      return new LastLayerCloner(this, cloner);
51    }
52
53    public LastLayerCloner()
54      : base() {
55      Parameters.Add(new OperatorParameter("NewLayerOperator", "An operator that is performed on the new layer."));
56    }
57
58    public override IOperation Apply() {
59      var scopes = ExecutionContext.Scope.SubScopes;
60      if (scopes.Count < 1)
61        throw new ArgumentException("At least one layer must exist.");
62
63      var newScope = (IScope)scopes.Last().Clone();
64
65      int scopeNumber;
66      if (int.TryParse(newScope.Name, out scopeNumber))
67        newScope.Name = (scopeNumber + 1).ToString();
68
69      scopes.Add(newScope);
70
71      var next = new OperationCollection(base.Apply());
72      if (NewLayerOperator != null)
73        next.Insert(0, ExecutionContext.CreateOperation(NewLayerOperator, newScope));
74      return next;
75    }
76  }
77}
Note: See TracBrowser for help on using the repository browser.