Changeset 9473 for branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/MultiComponentVector/Moves/ThreeWay/MultiComponentVectorMoveSoftTabuCriterion.cs
- Timestamp:
- 05/09/13 15:03:41 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/MultiComponentVector/Moves/ThreeWay/MultiComponentVectorMoveSoftTabuCriterion.cs
r9440 r9473 65 65 public MultiComponentVectorMoveSoftTabuCriterion() 66 66 : base() { 67 67 Parameters.Add(new LookupParameter<MultiComponentVectorMove>("MultiComponentVectorMove", "The move to evaluate.")); 68 68 Parameters.Add(new LookupParameter<MultiComponentVectorEncoding>("MultiComponentVector", "The solution to evaluate.")); 69 69 Parameters.Add(new LookupParameter<BoolValue>("MoveTabu", "The variable to store if a move was tabu.")); … … 94 94 private bool IsMoveTabu(ItemList<IItem> tabuList, MultiComponentVectorMove move, MultiComponentVectorEncoding multiComponentVector, double moveQuality, bool maximization, bool useAspiration) { 95 95 bool isTabu = false; 96 SingleItemRotationMove sirm = move as SingleItemRotationMove; 97 SingleGroupingMove sgm = move as SingleGroupingMove; 98 SwapSequenceMove ssm = move as SwapSequenceMove; 96 97 SingleItemRotationMove sirm = move as SingleItemRotationMove; 98 SingleGroupingMove sgm = move as SingleGroupingMove; 99 SwapPositionMove spm = move as SwapPositionMove; 100 ChangePositionMove cpm = move as ChangePositionMove; 101 MCVTripleMove tm = move as MCVTripleMove; 99 102 var attributes = tabuList.FindAll(ta => ta.GetType().Equals(move.GetMoveAttributeType())); 100 103 … … 106 109 || maximization && moveQuality <= sirmAttr.MoveQuality 107 110 || !maximization && moveQuality >= sirmAttr.MoveQuality)) { 108 109 111 if (sirm.ItemIndex == sirmAttr.ItemIndex && multiComponentVector.PackingInformations[sirm.ItemIndex].Rotated == sirmAttr.ItemRotation) 112 isTabu = true; 110 113 } 111 114 if (isTabu) break; … … 118 121 || maximization && moveQuality <= sgmAttr.MoveQuality 119 122 || !maximization && moveQuality >= sgmAttr.MoveQuality)) { 120 if (sgm.ItemIndex == sgmAttr.ItemIndex && multiComponentVector.PackingInformations[sgm.ItemIndex].AssignedBin == sgmAttr.AssignedBin) 121 isTabu = true; 123 if (multiComponentVector.PackingInformations[sgm.Index].ItemIndex == multiComponentVector.PackingInformations[sgmAttr.Index].ItemIndex 124 && multiComponentVector.PackingInformations[sgm.Index].AssignedBin == sgmAttr.AssignedBin) 125 isTabu = true; 122 126 } 123 127 if (isTabu) break; 124 128 } 125 } else if (s sm != null) {129 } else if (spm != null) { 126 130 foreach (IItem tabuMove in attributes) { 127 Swap SequenceMoveAttribute ssmAttr = (tabuMove as SwapSequenceMoveAttribute);128 if (s smAttr != null131 SwapPositionMoveAttribute spmAttr = (tabuMove as SwapPositionMoveAttribute); 132 if (spmAttr != null 129 133 && (!useAspiration 130 || maximization && moveQuality <= ssmAttr.MoveQuality 131 || !maximization && moveQuality >= ssmAttr.MoveQuality)) { 132 if (ssm.Index1 == ssmAttr.Index1 133 && ssm.Index2 == ssmAttr.Index2 134 && multiComponentVector.PackingInformations[ssm.Index1].ItemIndex == ssmAttr.ItemIndex1 135 && multiComponentVector.PackingInformations[ssm.Index2].ItemIndex == ssmAttr.ItemIndex2) 134 || maximization && moveQuality <= spmAttr.MoveQuality 135 || !maximization && moveQuality >= spmAttr.MoveQuality)) { 136 if (spm.Index1 == spmAttr.Index1 137 && spm.Index2 == spmAttr.Index2 138 && multiComponentVector.PackingInformations[spm.Index1].ItemIndex == spmAttr.ItemIndex1 139 && multiComponentVector.PackingInformations[spm.Index2].ItemIndex == spmAttr.ItemIndex2) 140 isTabu = true; 141 } 142 if (isTabu) break; 143 } 144 } else if (cpm != null) { 145 foreach (IItem tabuMove in attributes) { 146 ChangePositionMoveAttribute cpmAttr = (tabuMove as ChangePositionMoveAttribute); 147 if (cpmAttr != null 148 && (!useAspiration 149 || maximization && moveQuality <= cpmAttr.MoveQuality 150 || !maximization && moveQuality >= cpmAttr.MoveQuality)) { 151 if (cpm.Index == cpmAttr.Index 152 && cpm.TargetIndex == cpmAttr.TargetIndex 153 && multiComponentVector.PackingInformations[cpm.Index].ItemIndex == cpmAttr.ItemIndex) 154 isTabu = true; 155 } 156 if (isTabu) break; 157 } 158 } else if (tm != null) { 159 foreach (IItem tabuMove in attributes) { 160 MCVTripleMoveAttribute tmAttr = (tabuMove as MCVTripleMoveAttribute); 161 if (tmAttr != null 162 && (!useAspiration 163 || maximization && moveQuality <= tmAttr.MoveQuality 164 || !maximization && moveQuality >= tmAttr.MoveQuality)) { 165 if ((tm.Index == tmAttr.Index && tm.TargetIndex == tmAttr.TargetIndex) 166 && multiComponentVector.PackingInformations[tm.Index].ItemIndex == tmAttr.ItemIndex 167 && tm.Rotation == !(tmAttr.RotationAfter.Equals(tmAttr.RotationBefore)) 168 && (tm.Group == tmAttr.GroupAfter && multiComponentVector.PackingInformations[tm.Index].AssignedBin == tmAttr.GroupBefore) 169 ) 136 170 isTabu = true; 137 171 } … … 140 174 } 141 175 142 176 143 177 144 178 return isTabu;
Note: See TracChangeset
for help on using the changeset viewer.