Changeset 3233 for trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/PreventRemovalInversionMoveTabuChecker.cs
- Timestamp:
- 03/30/10 14:52:30 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/PreventRemovalInversionMoveTabuChecker.cs
r3232 r3233 65 65 Permutation permutation = PermutationParameter.ActualValue; 66 66 int length = permutation.Length; 67 int E1S = permutation.GetCircular(move.Index1 - 1); 68 int E1T = permutation[move.Index1]; 69 int E2S = permutation[move.Index2]; 70 int E2T = permutation.GetCircular(move.Index2 + 1); 71 bool isTabu = (move.Index2 - move.Index1 >= length - 2); // doesn't change the solution 72 if (!isTabu) { 73 foreach (IItem tabuMove in tabuList) { 74 InversionMoveAttribute attribute = (tabuMove as InversionMoveAttribute); 75 if (attribute != null) { 76 // if previously added Edge1Source-Edge2Source is deleted 77 if (attribute.Edge1Source == E1S && attribute.Edge2Source == E1T || attribute.Edge1Source == E1T && attribute.Edge2Source == E1S 78 || attribute.Edge1Source == E2S && attribute.Edge2Source == E2T || attribute.Edge1Source == E2T && attribute.Edge2Source == E2S 79 // if previously added Edge1Target-Edge2Target is deleted 80 || attribute.Edge1Target == E2S && attribute.Edge2Target == E2T || attribute.Edge1Target == E2T && attribute.Edge2Target == E2S 81 || attribute.Edge1Target == E1S && attribute.Edge2Target == E1T || attribute.Edge1Target == E1T && attribute.Edge2Target == E1S) { 82 isTabu = true; 83 break; 67 bool isTabu = false; 68 foreach (IItem tabuMove in tabuList) { 69 switch (permutation.PermutationType) { 70 case PermutationTypes.RelativeUndirected: { 71 int E1S = permutation.GetCircular(move.Index1 - 1); 72 int E1T = permutation[move.Index1]; 73 int E2S = permutation[move.Index2]; 74 int E2T = permutation.GetCircular(move.Index2 + 1); 75 InversionMoveRelativeAttribute relAttrib = (tabuMove as InversionMoveRelativeAttribute); 76 if (relAttrib != null) { 77 if (relAttrib.Edge1Source == E1S && relAttrib.Edge2Source == E1T || relAttrib.Edge1Source == E1T && relAttrib.Edge2Source == E1S 78 || relAttrib.Edge1Source == E2S && relAttrib.Edge2Source == E2T || relAttrib.Edge1Source == E2T && relAttrib.Edge2Source == E2S 79 // if previously added Edge1Target-Edge2Target is deleted 80 || relAttrib.Edge1Target == E2S && relAttrib.Edge2Target == E2T || relAttrib.Edge1Target == E2T && relAttrib.Edge2Target == E2S 81 || relAttrib.Edge1Target == E1S && relAttrib.Edge2Target == E1T || relAttrib.Edge1Target == E1T && relAttrib.Edge2Target == E1S) { 82 isTabu = true; 83 } 84 } 84 85 } 85 } 86 break; 87 case PermutationTypes.RelativeDirected: { 88 int E1S = permutation.GetCircular(move.Index1 - 1); 89 int E1T = permutation[move.Index1]; 90 int E2S = permutation[move.Index2]; 91 int E2T = permutation.GetCircular(move.Index2 + 1); 92 InversionMoveRelativeAttribute relAttrib = (tabuMove as InversionMoveRelativeAttribute); 93 if (relAttrib != null) { 94 if (relAttrib.Edge1Source == E1S && relAttrib.Edge2Source == E1T 95 || relAttrib.Edge1Source == E2S && relAttrib.Edge2Source == E2T 96 // if previously added Edge1Target-Edge2Target is deleted 97 || relAttrib.Edge1Target == E2S && relAttrib.Edge2Target == E2T 98 || relAttrib.Edge1Target == E1S && relAttrib.Edge2Target == E1T) { 99 isTabu = true; 100 } 101 } 102 } 103 break; 104 case PermutationTypes.Absolute: { 105 int i1 = move.Index1; 106 int n1 = permutation[move.Index1]; 107 int i2 = move.Index2; 108 int n2 = permutation[move.Index2]; 109 InversionMoveAbsoluteAttribute absAttrib = (tabuMove as InversionMoveAbsoluteAttribute); 110 if (absAttrib != null) { 111 if (absAttrib.Number1 == n1 || absAttrib.Number1 == n2 112 || absAttrib.Number2 == n2 || absAttrib.Number2 == n1) 113 isTabu = true; 114 115 } 116 } 117 break; 118 default: { 119 throw new InvalidOperationException(Name + ": Unknown permutation type."); 120 } 86 121 } 122 if (isTabu) break; 87 123 } 88 124 MoveTabuParameter.ActualValue = new BoolValue(isTabu);
Note: See TracChangeset
for help on using the changeset viewer.