Changeset 9495 for branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/MultiComponentVector/Moves/ThreeWay/Moves/MCVTripleMove.cs
- Timestamp:
- 05/15/13 22:23:36 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/MultiComponentVector/Moves/ThreeWay/Moves/MCVTripleMove.cs
r9473 r9495 24 24 using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector; 25 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 26 using HeuristicLab.Problems.BinPacking.Interfaces; 26 27 27 28 namespace HeuristicLab.Encodings.PackingEncoding.MultiComponentVector { 28 29 [Item("MCVTripleMove", "A move on a multi component vector that is specified by a rotation-value, two indexes and a groupNr.")] 29 30 [StorableClass] 30 public class MCVTripleMove : MultiComponentVectorMove { 31 public class MCVTripleMove : MultiComponentVectorMove { 31 32 [Storable] 32 public int Index { get; protected set; } 33 public int OldGroup { get; protected set; } 34 [Storable] 35 public int NewGroup { get; protected set; } 36 [Storable] 37 public int Index { get; protected set; } 38 [Storable] 39 public int TargetIndex { get; protected set; } 33 40 [Storable] 34 41 public bool Rotation { get; protected set; } 35 [Storable]36 public int Group { get; protected set; }37 [Storable]38 public int TargetIndex { get; protected set; }39 42 40 43 [StorableConstructor] 41 44 protected MCVTripleMove(bool deserializing) : base(deserializing) { } 42 45 protected MCVTripleMove(MCVTripleMove original, Cloner cloner) 43 : base(original, cloner) { 44 this.Index = original.Index; 46 : base(original, cloner) { 47 this.OldGroup = original.OldGroup; 48 this.NewGroup = original.NewGroup; 49 this.Index = original.Index; 50 this.TargetIndex = original.TargetIndex; 45 51 this.Rotation = original.Rotation; 46 this.Group = original.Group;47 this.TargetIndex = original.TargetIndex;48 52 } 49 public MCVTripleMove(int index, bool rotation, int group, int targetIndex, MultiComponentVectorEncoding multiComponentVector) 50 : base(multiComponentVector) { 51 Index = index; 53 public MCVTripleMove(int oldGroup, int newGroup, int index, int targetIndex, bool rotation, MultiComponentVectorEncoding multiComponentVector) 54 : base(multiComponentVector) { 55 OldGroup = oldGroup; 56 NewGroup = newGroup; 57 Index = index; 58 TargetIndex = targetIndex; 52 59 Rotation = rotation; 53 Group = group;54 TargetIndex = targetIndex;55 60 } 56 61 … … 59 64 } 60 65 61 public override MultiComponentVectorEncoding GetVectorAfterMove() {62 var result = MultiComponentVector ;66 public override IPackingSolutionEncoding GetSolutionAfterMove() { 67 var result = MultiComponentVector.Clone(new Cloner()) as MultiComponentVectorEncoding; 63 68 if (Rotation) 64 result = SingleItemRotationMove.GetVectorAfterMove(MultiComponentVector, Index); 65 if (!MultiComponentVector.PackingInformations[Index].AssignedBin.Equals(Group)) 66 result = SingleGroupingMove.GetVectorAfterMove(result, Index, Group); 67 if (!Index.Equals(TargetIndex)) 68 result = ChangePositionMove.GetVectorAfterMove(result, Index, TargetIndex); 69 result = SingleItemRotationMove.GetVectorAfterMove(result, OldGroup, Index); 70 if (!OldGroup.Equals(NewGroup)) { 71 result = SingleGroupingMove.GetVectorAfterMove(result, OldGroup, Index, NewGroup); 72 int newIndex = result.PackingInformations[NewGroup].Count - 1; 73 if (!newIndex.Equals(TargetIndex)) 74 result = ChangePositionMove.GetVectorAfterMove(result, NewGroup, newIndex, TargetIndex); 75 } else if (!Index.Equals(TargetIndex)) 76 result = ChangePositionMove.GetVectorAfterMove(result, NewGroup, Index, TargetIndex); 69 77 return result; 70 78 } … … 75 83 76 84 public override string ToString() { 77 return "TM(i=" + Index + ",r=" + Rotation + ",g=" + Group + ",ti=" + TargetIndex + ")"; 85 return "TM(og=" + OldGroup + ",ng=" + NewGroup + ",i=" + Index + ",ti=" + TargetIndex + ",r=" + Rotation + ")"; 86 } 87 88 89 public override MultiComponentVectorMoveAttribute GetAttribute(double quality) { 90 return new MCVTripleMoveAttribute(Index, TargetIndex, MultiComponentVector.PackingInformations[OldGroup][Index].ItemID, 91 Rotation, OldGroup, NewGroup, quality); 92 } 93 94 public override bool BelongsToAttribute(MultiComponentVectorMoveAttribute attribute, bool hardCriterion) { 95 MCVTripleMoveAttribute actualAttribute = attribute as MCVTripleMoveAttribute; 96 if (actualAttribute != null) { 97 if (hardCriterion) { 98 if ((Index == actualAttribute.Index && TargetIndex == actualAttribute.TargetIndex) 99 || MultiComponentVector.PackingInformations[OldGroup][Index].ItemID == actualAttribute.ItemID 100 || (OldGroup == actualAttribute.GroupBefore && NewGroup == actualAttribute.GroupAfter)) 101 return true; 102 } else { 103 if ((Index == actualAttribute.Index && TargetIndex == actualAttribute.TargetIndex) 104 && MultiComponentVector.PackingInformations[OldGroup][Index].ItemID == actualAttribute.ItemID 105 && Rotation == actualAttribute.Rotation 106 && (OldGroup == actualAttribute.GroupBefore && NewGroup == actualAttribute.GroupAfter)) 107 return true; 108 } 109 } 110 return false; 78 111 } 79 112 }
Note: See TracChangeset
for help on using the changeset viewer.