Changeset 9495 for branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/MultiComponentVector/Moves/ThreeWay/MultiComponentVectorMoveSoftTabuCriterion.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/MultiComponentVectorMoveSoftTabuCriterion.cs
r9473 r9495 38 38 get { return false; } 39 39 } 40 public ILookupParameter< MultiComponentVectorMove> MultiComponentVectorMoveParameter {41 get { return (ILookupParameter< MultiComponentVectorMove>)Parameters["MultiComponentVectorMove"]; }40 public ILookupParameter<IPackingMove> PackingMoveParameter { 41 get { return (ILookupParameter<IPackingMove>)Parameters["PackingMove"]; } 42 42 } 43 43 public ILookupParameter<MultiComponentVectorEncoding> MultiComponentVectorParameter { … … 65 65 public MultiComponentVectorMoveSoftTabuCriterion() 66 66 : base() { 67 Parameters.Add(new LookupParameter< MultiComponentVectorMove>("MultiComponentVectorMove", "The move to evaluate."));67 Parameters.Add(new LookupParameter<IPackingMove>("PackingMove", "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.")); … … 80 80 public override IOperation Apply() { 81 81 ItemList<IItem> tabuList = TabuListParameter.ActualValue; 82 MultiComponentVectorMove move = MultiComponentVectorMoveParameter.ActualValue;82 MultiComponentVectorMove move = PackingMoveParameter.ActualValue as MultiComponentVectorMove; 83 83 MultiComponentVectorEncoding multiComponentVector = MultiComponentVectorParameter.ActualValue; 84 84 int length = multiComponentVector.PackingInformations.Count; … … 94 94 private bool IsMoveTabu(ItemList<IItem> tabuList, MultiComponentVectorMove move, MultiComponentVectorEncoding multiComponentVector, double moveQuality, bool maximization, bool useAspiration) { 95 95 bool isTabu = false; 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;102 96 var attributes = tabuList.FindAll(ta => ta.GetType().Equals(move.GetMoveAttributeType())); 103 97 104 if (sirm != null) { 105 foreach (IItem tabuMove in attributes) { 106 SingleItemRotationMoveAttribute sirmAttr = (tabuMove as SingleItemRotationMoveAttribute); 107 if (sirmAttr != null 108 && (!useAspiration 109 || maximization && moveQuality <= sirmAttr.MoveQuality 110 || !maximization && moveQuality >= sirmAttr.MoveQuality)) { 111 if (sirm.ItemIndex == sirmAttr.ItemIndex && multiComponentVector.PackingInformations[sirm.ItemIndex].Rotated == sirmAttr.ItemRotation) 112 isTabu = true; 113 } 114 if (isTabu) break; 98 foreach (IItem attr in attributes) { 99 MultiComponentVectorMoveAttribute mcvAttr = attr as MultiComponentVectorMoveAttribute; 100 if (mcvAttr != null 101 && (!useAspiration 102 || maximization && moveQuality <= mcvAttr.MoveQuality 103 || !maximization && moveQuality >= mcvAttr.MoveQuality)) { 104 105 isTabu = move.BelongsToAttribute(mcvAttr, false); 115 106 } 116 } else if (sgm != null) { 117 foreach (IItem tabuMove in attributes) { 118 SingleGroupingMoveAttribute sgmAttr = (tabuMove as SingleGroupingMoveAttribute); 119 if (sgmAttr != null 120 && (!useAspiration 121 || maximization && moveQuality <= sgmAttr.MoveQuality 122 || !maximization && moveQuality >= sgmAttr.MoveQuality)) { 123 if (multiComponentVector.PackingInformations[sgm.Index].ItemIndex == multiComponentVector.PackingInformations[sgmAttr.Index].ItemIndex 124 && multiComponentVector.PackingInformations[sgm.Index].AssignedBin == sgmAttr.AssignedBin) 125 isTabu = true; 126 } 127 if (isTabu) break; 128 } 129 } else if (spm != null) { 130 foreach (IItem tabuMove in attributes) { 131 SwapPositionMoveAttribute spmAttr = (tabuMove as SwapPositionMoveAttribute); 132 if (spmAttr != null 133 && (!useAspiration 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 ) 170 isTabu = true; 171 } 172 if (isTabu) break; 173 } 174 } 175 176 107 if (isTabu) break; 108 } 177 109 178 110 return isTabu;
Note: See TracChangeset
for help on using the changeset viewer.