Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/HeuristicLab.Tests/HeuristicLab.Encodings.LinearLinkageEncoding-3.4/GroupCrossoverTest.cs @ 16824

Last change on this file since 16824 was 16565, checked in by gkronber, 6 years ago

#2520: merged changes from PersistenceOverhaul branch (r16451:16564) into trunk

File size: 3.7 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2019 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.Random;
23using HeuristicLab.Tests;
24using Microsoft.VisualStudio.TestTools.UnitTesting;
25
26namespace HeuristicLab.Encodings.LinearLinkageEncoding.Tests {
27  [TestClass()]
28  public class GroupCrossoverTest {
29    [TestMethod()]
30    [TestCategory("Encodings.LinearLinkage")]
31    [TestProperty("Time", "short")]
32    public void EqualParentsTest() {
33      var random = new FastRandom(0);
34      var parent = LinearLinkage.SingleElementGroups(10);
35      var child = GroupCrossover.Apply(random, parent, parent);
36      Assert.IsTrue(Auxiliary.LinearLinkageIsEqualByPosition(parent, child));
37
38      parent = RandomLinearLinkageCreator.Apply(random, 10);
39      child = GroupCrossover.Apply(random, parent, parent);
40      Assert.IsTrue(Auxiliary.LinearLinkageIsEqualByPosition(parent, child));
41    }
42
43    // Example from paper:
44    // Multi-objective Genetic Algorithms for grouping problems. Korkmaz, E.E. Applied Intelligence (2010) 33: 179.
45    [TestMethod()]
46    [TestCategory("Encodings.LinearLinkage")]
47    [TestProperty("Time", "short")]
48    public void ExampleFromPaperTest() {
49      var parent1 = LinearLinkage.FromEndLinks(new[] { 3, 4, 3, 3, 4 });
50
51      var parent2 = LinearLinkage.FromEndLinks(new[] { 2, 2, 2, 4, 4 });
52
53      CheckGroupCrossover(parent1, parent2, new[] { 3, 4, 2, 3, 4 }, new[] { 0.0, 0.0, 0.0, 0.0 }); // (i)
54      CheckGroupCrossover(parent1, parent2, new[] { 2, 4, 2, 3, 4 }, new[] { 0.0, 0.0, 0.0, 0.9 }); // (iv)
55      CheckGroupCrossover(parent1, parent2, new[] { 3, 2, 2, 3, 4 }, new[] { 0.0, 0.0, 0.9, 0.0 }); // (iii)
56      CheckGroupCrossover(parent1, parent2, new[] { 2, 2, 2, 3, 4 }, new[] { 0.0, 0.0, 0.9, 0.9 }); // (ii)
57      CheckGroupCrossover(parent1, parent2, new[] { 3, 4, 3, 3, 4 }, new[] { 0.0, 0.9 });
58      CheckGroupCrossover(parent1, parent2, new[] { 2, 4, 2, 4, 4 }, new[] { 0.9, 0.0, 0.0 });
59      CheckGroupCrossover(parent1, parent2, new[] { 2, 2, 2, 4, 4 }, new[] { 0.9, 0.0, 0.9 });
60      CheckGroupCrossover(parent1, parent2, new[] { 4, 4, 4, 4, 4 }, new[] { 0.9, 0.9, 0.0, 0.0 });
61      CheckGroupCrossover(parent1, parent2, new[] { 4, 4, 4, 4, 4 }, new[] { 0.9, 0.9, 0.0, 0.9 });
62      CheckGroupCrossover(parent1, parent2, new[] { 2, 4, 2, 4, 4 }, new[] { 0.9, 0.9, 0.9, 0.0 });
63      CheckGroupCrossover(parent1, parent2, new[] { 4, 4, 2, 4, 4 }, new[] { 0.9, 0.9, 0.9, 0.9 });
64    }
65
66    private void CheckGroupCrossover(LinearLinkage parent1, LinearLinkage parent2, int[] expectedllee, double[] randomNumbers) {
67      var expected = LinearLinkage.FromEndLinks(expectedllee);
68      var random = new TestRandom() { DoubleNumbers = randomNumbers };
69      var child = GroupCrossover.Apply(random, parent1, parent2);
70      Assert.IsTrue(Auxiliary.LinearLinkageIsEqualByPosition(expected, child), "Expected [{0}] but was [{1}]!", string.Join(", ", expected), string.Join(", ", child));
71    }
72  }
73}
Note: See TracBrowser for help on using the repository browser.