Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/MultiComponentVector/Moves/Multi/ExhaustiveMultiComponentVectorMoveGenerator.cs @ 13401

Last change on this file since 13401 was 13032, checked in by gkronber, 9 years ago

#1966:

  • removed unused using
  • added/updated license headers
File size: 3.3 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2015 Joseph Helm and 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.Optimization;
25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
26
27namespace HeuristicLab.Encodings.PackingEncoding.MultiComponentVector {
28  [Item("Exhaustive MultiComponentVector Move Generator", "Generates all possible multi component moves from a given multiComponentVector.")]
29  [StorableClass]
30  public class ExhaustiveMultiComponentVectorMoveGenerator : MultiComponentVectorMoveGenerator, IExhaustiveMoveGenerator {
31    [StorableConstructor]
32    protected ExhaustiveMultiComponentVectorMoveGenerator(bool deserializing) : base(deserializing) { }
33    protected ExhaustiveMultiComponentVectorMoveGenerator(ExhaustiveMultiComponentVectorMoveGenerator original, Cloner cloner) : base(original, cloner) { }
34    public ExhaustiveMultiComponentVectorMoveGenerator() : base() { }
35
36    public override IDeepCloneable Clone(Cloner cloner) {
37      return new ExhaustiveMultiComponentVectorMoveGenerator(this, cloner);
38    }
39
40    public static MultiComponentVectorMove[] Apply(MultiComponentVectorEncoding multiComponentVector) {
41      //NrOfMoves = nrOfRotationMoves + nrOfSingleGroupingMoves + nrOfSwapPositionMoves
42      //  nrOfRotationMoves       = nrOfItems
43      //  nrOfSingleGroupingMoves = nrOfItems * (nrOfBins - 1)
44      //  nrOfSwapPositionMoves   = SUM(foreach binNr: !nrOfItemsInBin)
45      int totalMoves =
46        NrOfRotationMoves(multiComponentVector) +
47        NrOfSingleGroupingMoves(multiComponentVector) +
48        NrOfSwapPositionMoves(multiComponentVector) +
49        NrOfChangePositionMoves(multiComponentVector);
50      MultiComponentVectorMove[] moves = new MultiComponentVectorMove[totalMoves];
51      int count = 0;
52      foreach (MultiComponentVectorMove move in GenerateRotationMoves(multiComponentVector)) {
53        moves[count++] = move;
54      }
55      foreach (MultiComponentVectorMove move in GenerateSingleGroupingMoves(multiComponentVector)) {
56        moves[count++] = move;
57      }
58      foreach (MultiComponentVectorMove move in GenerateSwapPositionMoves(multiComponentVector)) {
59        moves[count++] = move;
60      }
61      foreach (MultiComponentVectorMove move in GenerateChangePositionMoves(multiComponentVector)) {
62        moves[count++] = move;
63      }
64      return moves;
65    } 
66
67    protected override MultiComponentVectorMove[] GenerateMoves(MultiComponentVectorEncoding multiComponentVector) {
68      return Apply(multiComponentVector);
69    }
70  }
71}
Note: See TracBrowser for help on using the repository browser.