Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/IslandGeneticAlgorithmMainLoop.cs @ 3616

Last change on this file since 3616 was 3616, checked in by swagner, 14 years ago

Worked on refactoring of algorithm analysis and tracing (#999)

  • adapted GA and TSP
  • removed stuff related to visualizers
File size: 30.9 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 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.Collections.Generic;
24using System.Linq;
25using HeuristicLab.Analysis;
26using HeuristicLab.Common;
27using HeuristicLab.Core;
28using HeuristicLab.Data;
29using HeuristicLab.Operators;
30using HeuristicLab.Optimization;
31using HeuristicLab.Optimization.Operators;
32using HeuristicLab.Parameters;
33using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
34using HeuristicLab.PluginInfrastructure;
35using HeuristicLab.Selection;
36
37namespace HeuristicLab.Algorithms.GeneticAlgorithm {
38  /// <summary>
39  /// An island genetic algorithm main loop operator.
40  /// </summary>
41  [Item("IslandGeneticAlgorithmMainLoop", "An island genetic algorithm main loop operator.")]
42  [StorableClass]
43  public sealed class IslandGeneticAlgorithmMainLoop : AlgorithmOperator {
44    #region Parameter Properties
45    public ValueLookupParameter<IRandom> RandomParameter {
46      get { return (ValueLookupParameter<IRandom>)Parameters["Random"]; }
47    }
48    public ValueLookupParameter<BoolValue> MaximizationParameter {
49      get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
50    }
51    public SubScopesLookupParameter<DoubleValue> QualityParameter {
52      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
53    }
54    public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
55      get { return (ValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
56    }
57    public ValueLookupParameter<IntValue> NumberOfIslandsParameter {
58      get { return (ValueLookupParameter<IntValue>)Parameters["NumberOfIslands"]; }
59    }
60    public ValueLookupParameter<IntValue> MigrationIntervalParameter {
61      get { return (ValueLookupParameter<IntValue>)Parameters["MigrationInterval"]; }
62    }
63    public ValueLookupParameter<PercentValue> MigrationRateParameter {
64      get { return (ValueLookupParameter<PercentValue>)Parameters["MigrationRate"]; }
65    }
66    public ValueLookupParameter<IOperator> MigratorParameter {
67      get { return (ValueLookupParameter<IOperator>)Parameters["Migrator"]; }
68    }
69    public ValueLookupParameter<IOperator> EmigrantsSelectorParameter {
70      get { return (ValueLookupParameter<IOperator>)Parameters["EmigrantsSelector"]; }
71    }
72    public ValueLookupParameter<IOperator> ImmigrationReplacerParameter {
73      get { return (ValueLookupParameter<IOperator>)Parameters["ImmigrationReplacer"]; }
74    }
75    public ValueLookupParameter<IntValue> PopulationSizeParameter {
76      get { return (ValueLookupParameter<IntValue>)Parameters["PopulationSize"]; }
77    }
78    public ValueLookupParameter<IntValue> MaximumGenerationsParameter {
79      get { return (ValueLookupParameter<IntValue>)Parameters["MaximumGenerations"]; }
80    }
81    public ValueLookupParameter<IOperator> SelectorParameter {
82      get { return (ValueLookupParameter<IOperator>)Parameters["Selector"]; }
83    }
84    public ValueLookupParameter<IOperator> CrossoverParameter {
85      get { return (ValueLookupParameter<IOperator>)Parameters["Crossover"]; }
86    }
87    public ValueLookupParameter<PercentValue> MutationProbabilityParameter {
88      get { return (ValueLookupParameter<PercentValue>)Parameters["MutationProbability"]; }
89    }
90    public ValueLookupParameter<IOperator> MutatorParameter {
91      get { return (ValueLookupParameter<IOperator>)Parameters["Mutator"]; }
92    }
93    public ValueLookupParameter<IOperator> EvaluatorParameter {
94      get { return (ValueLookupParameter<IOperator>)Parameters["Evaluator"]; }
95    }
96    public ValueLookupParameter<IntValue> ElitesParameter {
97      get { return (ValueLookupParameter<IntValue>)Parameters["Elites"]; }
98    }
99    public ValueLookupParameter<ResultCollection> ResultsParameter {
100      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
101    }
102    public ValueLookupParameter<IOperator> AnalyzerParameter {
103      get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
104    }
105    #endregion
106
107    [StorableConstructor]
108    private IslandGeneticAlgorithmMainLoop(bool deserializing) : base() { }
109    public IslandGeneticAlgorithmMainLoop()
110      : base() {
111      #region Create parameters
112      Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
113      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
114      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
115      Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
116      Parameters.Add(new ValueLookupParameter<IntValue>("NumberOfIslands", "The number of islands."));
117      Parameters.Add(new ValueLookupParameter<IntValue>("MigrationInterval", "The number of generations that should pass between migration phases."));
118      Parameters.Add(new ValueLookupParameter<PercentValue>("MigrationRate", "The proportion of individuals that should migrate between the islands."));
119      Parameters.Add(new ValueLookupParameter<IOperator>("Migrator", "The migration strategy."));
120      Parameters.Add(new ValueLookupParameter<IOperator>("EmigrantsSelector", "Selects the individuals that will be migrated."));
121      Parameters.Add(new ValueLookupParameter<IOperator>("ImmigrationReplacer", "Replaces some of the original population with the immigrants."));
122      Parameters.Add(new ValueLookupParameter<IntValue>("PopulationSize", "The size of the population of solutions."));
123      Parameters.Add(new ValueLookupParameter<IntValue>("MaximumGenerations", "The maximum number of generations that the algorithm should process."));
124      Parameters.Add(new ValueLookupParameter<IOperator>("Selector", "The operator used to select solutions for reproduction."));
125      Parameters.Add(new ValueLookupParameter<IOperator>("Crossover", "The operator used to cross solutions."));
126      Parameters.Add(new ValueLookupParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution."));
127      Parameters.Add(new ValueLookupParameter<IOperator>("Mutator", "The operator used to mutate solutions."));
128      Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions."));
129      Parameters.Add(new ValueLookupParameter<IntValue>("Elites", "The numer of elite solutions which are kept in each generation."));
130      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The results collection to store the results."));
131      Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each island."));
132      #endregion
133
134      #region Create operators
135      VariableCreator variableCreator = new VariableCreator();
136      UniformSubScopesProcessor uniformSubScopesProcessor0 = new UniformSubScopesProcessor();
137      VariableCreator islandVariableCreator = new VariableCreator();
138      BestQualityMemorizer islandBestQualityMemorizer1 = new BestQualityMemorizer();
139      BestAverageWorstQualityCalculator islandBestAverageWorstQualityCalculator1 = new BestAverageWorstQualityCalculator();
140      DataTableValuesCollector islandDataTableValuesCollector1 = new DataTableValuesCollector();
141      QualityDifferenceCalculator islandQualityDifferenceCalculator1 = new QualityDifferenceCalculator();
142      Placeholder islandAnalyzer1 = new Placeholder();
143      ResultsCollector islandResultsCollector = new ResultsCollector();
144      BestQualityMemorizer bestQualityMemorizer1 = new BestQualityMemorizer();
145      BestQualityMemorizer bestQualityMemorizer2 = new BestQualityMemorizer();
146      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator1 = new BestAverageWorstQualityCalculator();
147      DataTableValuesCollector dataTableValuesCollector1 = new DataTableValuesCollector();
148      QualityDifferenceCalculator qualityDifferenceCalculator1 = new QualityDifferenceCalculator();
149      ResultsCollector resultsCollector = new ResultsCollector();
150      UniformSubScopesProcessor uniformSubScopesProcessor1 = new UniformSubScopesProcessor();
151      Placeholder selector = new Placeholder();
152      SubScopesProcessor subScopesProcessor1 = new SubScopesProcessor();
153      ChildrenCreator childrenCreator = new ChildrenCreator();
154      UniformSubScopesProcessor uniformSubScopesProcessor2 = new UniformSubScopesProcessor();
155      Placeholder crossover = new Placeholder();
156      StochasticBranch stochasticBranch = new StochasticBranch();
157      Placeholder mutator = new Placeholder();
158      Placeholder evaluator = new Placeholder();
159      SubScopesRemover subScopesRemover = new SubScopesRemover();
160      SubScopesProcessor subScopesProcessor2 = new SubScopesProcessor();
161      BestSelector bestSelector = new BestSelector();
162      RightReducer rightReducer = new RightReducer();
163      MergingReducer mergingReducer = new MergingReducer();
164      BestQualityMemorizer islandBestQualityMemorizer2 = new BestQualityMemorizer();
165      BestAverageWorstQualityCalculator islandBestAverageWorstQualityCalculator2 = new BestAverageWorstQualityCalculator();
166      DataTableValuesCollector islandDataTableValuesCollector2 = new DataTableValuesCollector();
167      QualityDifferenceCalculator islandQualityDifferenceCalculator2 = new QualityDifferenceCalculator();
168      Placeholder islandAnalyzer2 = new Placeholder();
169      IntCounter generationsCounter = new IntCounter();
170      IntCounter generationsSinceLastMigrationCounter = new IntCounter();
171      Comparator migrationComparator = new Comparator();
172      ConditionalBranch migrationBranch = new ConditionalBranch();
173      Assigner resetGenerationsSinceLastMigrationAssigner = new Assigner();
174      IntCounter migrationsCounter = new IntCounter();
175      UniformSubScopesProcessor uniformSubScopesProcessor3 = new UniformSubScopesProcessor();
176      Placeholder emigrantsSelector = new Placeholder();
177      Placeholder migrator = new Placeholder();
178      UniformSubScopesProcessor uniformSubScopesProcessor4 = new UniformSubScopesProcessor();
179      Placeholder immigrationReplacer = new Placeholder();
180      Comparator generationsComparator = new Comparator();
181      BestQualityMemorizer bestQualityMemorizer3 = new BestQualityMemorizer();
182      BestQualityMemorizer bestQualityMemorizer4 = new BestQualityMemorizer();
183      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator2 = new BestAverageWorstQualityCalculator();
184      DataTableValuesCollector dataTableValuesCollector2 = new DataTableValuesCollector();
185      QualityDifferenceCalculator qualityDifferenceCalculator2 = new QualityDifferenceCalculator();
186      ConditionalBranch generationsTerminationCondition = new ConditionalBranch();
187
188      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Migrations", new IntValue(0)));
189      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("GenerationsSinceLastMigration", new IntValue(0)));
190      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0)));
191
192      islandVariableCreator.CollectedValues.Add(new ValueParameter<ResultCollection>("IslandResults", new ResultCollection()));
193
194      islandBestQualityMemorizer1.BestQualityParameter.ActualName = "BestQuality";
195      islandBestQualityMemorizer1.MaximizationParameter.ActualName = MaximizationParameter.Name;
196      islandBestQualityMemorizer1.QualityParameter.ActualName = QualityParameter.Name;
197
198      islandBestAverageWorstQualityCalculator1.AverageQualityParameter.ActualName = "CurrentAverageQuality";
199      islandBestAverageWorstQualityCalculator1.BestQualityParameter.ActualName = "CurrentBestQuality";
200      islandBestAverageWorstQualityCalculator1.MaximizationParameter.ActualName = MaximizationParameter.Name;
201      islandBestAverageWorstQualityCalculator1.QualityParameter.ActualName = QualityParameter.Name;
202      islandBestAverageWorstQualityCalculator1.WorstQualityParameter.ActualName = "CurrentWorstQuality";
203
204      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
205      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
206      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
207      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
208      islandDataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
209      islandDataTableValuesCollector1.DataTableParameter.ActualName = "Qualities";
210
211      islandQualityDifferenceCalculator1.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
212      islandQualityDifferenceCalculator1.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
213      islandQualityDifferenceCalculator1.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
214      islandQualityDifferenceCalculator1.SecondQualityParameter.ActualName = "BestQuality";
215
216      islandAnalyzer1.Name = "Analyzer";
217      islandAnalyzer1.OperatorParameter.ActualName = "Analyzer";
218
219      islandResultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
220      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
221      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
222      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
223      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
224      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
225      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Absolute Difference of Best Known Quality to Best Quality", null, "AbsoluteDifferenceBestKnownToBest"));
226      islandResultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Relative Difference of Best Known Quality to Best Quality", null, "RelativeDifferenceBestKnownToBest"));
227      islandResultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Qualities"));
228      islandResultsCollector.ResultsParameter.ActualName = "IslandResults";
229
230      bestQualityMemorizer1.BestQualityParameter.ActualName = "BestQuality";
231      bestQualityMemorizer1.MaximizationParameter.ActualName = MaximizationParameter.Name;
232      bestQualityMemorizer1.QualityParameter.ActualName = "BestQuality";
233
234      bestQualityMemorizer2.BestQualityParameter.ActualName = BestKnownQualityParameter.Name;
235      bestQualityMemorizer2.MaximizationParameter.ActualName = MaximizationParameter.Name;
236      bestQualityMemorizer2.QualityParameter.ActualName = "BestQuality";
237
238      bestAverageWorstQualityCalculator1.AverageQualityParameter.ActualName = "CurrentAverageBestQuality";
239      bestAverageWorstQualityCalculator1.BestQualityParameter.ActualName = "CurrentBestBestQuality";
240      bestAverageWorstQualityCalculator1.MaximizationParameter.ActualName = MaximizationParameter.Name;
241      bestAverageWorstQualityCalculator1.QualityParameter.ActualName = "CurrentBestQuality";
242      bestAverageWorstQualityCalculator1.WorstQualityParameter.ActualName = "CurrentWorstBestQuality";
243
244      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best BestQuality", null, "CurrentBestBestQuality"));
245      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average BestQuality", null, "CurrentAverageBestQuality"));
246      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst BestQuality", null, "CurrentWorstBestQuality"));
247      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
248      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
249      dataTableValuesCollector1.DataTableParameter.ActualName = "BestQualities";
250
251      qualityDifferenceCalculator1.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
252      qualityDifferenceCalculator1.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
253      qualityDifferenceCalculator1.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
254      qualityDifferenceCalculator1.SecondQualityParameter.ActualName = "BestQuality";
255
256      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Migrations"));
257      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best BestQuality", null, "CurrentBestBestQuality"));
258      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average BestQuality", null, "CurrentAverageBestQuality"));
259      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst BestQuality", null, "CurrentWorstBestQuality"));
260      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
261      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
262      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Absolute Difference of Best Known Quality to Best Quality", null, "AbsoluteDifferenceBestKnownToBest"));
263      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Relative Difference of Best Known Quality to Best Quality", null, "RelativeDifferenceBestKnownToBest"));
264      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("BestQualities"));
265      resultsCollector.CollectedValues.Add(new SubScopesLookupParameter<ResultCollection>("IslandResults", "Result set for each island"));
266      resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;
267
268      selector.Name = "Selector (placeholder)";
269      selector.OperatorParameter.ActualName = SelectorParameter.Name;
270
271      childrenCreator.ParentsPerChild = new IntValue(2);
272
273      crossover.Name = "Crossover (placeholder)";
274      crossover.OperatorParameter.ActualName = CrossoverParameter.Name;
275
276      stochasticBranch.ProbabilityParameter.ActualName = MutationProbabilityParameter.Name;
277      stochasticBranch.RandomParameter.ActualName = RandomParameter.Name;
278
279      mutator.Name = "Mutator (placeholder)";
280      mutator.OperatorParameter.ActualName = MutatorParameter.Name;
281
282      evaluator.Name = "Evaluator (placeholder)";
283      evaluator.OperatorParameter.ActualName = EvaluatorParameter.Name;
284
285      subScopesRemover.RemoveAllSubScopes = true;
286
287      bestSelector.CopySelected = new BoolValue(false);
288      bestSelector.MaximizationParameter.ActualName = MaximizationParameter.Name;
289      bestSelector.NumberOfSelectedSubScopesParameter.ActualName = ElitesParameter.Name;
290      bestSelector.QualityParameter.ActualName = QualityParameter.Name;
291
292      islandBestQualityMemorizer2.BestQualityParameter.ActualName = "BestQuality";
293      islandBestQualityMemorizer2.MaximizationParameter.ActualName = MaximizationParameter.Name;
294      islandBestQualityMemorizer2.QualityParameter.ActualName = QualityParameter.Name;
295
296      islandBestAverageWorstQualityCalculator2.AverageQualityParameter.ActualName = "CurrentAverageQuality";
297      islandBestAverageWorstQualityCalculator2.BestQualityParameter.ActualName = "CurrentBestQuality";
298      islandBestAverageWorstQualityCalculator2.MaximizationParameter.ActualName = MaximizationParameter.Name;
299      islandBestAverageWorstQualityCalculator2.QualityParameter.ActualName = QualityParameter.Name;
300      islandBestAverageWorstQualityCalculator2.WorstQualityParameter.ActualName = "CurrentWorstQuality";
301
302      islandDataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
303      islandDataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
304      islandDataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
305      islandDataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
306      islandDataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
307      islandDataTableValuesCollector2.DataTableParameter.ActualName = "Qualities";
308
309      islandQualityDifferenceCalculator2.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
310      islandQualityDifferenceCalculator2.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
311      islandQualityDifferenceCalculator2.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
312      islandQualityDifferenceCalculator2.SecondQualityParameter.ActualName = "BestQuality";
313
314      islandAnalyzer2.Name = "Analyzer";
315      islandAnalyzer2.OperatorParameter.ActualName = "Analyzer";
316
317      generationsCounter.Name = "Generations + 1";
318      generationsCounter.Increment = new IntValue(1);
319      generationsCounter.ValueParameter.ActualName = "Generations";
320
321      generationsSinceLastMigrationCounter.Name = "GenerationsSinceLastMigration + 1";
322      generationsSinceLastMigrationCounter.ValueParameter.ActualName = "GenerationsSinceLastMigration";
323      generationsSinceLastMigrationCounter.Increment = new IntValue(1);
324
325      migrationComparator.Name = "GenerationsSinceLastMigration = MigrationInterval ?";
326      migrationComparator.LeftSideParameter.ActualName = "GenerationsSinceLastMigration";
327      migrationComparator.Comparison = new Comparison(ComparisonType.Equal);
328      migrationComparator.RightSideParameter.ActualName = MigrationIntervalParameter.Name;
329      migrationComparator.ResultParameter.ActualName = "Migrate";
330
331      migrationBranch.Name = "Migrate?";
332      migrationBranch.ConditionParameter.ActualName = "Migrate";
333
334      resetGenerationsSinceLastMigrationAssigner.Name = "Reset GenerationsSinceLastMigration";
335      resetGenerationsSinceLastMigrationAssigner.LeftSideParameter.ActualName = "GenerationsSinceLastMigration";
336      resetGenerationsSinceLastMigrationAssigner.RightSideParameter.Value = new IntValue(0);
337
338      migrationsCounter.Name = "Migrations + 1";
339      migrationsCounter.IncrementParameter.Value = new IntValue(1);
340      migrationsCounter.ValueParameter.ActualName = "Migrations";
341
342      emigrantsSelector.Name = "Emigrants Selector (placeholder)";
343      emigrantsSelector.OperatorParameter.ActualName = EmigrantsSelectorParameter.Name;
344
345      migrator.Name = "Migrator (placeholder)";
346      migrator.OperatorParameter.ActualName = MigratorParameter.Name;
347
348      immigrationReplacer.Name = "Immigration Replacer (placeholder)";
349      immigrationReplacer.OperatorParameter.ActualName = ImmigrationReplacerParameter.Name;
350
351      generationsComparator.Name = "Generations >= MaximumGenerations ?";
352      generationsComparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
353      generationsComparator.LeftSideParameter.ActualName = "Generations";
354      generationsComparator.ResultParameter.ActualName = "TerminateGenerations";
355      generationsComparator.RightSideParameter.ActualName = MaximumGenerationsParameter.Name;
356
357      bestQualityMemorizer3.BestQualityParameter.ActualName = "BestQuality";
358      bestQualityMemorizer3.MaximizationParameter.ActualName = MaximizationParameter.Name;
359      bestQualityMemorizer3.QualityParameter.ActualName = "BestQuality";
360
361      bestQualityMemorizer4.BestQualityParameter.ActualName = BestKnownQualityParameter.Name;
362      bestQualityMemorizer4.MaximizationParameter.ActualName = MaximizationParameter.Name;
363      bestQualityMemorizer4.QualityParameter.ActualName = "BestQuality";
364
365      bestAverageWorstQualityCalculator2.AverageQualityParameter.ActualName = "CurrentAverageBestQuality";
366      bestAverageWorstQualityCalculator2.BestQualityParameter.ActualName = "CurrentBestBestQuality";
367      bestAverageWorstQualityCalculator2.MaximizationParameter.ActualName = MaximizationParameter.Name;
368      bestAverageWorstQualityCalculator2.QualityParameter.ActualName = "CurrentBestQuality";
369      bestAverageWorstQualityCalculator2.WorstQualityParameter.ActualName = "CurrentWorstBestQuality";
370
371      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best BestQuality", null, "CurrentBestBestQuality"));
372      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average BestQuality", null, "CurrentAverageBestQuality"));
373      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst BestQuality", null, "CurrentWorstBestQuality"));
374      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
375      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, BestKnownQualityParameter.Name));
376      dataTableValuesCollector2.DataTableParameter.ActualName = "BestQualities";
377
378      qualityDifferenceCalculator2.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
379      qualityDifferenceCalculator2.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
380      qualityDifferenceCalculator2.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
381      qualityDifferenceCalculator2.SecondQualityParameter.ActualName = "BestQuality";
382
383      generationsTerminationCondition.Name = "Terminate?";
384      generationsTerminationCondition.ConditionParameter.ActualName = "TerminateGenerations";
385      #endregion
386
387      #region Create operator graph
388      OperatorGraph.InitialOperator = variableCreator;
389      variableCreator.Successor = uniformSubScopesProcessor0;
390      uniformSubScopesProcessor0.Operator = islandVariableCreator;
391      uniformSubScopesProcessor0.Successor = bestQualityMemorizer1;
392      islandVariableCreator.Successor = islandBestQualityMemorizer1;
393      islandBestQualityMemorizer1.Successor = islandBestAverageWorstQualityCalculator1;
394      islandBestAverageWorstQualityCalculator1.Successor = islandDataTableValuesCollector1;
395      islandDataTableValuesCollector1.Successor = islandQualityDifferenceCalculator1;
396      islandQualityDifferenceCalculator1.Successor = islandAnalyzer1;
397      islandAnalyzer1.Successor = islandResultsCollector;
398      bestQualityMemorizer1.Successor = bestQualityMemorizer2;
399      bestQualityMemorizer2.Successor = bestAverageWorstQualityCalculator1;
400      bestAverageWorstQualityCalculator1.Successor = dataTableValuesCollector1;
401      dataTableValuesCollector1.Successor = qualityDifferenceCalculator1;
402      qualityDifferenceCalculator1.Successor = resultsCollector;
403      resultsCollector.Successor = uniformSubScopesProcessor1;
404      uniformSubScopesProcessor1.Operator = selector;
405      uniformSubScopesProcessor1.Successor = generationsCounter;
406      selector.Successor = subScopesProcessor1;
407      subScopesProcessor1.Operators.Add(new EmptyOperator());
408      subScopesProcessor1.Operators.Add(childrenCreator);
409      subScopesProcessor1.Successor = subScopesProcessor2;
410      childrenCreator.Successor = uniformSubScopesProcessor2;
411      uniformSubScopesProcessor2.Operator = crossover;
412      uniformSubScopesProcessor2.Successor = null;
413      crossover.Successor = stochasticBranch;
414      stochasticBranch.FirstBranch = mutator;
415      stochasticBranch.SecondBranch = null;
416      stochasticBranch.Successor = evaluator;
417      mutator.Successor = null;
418      evaluator.Successor = subScopesRemover;
419      subScopesRemover.Successor = null;
420      subScopesProcessor2.Operators.Add(bestSelector);
421      subScopesProcessor2.Operators.Add(new EmptyOperator());
422      subScopesProcessor2.Successor = mergingReducer;
423      bestSelector.Successor = rightReducer;
424      rightReducer.Successor = null;
425      mergingReducer.Successor = islandBestQualityMemorizer2;
426      islandBestQualityMemorizer2.Successor = islandBestAverageWorstQualityCalculator2;
427      islandBestAverageWorstQualityCalculator2.Successor = islandDataTableValuesCollector2;
428      islandDataTableValuesCollector2.Successor = islandQualityDifferenceCalculator2;
429      islandQualityDifferenceCalculator2.Successor = islandAnalyzer2;
430      islandAnalyzer2.Successor = null;
431      generationsCounter.Successor = generationsSinceLastMigrationCounter;
432      generationsSinceLastMigrationCounter.Successor = migrationComparator;
433      migrationComparator.Successor = migrationBranch;
434      migrationBranch.TrueBranch = resetGenerationsSinceLastMigrationAssigner;
435      migrationBranch.FalseBranch = null;
436      migrationBranch.Successor = generationsComparator;
437      resetGenerationsSinceLastMigrationAssigner.Successor = migrationsCounter;
438      migrationsCounter.Successor = uniformSubScopesProcessor3;
439      uniformSubScopesProcessor3.Operator = emigrantsSelector;
440      uniformSubScopesProcessor3.Successor = migrator;
441      migrator.Successor = uniformSubScopesProcessor4;
442      uniformSubScopesProcessor4.Operator = immigrationReplacer;
443      uniformSubScopesProcessor4.Successor = null;
444      generationsComparator.Successor = bestQualityMemorizer3;
445      bestQualityMemorizer3.Successor = bestQualityMemorizer4;
446      bestQualityMemorizer4.Successor = bestAverageWorstQualityCalculator2;
447      bestAverageWorstQualityCalculator2.Successor = dataTableValuesCollector2;
448      dataTableValuesCollector2.Successor = qualityDifferenceCalculator2;
449      qualityDifferenceCalculator2.Successor = generationsTerminationCondition;
450      generationsTerminationCondition.TrueBranch = null;
451      generationsTerminationCondition.FalseBranch = uniformSubScopesProcessor1;
452      generationsTerminationCondition.Successor = null;
453      #endregion
454    }
455  }
456}
Note: See TracBrowser for help on using the repository browser.