Changeset 9599 for branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingPlans/BinPacking2D.cs
- Timestamp:
- 06/09/13 12:58:39 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingPlans/BinPacking2D.cs
r9598 r9599 41 41 public class BinPacking2D : BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> { 42 42 43 public BinPacking2D(RectangularPackingBin binMeasures) : base(binMeasures) { 44 //OccupiedPoints = new OccupiedPoints2D(binMeasures); 43 public BinPacking2D(RectangularPackingBin binMeasures) 44 : base(binMeasures) { 45 //ExtremePoints = new HashSet<TwoDimensionalPacking>(); 46 ExtremePoints = new SortedSet<TwoDimensionalPacking>(new EPComparer2D()); 47 ExtremePoints.Add(binMeasures.Origin); 45 48 } 46 49 [StorableConstructor] … … 48 51 protected BinPacking2D(BinPacking2D original, Cloner cloner) 49 52 : base(original, cloner) { 53 this.ExtremePoints = new SortedSet<TwoDimensionalPacking>(original.ExtremePoints, new EPComparer2D()); 50 54 } 51 55 public override IDeepCloneable Clone(Cloner cloner) { … … 62 66 if (sourcePointX.X < BinMeasures.Width && sourcePointX.Y < BinMeasures.Height) { 63 67 //Traversing down the y-axis 64 while (sourcePointX.Y > 0 && (-1).Equals(IsPointOccupied(new TwoDimensionalPacking(0, sourcePointX.X, sourcePointX.Y - 1)))) {68 while (sourcePointX.Y > 0 && !IsPointOccupied(new TwoDimensionalPacking(0, sourcePointX.X, sourcePointX.Y - 1))) { 65 69 sourcePointX.Y--; 66 70 } … … 75 79 if (sourcePointY.X < BinMeasures.Width && sourcePointY.Y < BinMeasures.Height) { 76 80 //Traversing down the x-axis 77 while (sourcePointY.X > 0 && (-1).Equals(IsPointOccupied(new TwoDimensionalPacking (0,sourcePointY.X - 1, sourcePointY.Y)))) {81 while (sourcePointY.X > 0 && !IsPointOccupied(new TwoDimensionalPacking (0,sourcePointY.X - 1, sourcePointY.Y))) { 78 82 sourcePointY.X--; 79 83 } … … 81 85 } 82 86 83 ExtremePoints = new HashSet<TwoDimensionalPacking>(ExtremePoints. 84 OrderBy(ep => ep.X). 85 ThenBy(ep => ep.Y). 86 ThenBy(ep => ShortestPossibleSideFromPoint(ep))); 87 //ExtremePoints.RemoveWhere(ep => IsPointOccupied(ep)); 88 89 //ExtremePoints = new HashSet<TwoDimensionalPacking>(ExtremePoints. 90 // OrderBy(ep => ep.X). 91 // ThenBy(ep => ep.Y). 92 // ThenBy(ep => ShortestPossibleSideFromPoint(ep))); 87 93 } 88 94 … … 190 196 throw new NotImplementedException(); 191 197 } 198 199 200 protected override void InitializeOccupationLayers() { 201 for (int i = 0; i*10 <= BinMeasures.Width; i += 1 ) { 202 OccupationLayers[i] = new List<int>(); 203 } 204 } 205 protected override void AddNewItemToOccupationLayers(int itemID, RectangularPackingItem measures, TwoDimensionalPacking position) { 206 int x1 = position.X / 10; 207 int x2 = (position.X + (position.Rotated ? measures.Height : measures.Width)) / 10; 208 209 for (int i = x1; i <= x2; i++) 210 OccupationLayers[i].Add(itemID); 211 } 212 protected override List<int> GetLayerItemIDs(TwoDimensionalPacking position) { 213 return OccupationLayers[position.X / 10]; 214 } 215 protected override List<int> GetLayerItemIDs(RectangularPackingItem measures, TwoDimensionalPacking position) { 216 List<int> result = new List<int> (); 217 int x1 = position.X / 10; 218 int x2 = (position.X + (position.Rotated ? measures.Height : measures.Width)) / 10; 219 220 for (int i = x1; i <= x2; i++) 221 result.AddRange(OccupationLayers[i]); 222 223 return result; 224 } 225 } 226 public class EPComparer2D : IComparer<TwoDimensionalPacking> { 227 public int Compare(TwoDimensionalPacking a, TwoDimensionalPacking b) { 228 int result = a.X.CompareTo(b.X); 229 if (result == 0) 230 result = a.Y.CompareTo(b.Y); 231 232 return result; 233 } 192 234 } 193 235 }
Note: See TracChangeset
for help on using the changeset viewer.