Changeset 14128 for branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingSequence/Moves/Insertion
- Timestamp:
- 07/20/16 14:02:36 (8 years ago)
- Location:
- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingSequence/Moves/Insertion
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingSequence/Moves/Insertion/ExhaustiveInsertionMoveGenerator.cs
r13032 r14128 24 24 using HeuristicLab.Common; 25 25 using HeuristicLab.Core; 26 using HeuristicLab.Encodings.PermutationEncoding; 26 27 using HeuristicLab.Optimization; 27 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; … … 39 40 return new ExhaustiveInsertionMoveGenerator(this, cloner); 40 41 } 41 public static IEnumerable<InsertionMove> Generate(P ackingSequenceEncoding PackingSequence, int nrOfBins) {42 for (int i = 0; i < PackingSequence.PackingSequence.Length - 1; i++)43 for (int j = i + 1; j < PackingSequence.PackingSequence.Length; j++) {42 public static IEnumerable<InsertionMove> Generate(Permutation packingSequence, int nrOfBins) { 43 for (int i = 0; i < packingSequence.Length - 1; i++) 44 for (int j = i + 1; j < packingSequence.Length; j++) { 44 45 if (j != i) 45 yield return new InsertionMove(i, j, PackingSequence);46 yield return new InsertionMove(i, j, packingSequence); 46 47 } 47 48 } 48 49 49 public static InsertionMove[] Apply(P ackingSequenceEncoding PackingSequence) {50 public static InsertionMove[] Apply(Permutation packingSequence) { 50 51 int nrOfBins = 0; 51 foreach (int binNr in PackingSequence.PackingSequence) {52 foreach (int binNr in packingSequence) { 52 53 if (binNr > nrOfBins) 53 54 nrOfBins = binNr; … … 55 56 nrOfBins++; 56 57 57 int totalMoves = ( PackingSequence.PackingSequence.Length * (PackingSequence.PackingSequence.Length - 1)) / 2;58 int totalMoves = (packingSequence.Length * (packingSequence.Length - 1)) / 2; 58 59 InsertionMove[] moves = new InsertionMove[totalMoves]; 59 60 int count = 0; 60 foreach (InsertionMove move in Generate( PackingSequence, nrOfBins)) {61 foreach (InsertionMove move in Generate(packingSequence, nrOfBins)) { 61 62 moves[count++] = move; 62 63 } … … 64 65 } 65 66 66 protected override InsertionMove[] GenerateMoves(P ackingSequenceEncoding PackingSequence) {67 return Apply( PackingSequence);67 protected override InsertionMove[] GenerateMoves(Permutation packingSequence) { 68 return Apply(packingSequence); 68 69 } 69 70 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingSequence/Moves/Insertion/InsertionMove.cs
r14046 r14128 32 32 [Item("Insertion Move", "A move on a Sequence vector that is specified by two group-assignment-indexes.")] 33 33 [StorableClass] 34 public class InsertionMove : SequenceMove , IPackingMove{34 public class InsertionMove : SequenceMove { 35 35 [Storable] 36 36 public int Index1 { get; protected set; } … … 45 45 this.Index2 = original.Index2; 46 46 } 47 public InsertionMove(int index1, int index2, P ackingSequenceEncoding PackingSequence)48 : base( PackingSequence) {47 public InsertionMove(int index1, int index2, Permutation packingSequence) 48 : base(packingSequence) { 49 49 Index1 = index1; 50 50 Index2 = index2; … … 55 55 } 56 56 57 public override IPackingSolutionEncoding GetSolutionAfterMove() { 58 PackingSequenceEncoding newSolution = new PackingSequenceEncoding(); 59 60 Permutation original = PackingSequence.PackingSequence; 61 Permutation resultingPermutation = (Permutation)PackingSequence.PackingSequence.Clone(); 57 public override Permutation GetSolutionAfterMove() { 58 Permutation original = PackingSequence; 59 Permutation resultingPermutation = (Permutation)PackingSequence.Clone(); 62 60 int cutIndex, insertIndex, number; 63 61 … … 68 66 int i = 0; // index in new permutation 69 67 int j = 0; // index in old permutation 70 while (i < PackingSequence. PackingSequence.Length) {68 while (i < PackingSequence.Length) { 71 69 if (j == cutIndex) { 72 70 j++; … … 83 81 } 84 82 85 newSolution.PackingSequence = resultingPermutation; 86 return newSolution; 83 return resultingPermutation; 87 84 } 88 85 … … 92 89 93 90 public override SequenceMoveAttribute GetAttribute(double quality) { 94 return new InsertionMoveAttribute(Index1, Index2, PackingSequence .PackingSequence[Index1], PackingSequence.PackingSequence[Index2], quality);91 return new InsertionMoveAttribute(Index1, Index2, PackingSequence[Index1], PackingSequence[Index2], quality); 95 92 } 96 93 … … 103 100 } else 104 101 if (Index1 == attr.Index1 && Index2 == attr.Index2) 105 return true;102 return true; 106 103 } 107 104 return false; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingSequence/Moves/Insertion/InsertionMoveGenerator.cs
r14046 r14128 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Encodings.PermutationEncoding; 25 26 using HeuristicLab.Operators; 26 27 using HeuristicLab.Optimization; … … 37 38 get { return false; } 38 39 } 39 public ILookupParameter<P ackingSequenceEncoding> PackingSequenceParameter {40 get { return (ILookupParameter<P ackingSequenceEncoding>)Parameters["PackingSequence"]; }40 public ILookupParameter<Permutation> PackingSequenceParameter { 41 get { return (ILookupParameter<Permutation>)Parameters["PackingSequence"]; } 41 42 } 42 public ILookupParameter<IPackingMove > PackingMoveParameter {43 get { return (LookupParameter<IPackingMove >)Parameters["PackingMove"]; }43 public ILookupParameter<IPackingMove<Permutation>> PackingMoveParameter { 44 get { return (LookupParameter<IPackingMove<Permutation>>)Parameters["PackingMove"]; } 44 45 } 45 46 protected ScopeParameter CurrentScopeParameter { … … 52 53 public InsertionMoveGenerator() 53 54 : base() { 54 Parameters.Add(new LookupParameter<P ackingSequenceEncoding>("PackingSequence", "The Sequence vector for which moves should be generated."));55 Parameters.Add(new LookupParameter<IPackingMove >("PackingMove", "The moves that should be generated in subscopes."));55 Parameters.Add(new LookupParameter<Permutation>("PackingSequence", "The Sequence vector for which moves should be generated.")); 56 Parameters.Add(new LookupParameter<IPackingMove<Permutation>>("PackingMove", "The moves that should be generated in subscopes.")); 56 57 Parameters.Add(new ScopeParameter("CurrentScope", "The current scope where the moves should be added as subscopes.")); 57 58 } 58 59 59 60 public override IOperation Apply() { 60 P ackingSequenceEncodingps = PackingSequenceParameter.ActualValue;61 Permutation ps = PackingSequenceParameter.ActualValue; 61 62 InsertionMove[] moves = GenerateMoves(ps); 62 63 Scope[] moveScopes = new Scope[moves.Length]; … … 69 70 } 70 71 71 protected abstract InsertionMove[] GenerateMoves(P ackingSequenceEncoding PackingSequence);72 protected abstract InsertionMove[] GenerateMoves(Permutation packingSequence); 72 73 } 73 74 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingSequence/Moves/Insertion/StochasticInsertionMoveGenerator.cs
r13032 r14128 25 25 using HeuristicLab.Core; 26 26 using HeuristicLab.Data; 27 using HeuristicLab.Encodings.PermutationEncoding; 27 28 using HeuristicLab.Optimization; 28 29 using HeuristicLab.Parameters; … … 58 59 } 59 60 60 public static InsertionMove[] Apply(P ackingSequenceEncoding PackingSequence, IRandom random, int sampleSize) {61 public static InsertionMove[] Apply(Permutation packingSequence, IRandom random, int sampleSize) { 61 62 62 63 int nrOfBins = 0; 63 foreach (int binNr in PackingSequence.PackingSequence) {64 foreach (int binNr in packingSequence) { 64 65 if (binNr > nrOfBins) 65 66 nrOfBins = binNr; … … 67 68 nrOfBins++; 68 69 var generatedMoves = new List<InsertionMove>(); 69 var moves = new List<InsertionMove>(ExhaustiveInsertionMoveGenerator.Generate( PackingSequence, nrOfBins));70 var moves = new List<InsertionMove>(ExhaustiveInsertionMoveGenerator.Generate(packingSequence, nrOfBins)); 70 71 int moveCount = moves.Count; 71 72 for (int i = 0; i < sampleSize; i++) { … … 76 77 } 77 78 78 protected override InsertionMove[] GenerateMoves(P ackingSequenceEncoding SwapSequence) {79 protected override InsertionMove[] GenerateMoves(Permutation packingSequence) { 79 80 IRandom random = RandomParameter.ActualValue; 80 return Apply( SwapSequence, random, SampleSizeParameter.ActualValue.Value);81 return Apply(packingSequence, random, SampleSizeParameter.ActualValue.Value); 81 82 } 82 83 }
Note: See TracChangeset
for help on using the changeset viewer.