Changeset 3233 for trunk/sources/HeuristicLab.Encodings.PermutationEncoding/3.3/Moves/TwoOpt/PreventReaddInversionMoveTabuChecker.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/PreventReaddInversionMoveTabuChecker.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 deleted Edge1Source-Target is readded 77 if (attribute.Edge1Source == E1S && attribute.Edge1Target == E2S || attribute.Edge1Source == E2S && attribute.Edge1Target == E1S 78 || attribute.Edge1Source == E1T && attribute.Edge1Target == E2T || attribute.Edge1Source == E2T && attribute.Edge1Target == E1T 79 // if previously deleted Edge2Source-Target is readded 80 || attribute.Edge2Source == E1T && attribute.Edge2Target == E2T || attribute.Edge2Source == E2T && attribute.Edge2Target == E1T 81 || attribute.Edge2Source == E1S && attribute.Edge2Target == E2S || attribute.Edge2Source == E2S && 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 previously deleted Edge1Source-Target is readded 78 if (relAttrib.Edge1Source == E1S && relAttrib.Edge1Target == E2S || relAttrib.Edge1Source == E2S && relAttrib.Edge1Target == E1S 79 || relAttrib.Edge1Source == E1T && relAttrib.Edge1Target == E2T || relAttrib.Edge1Source == E2T && relAttrib.Edge1Target == E1T 80 // if previously deleted Edge2Source-Target is readded 81 || relAttrib.Edge2Source == E1T && relAttrib.Edge2Target == E2T || relAttrib.Edge2Source == E2T && relAttrib.Edge2Target == E1T 82 || relAttrib.Edge2Source == E1S && relAttrib.Edge2Target == E2S || relAttrib.Edge2Source == E2S && relAttrib.Edge2Target == E1S) { 83 isTabu = true; 84 } 85 } 84 86 } 85 } 87 break; 88 case PermutationTypes.RelativeDirected: { 89 int E1S = permutation.GetCircular(move.Index1 - 1); 90 int E1T = permutation[move.Index1]; 91 int E2S = permutation[move.Index2]; 92 int E2T = permutation.GetCircular(move.Index2 + 1); 93 InversionMoveRelativeAttribute relAttrib = (tabuMove as InversionMoveRelativeAttribute); 94 if (relAttrib != null) { 95 if (relAttrib.Edge1Source == E1S && relAttrib.Edge1Target == E2S 96 || relAttrib.Edge1Source == E1T && relAttrib.Edge1Target == E2T 97 // if previously deleted Edge2Source-Target is readded 98 || relAttrib.Edge2Source == E1T && relAttrib.Edge2Target == E2T 99 || relAttrib.Edge2Source == E1S && relAttrib.Edge2Target == E2S) { 100 isTabu = true; 101 } 102 } 103 } 104 break; 105 case PermutationTypes.Absolute: { 106 int i1 = move.Index1; 107 int n1 = permutation[move.Index1]; 108 int i2 = move.Index2; 109 int n2 = permutation[move.Index2]; 110 InversionMoveAbsoluteAttribute absAttrib = (tabuMove as InversionMoveAbsoluteAttribute); 111 if (absAttrib != null) { 112 if ((absAttrib.Index1 == i1 || absAttrib.Index1 == i2) && (absAttrib.Number1 == n1 || absAttrib.Number1 == n2) 113 || (absAttrib.Index2 == i2 || absAttrib.Index2 == i1) && (absAttrib.Number2 == n2 || absAttrib.Number2 == n1)) 114 isTabu = true; 115 116 } 117 } 118 break; 119 default: { 120 throw new InvalidOperationException(Name + ": Unknown permutation type."); 121 } 86 122 } 123 if (isTabu) break; 87 124 } 88 125 MoveTabuParameter.ActualValue = new BoolValue(isTabu);
Note: See TracChangeset
for help on using the changeset viewer.