- Timestamp:
- 06/06/13 03:12:42 (11 years ago)
- Location:
- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders
- Files:
-
- 3 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/BL/BottomLeftFunctions.cs
r9563 r9593 7 7 using HeuristicLab.Encodings.PackingEncoding.GroupingVector; 8 8 using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector; 9 using HeuristicLab.Encodings.PackingEncoding.PackingPlan; 9 10 using HeuristicLab.Encodings.PackingEncoding.PackingSequence; 10 11 using HeuristicLab.Encodings.PermutationEncoding; … … 18 19 public static class BottomLeftFunctions { 19 20 20 21 public static Observable Dictionary<int, TwoDimensionalPacking> BottomLeftPacking(21 /* 22 public static ObservableList<BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>> BottomLeftPacking( 22 23 MultiComponentVectorEncoding solution, RectangularPackingBin binMeasures, ItemList<RectangularPackingItem> itemMeasures) { 23 24 int nrOfBins = solution.NrOfBins; … … 30 31 } 31 32 32 ObservableDictionary<int, TwoDimensionalPacking> packingPositions = new ObservableDictionary<int, TwoDimensionalPacking>();33 ObservableDictionary<int, TwoDimensionalPacking> itemPositions = new ObservableDictionary<int, TwoDimensionalPacking>(); 33 34 var remainingItems = new List<PackingInformation>(); 34 35 … … 42 43 TwoDimensionalPacking position = null; 43 44 44 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, packingPositions, itemMeasures, unpackedItems[i].Rotated);45 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, itemPositions, itemMeasures, unpackedItems[i].Rotated); 45 46 46 47 if (position == null) { 47 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, packingPositions, itemMeasures, !unpackedItems[i].Rotated); 48 } 49 if (position == null) { 50 remainingItems.Add(unpackedItems[i]); 48 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, itemPositions, itemMeasures, !unpackedItems[i].Rotated); 49 } 50 if (position == null) { 51 remainingItems.Add(unpackedItems[i]); 52 solution.PackingInformations[binNr].Remove(unpackedItems[i]); 51 53 } else { 52 packingPositions[itemIndex] = position; 53 solution.PackingInformations[binNr].Remove(unpackedItems[i]); 54 itemPositions[itemIndex] = position; 54 55 solution.PackingInformations[binNr].Find(pi => pi.ItemID == itemIndex).Rotated = position.Rotated; 55 56 } … … 67 68 68 69 //Look for space in current bin 69 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, packingPositions, itemMeasures, unpackedItems[i].Rotated);70 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, itemPositions, itemMeasures, unpackedItems[i].Rotated); 70 71 71 72 if (position == null) { 72 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, packingPositions, itemMeasures, !unpackedItems[i].Rotated);73 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, itemPositions, itemMeasures, !unpackedItems[i].Rotated); 73 74 } 74 75 if (position != null) { 75 packingPositions[itemIndex] = position;76 itemPositions[itemIndex] = position; 76 77 remainingItems.Remove(unpackedItems[i]); 77 78 solution.PackingInformations[binNr].Add(unpackedItems[i]); … … 85 86 } 86 87 87 return packingPositions;88 } 89 90 public static Observable Dictionary<int, TwoDimensionalPacking> BottomLeftPacking(88 return BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 89 } 90 91 public static ObservableList<BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>> BottomLeftPacking( 91 92 GroupingVectorEncoding solution, RectangularPackingBin binMeasures, ItemList<RectangularPackingItem> itemMeasures) { 92 93 … … 104 105 } 105 106 106 ObservableDictionary<int, TwoDimensionalPacking> packingPositions = new ObservableDictionary<int, TwoDimensionalPacking>();107 ObservableDictionary<int, TwoDimensionalPacking> itemPositions = new ObservableDictionary<int, TwoDimensionalPacking>(); 107 108 var remainingItems = new List<int>(); 108 109 … … 117 118 118 119 //Look for space in current bin 119 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, packingPositions, itemMeasures);120 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, itemPositions, itemMeasures); 120 121 121 122 //Did not find enough space in current bin … … 123 124 remainingItems.Add(itemIndex); 124 125 } else 125 packingPositions[itemIndex] = position;126 itemPositions[itemIndex] = position; 126 127 } 127 128 } … … 137 138 138 139 //Look for space in current bin 139 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, packingPositions, itemMeasures);140 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, itemPositions, itemMeasures); 140 141 141 142 if (position != null) { 142 packingPositions[itemIndex] = position;143 itemPositions[itemIndex] = position; 143 144 remainingItems.Remove(itemIndex); 144 145 solution.GroupingVector[itemIndex] = binNr; … … 150 151 } 151 152 152 return packingPositions;153 } 154 155 public static Observable Dictionary<int, TwoDimensionalPacking> BottomLeftPacking(153 return BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 154 } 155 156 public static ObservableList<BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>> BottomLeftPacking( 156 157 PackingSequenceEncoding solution, RectangularPackingBin binMeasures, ItemList<RectangularPackingItem> itemMeasures) { 157 158 158 ObservableDictionary<int, TwoDimensionalPacking> packingPositions = new ObservableDictionary<int, TwoDimensionalPacking>();159 ObservableDictionary<int, TwoDimensionalPacking> itemPositions = new ObservableDictionary<int, TwoDimensionalPacking>(); 159 160 int nrOfBins = 1; 160 161 for (int i = 0; i < solution.PackingSequence.Length; i++) { … … 163 164 //Look for space in existing bins 164 165 for (int binNr = 0; binNr < nrOfBins; binNr++) { 165 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, packingPositions, itemMeasures);166 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, binNr, item, itemPositions, itemMeasures); 166 167 if (position != null) 167 168 break; … … 170 171 if (position == null) { 171 172 nrOfBins++; 172 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, nrOfBins - 1, item, packingPositions, itemMeasures);173 position = BottomLeftFunctions.BottomLeftPosition(binMeasures, nrOfBins - 1, item, itemPositions, itemMeasures); 173 174 } 174 175 … … 176 177 position = new TwoDimensionalPacking(-1, 0, 0); 177 178 178 packingPositions[solution.PackingSequence[i]] = position; 179 } 180 181 return packingPositions; 182 } 183 184 private static TwoDimensionalPacking BottomLeftPosition(RectangularPackingBin binMeasures, int binNr, RectangularPackingItem currentItem, ObservableDictionary<int, TwoDimensionalPacking> itemPositions, ItemList<RectangularPackingItem> itemMeasures) { 179 itemPositions[solution.PackingSequence[i]] = position; 180 } 181 182 return BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 183 } 184 185 */ 186 public static TwoDimensionalPacking BottomLeftPosition(RectangularPackingBin binMeasures, int binNr, RectangularPackingItem currentItem, ObservableDictionary<int, TwoDimensionalPacking> itemPositions, ItemList<RectangularPackingItem> itemMeasures) { 185 187 return BottomLeftPosition(binMeasures, binNr, currentItem, itemPositions, itemMeasures, false); 186 188 } 187 p rivatestatic TwoDimensionalPacking BottomLeftPosition(RectangularPackingBin binMeasures, int binNr, RectangularPackingItem currentItem, ObservableDictionary<int, TwoDimensionalPacking> itemPositions, ItemList<RectangularPackingItem> itemMeasures, bool rotated) {189 public static TwoDimensionalPacking BottomLeftPosition(RectangularPackingBin binMeasures, int binNr, RectangularPackingItem currentItem, ObservableDictionary<int, TwoDimensionalPacking> itemPositions, ItemList<RectangularPackingItem> itemMeasures, bool rotated) { 188 190 TwoDimensionalPacking currentPosition = new TwoDimensionalPacking(binNr, 189 191 binMeasures.Width - (rotated ? currentItem.Height : currentItem.Width), -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/BL/BottomLeftGroupingVectorDecoder.cs
r9563 r9593 66 66 67 67 PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> result = 68 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures , itemMeasures);68 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures); 69 69 70 result. PackingItemPositions =BottomLeftFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures);70 result.BinPackings = TwoDimensionalPackingFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures); //BottomLeftFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures); 71 71 return result; 72 72 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/BL/BottomLeftMultiComponentVectorDecoder.cs
r9563 r9593 66 66 67 67 PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> result = 68 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures , itemMeasures);69 70 result. PackingItemPositions =BottomLeftFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures);68 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures); 69 70 result.BinPackings = TwoDimensionalPackingFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures); //BottomLeftFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures); 71 71 72 72 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/BL/BottomLeftPackingSequenceDecoder.cs
r9563 r9593 65 65 66 66 PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> result = 67 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures , itemMeasures);67 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures); 68 68 69 result. PackingItemPositions = BottomLeftFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures);69 result.BinPackings = TwoDimensionalPackingFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures); //BottomLeftFunctions.BottomLeftPacking(solution, binMeasures, itemMeasures); 70 70 71 71 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/EP/ExtremePointGroupingVectorDecoder2D.cs
r9563 r9593 60 60 public static PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> Decode(GroupingVectorEncoding solution, RectangularPackingBin binMeasures, ItemList<RectangularPackingItem> itemMeasures) { 61 61 PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> result = 62 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures , itemMeasures);62 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures); 63 63 64 result. PackingItemPositions =ExtremPointsFunctions2D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);64 result.BinPackings = TwoDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);//ExtremPointsFunctions2D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures); 65 65 66 66 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/EP/ExtremePointMultiComponentVectorDecoder2D.cs
r9563 r9593 61 61 public static PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> Decode(MultiComponentVectorEncoding solution, RectangularPackingBin binMeasures, ItemList<RectangularPackingItem> itemMeasures) { 62 62 PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> result = 63 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures , itemMeasures);63 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures); 64 64 65 result. PackingItemPositions =ExtremPointsFunctions2D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);65 result.BinPackings = TwoDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);//ExtremPointsFunctions2D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures); 66 66 67 67 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/EP/ExtremePointPackingSequenceDecoder2D.cs
r9563 r9593 64 64 65 65 PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> result = 66 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures , itemMeasures);66 new PackingPlan<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>(binMeasures); 67 67 68 result. PackingItemPositions =ExtremPointsFunctions2D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);68 result.BinPackings = TwoDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);//ExtremPointsFunctions2D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures); 69 69 70 70 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/EP/ExtremePointsFunctions2D.cs
r9563 r9593 7 7 using HeuristicLab.Encodings.PackingEncoding.GroupingVector; 8 8 using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector; 9 using HeuristicLab.Encodings.PackingEncoding.PackingPlan; 9 10 using HeuristicLab.Encodings.PackingEncoding.PackingSequence; 10 11 using HeuristicLab.Encodings.PermutationEncoding; … … 21 22 22 23 23 public static Observable Dictionary<int, TwoDimensionalPacking> ExtremePointBasedPacking(MultiComponentVectorEncoding solution,24 public static ObservableList<BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>> ExtremePointBasedPacking(MultiComponentVectorEncoding solution, 24 25 ItemList<RectangularPackingItem> itemMeasures, RectangularPackingBin binMeasures) { 25 26 … … 98 99 } 99 100 100 return itemPositions;101 } 102 103 104 public static Observable Dictionary<int, TwoDimensionalPacking> ExtremePointBasedPacking(GroupingVectorEncoding solution,101 return BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 102 } 103 104 105 public static ObservableList<BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>> ExtremePointBasedPacking(GroupingVectorEncoding solution, 105 106 ItemList<RectangularPackingItem> itemMeasures, RectangularPackingBin binMeasures) { 106 107 … … 180 181 } 181 182 182 return itemPositions;183 } 184 185 186 public static Observable Dictionary<int, TwoDimensionalPacking> ExtremePointBasedPacking(PackingSequenceEncoding solution,183 return BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 184 } 185 186 187 public static ObservableList<BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>> ExtremePointBasedPacking(PackingSequenceEncoding solution, 187 188 ItemList<RectangularPackingItem> itemMeasures, RectangularPackingBin binMeasures) { 188 189 … … 215 216 } 216 217 217 return itemPositions;218 } 219 220 221 p rivatestatic TwoDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<RectangularPackingItem> itemMeasures, RectangularPackingBin binMeasures,218 return BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 219 } 220 221 222 public static TwoDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<RectangularPackingItem> itemMeasures, RectangularPackingBin binMeasures, 222 223 HashSet<TwoDimensionalPacking> extremePoints, List<int[,]> occupiedPoints, ObservableDictionary<int, TwoDimensionalPacking> itemPositions) { 223 224 return FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions, false); 224 225 } 225 p rivatestatic TwoDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<RectangularPackingItem> itemMeasures, RectangularPackingBin binMeasures,226 public static TwoDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<RectangularPackingItem> itemMeasures, RectangularPackingBin binMeasures, 226 227 HashSet<TwoDimensionalPacking> extremePoints, List<int[,]> occupiedPoints, ObservableDictionary<int, TwoDimensionalPacking> itemPositions, bool rotated) { 227 228 … … 233 234 234 235 int epIndex = 0; 235 while (epIndex < extremePoints.Count && 236 while (epIndex < extremePoints.Count && 237 //(!IsPositionFeasible(binMeasures, item, extremePoints.ElementAt(epIndex), occupiedPoints))) 236 238 (!BottomLeftFunctions.IsPositionFeasible(binMeasures, extremePoints.ElementAt(epIndex).AssignedBin, item, extremePoints.ElementAt(epIndex), itemPositions, itemMeasures))) 237 239 { epIndex++; } … … 244 246 return null; 245 247 } 246 p rivatestatic List<int[,]> IncreaseBinCountForOccupiedPoints(List<int[,]> occupiedPoints, RectangularPackingBin binMeasures) {248 public static List<int[,]> IncreaseBinCountForOccupiedPoints(List<int[,]> occupiedPoints, RectangularPackingBin binMeasures) { 247 249 occupiedPoints.Add(new int[binMeasures.Width, binMeasures.Height]); 248 250 int lastIndex = occupiedPoints.Count - 1; … … 254 256 return occupiedPoints; 255 257 } 256 p rivatestatic List<int[,]> OccupyPointsForNewItem(List<int[,]> occupiedPoints, RectangularPackingItem newItem, TwoDimensionalPacking position, int itemIndex) {258 public static List<int[,]> OccupyPointsForNewItem(List<int[,]> occupiedPoints, RectangularPackingItem newItem, TwoDimensionalPacking position, int itemIndex) { 257 259 int width = position.Rotated ? newItem.Height : newItem.Width; 258 260 int height = position.Rotated ? newItem.Width : newItem.Height; … … 264 266 return occupiedPoints; 265 267 } 266 p rivatestatic HashSet<TwoDimensionalPacking> GenerateNewExtremePointsForNewItem(HashSet<TwoDimensionalPacking> extremePoints, List<int[,]> occupiedPoints,268 public static HashSet<TwoDimensionalPacking> GenerateNewExtremePointsForNewItem(HashSet<TwoDimensionalPacking> extremePoints, List<int[,]> occupiedPoints, 267 269 RectangularPackingItem newItem, TwoDimensionalPacking position, RectangularPackingBin binMeasures) { 268 270 int currentBin = position.AssignedBin; … … 321 323 return shortestSide; 322 324 } 325 326 323 327 } 324 328 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/DBL/DeepestBottomLeftFunctions.cs
r9563 r9593 7 7 using HeuristicLab.Encodings.PackingEncoding.GroupingVector; 8 8 using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector; 9 using HeuristicLab.Encodings.PackingEncoding.PackingPlan; 9 10 using HeuristicLab.Encodings.PackingEncoding.PackingSequence; 10 11 using HeuristicLab.Encodings.PermutationEncoding; … … 18 19 public static class DeepestBottomLeftFunctions { 19 20 20 public static Observable Dictionary<int, ThreeDimensionalPacking> DeepestLeftBottomPacking(MultiComponentVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {21 public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> DeepestLeftBottomPacking(MultiComponentVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 21 22 int nrOfBins = solution.NrOfBins; 22 23 … … 28 29 } 29 30 30 ObservableDictionary<int, ThreeDimensionalPacking> packingPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();31 ObservableDictionary<int, ThreeDimensionalPacking> itemPositions = new ObservableDictionary<int, ThreeDimensionalPacking>(); 31 32 var remainingItems = new List<PackingInformation>(); 32 33 … … 40 41 ThreeDimensionalPacking position = null; 41 42 42 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures, unpackedItems[i].Rotated);43 44 if (position == null) { 45 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures, !unpackedItems[i].Rotated);43 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures, unpackedItems[i].Rotated); 44 45 if (position == null) { 46 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures, !unpackedItems[i].Rotated); 46 47 } 47 48 if (position == null) { … … 49 50 solution.PackingInformations[binNr].Remove(unpackedItems[i]); 50 51 } else { 51 packingPositions[itemIndex] = position;52 itemPositions[itemIndex] = position; 52 53 solution.PackingInformations[binNr].Find(pi => pi.ItemID == itemIndex).Rotated = position.Rotated; 53 54 } … … 65 66 66 67 //Look for space in current bin 67 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures, unpackedItems[i].Rotated);68 69 if (position == null) { 70 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures, !unpackedItems[i].Rotated);68 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures, unpackedItems[i].Rotated); 69 70 if (position == null) { 71 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures, !unpackedItems[i].Rotated); 71 72 } 72 73 if (position != null) { 73 packingPositions[itemIndex] = position;74 itemPositions[itemIndex] = position; 74 75 remainingItems.Remove(unpackedItems[i]); 75 76 solution.PackingInformations[binNr].Add(unpackedItems[i]); … … 83 84 } 84 85 85 return packingPositions;86 } 87 88 public static Observable Dictionary<int, ThreeDimensionalPacking> DeepestLeftBottomPacking(GroupingVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {86 return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 87 } 88 89 public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> DeepestLeftBottomPacking(GroupingVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 89 90 int nrOfBins = solution.GroupingVector.Max() + 1; 90 91 … … 100 101 } 101 102 102 ObservableDictionary<int, ThreeDimensionalPacking> packingPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();103 ObservableDictionary<int, ThreeDimensionalPacking> itemPositions = new ObservableDictionary<int, ThreeDimensionalPacking>(); 103 104 var remainingItems = new List<int>(); 104 105 … … 112 113 ThreeDimensionalPacking position = null; 113 114 114 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures);115 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures); 115 116 116 117 if (position == null) { 117 118 remainingItems.Add(itemIndex); 118 119 } else 119 packingPositions[itemIndex] = position;120 itemPositions[itemIndex] = position; 120 121 } 121 122 } … … 131 132 132 133 //Look for space in current bin 133 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures);134 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures); 134 135 135 136 if (position != null) { 136 packingPositions[itemIndex] = position;137 itemPositions[itemIndex] = position; 137 138 remainingItems.Remove(itemIndex); 138 139 //solution.GroupingVector[itemIndex] = binNr; … … 144 145 } 145 146 146 return packingPositions;147 } 148 149 public static Observable Dictionary<int, ThreeDimensionalPacking> DeepestLeftBottomPacking(PackingSequenceEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {150 ObservableDictionary<int, ThreeDimensionalPacking> packingPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();147 return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 148 } 149 150 public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> DeepestLeftBottomPacking(PackingSequenceEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 151 ObservableDictionary<int, ThreeDimensionalPacking> itemPositions = new ObservableDictionary<int, ThreeDimensionalPacking>(); 151 152 int nrOfBins = 1; 152 153 for (int i = 0; i < solution.PackingSequence.Length; i++) { … … 155 156 //Look for space in existing bins 156 157 for (int binNr = 0; binNr < nrOfBins; binNr++) { 157 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures);158 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures); 158 159 if (position != null) 159 160 break; … … 162 163 if (position == null) { 163 164 nrOfBins++; 164 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, nrOfBins - 1, item, packingPositions, itemMeasures);165 position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, nrOfBins - 1, item, itemPositions, itemMeasures); 165 166 } 166 167 … … 168 169 position = new ThreeDimensionalPacking(-1, 0, 0, 0); 169 170 170 packingPositions[solution.PackingSequence[i]] = position;171 } 172 173 return packingPositions;171 itemPositions[solution.PackingSequence[i]] = position; 172 } 173 174 return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 174 175 } 175 176 … … 204 205 } 205 206 207 208 206 209 public static bool IsPositionFeasible(CuboidPackingBin binMeasures, int binNr, CuboidPackingItem currentItem, 207 210 ThreeDimensionalPacking currentPosition, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, ItemList<CuboidPackingItem> itemMeasures) { … … 233 236 } 234 237 235 236 237 238 } 238 239 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/DBL/DeepestBottomLeftGroupingVectorDecoder.cs
r9563 r9593 64 64 if (solution == null) throw new InvalidOperationException("Encoding is not of type GroupingVector"); 65 65 66 PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result = new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>( 67 binMeasures, itemMeasures); 66 PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result = new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures); 68 67 69 ObservableDictionary<int, ThreeDimensionalPacking> packingPositions = DeepestBottomLeftFunctions.DeepestLeftBottomPacking( 70 solution, 71 binMeasures, 72 itemMeasures); 73 74 75 result.PackingItemPositions = packingPositions; 68 result.BinPackings = ThreeDimensionalPackingFunctions.DeepestLeftBottomPacking(solution, binMeasures, itemMeasures); 76 69 77 70 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/DBL/DeepestBottomLeftMultiComponentVectorDecoder.cs
r9563 r9593 66 66 67 67 PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result = 68 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures , itemMeasures);69 70 result. PackingItemPositions = DeepestBottomLeftFunctions.DeepestLeftBottomPacking(solution, binMeasures, itemMeasures);68 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures); 69 70 result.BinPackings = ThreeDimensionalPackingFunctions.DeepestLeftBottomPacking(solution, binMeasures, itemMeasures); 71 71 72 72 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/DBL/DeepestBottomLeftPackingSequenceDecoder.cs
r9563 r9593 65 65 66 66 PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result = 67 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures , itemMeasures);67 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures); 68 68 69 result. PackingItemPositions = DeepestBottomLeftFunctions.DeepestLeftBottomPacking(solution, binMeasures, itemMeasures);69 result.BinPackings = ThreeDimensionalPackingFunctions.DeepestLeftBottomPacking(solution, binMeasures, itemMeasures); 70 70 71 71 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointGroupingVectorDecoder3D.cs
r9563 r9593 37 37 using HeuristicLab.Problems.BinPacking.Interfaces; 38 38 using HeuristicLab.Encodings.PackingEncoding.GroupingVector; 39 using HeuristicLab.Parameters; 39 40 40 41 namespace HeuristicLab.Problems.BinPacking.Decoders { … … 46 47 CuboidPackingItem>, I3DGVDecoder { 47 48 49 public ValueParameter<BoolValue> StackingConstraintsParameter { 50 get { return (ValueParameter<BoolValue>)Parameters["StackingConstraint"]; } 51 } 52 48 53 public ExtremePointGroupingVectorDecoder3D () 49 54 : base() { 55 Parameters.Add(new ValueParameter<BoolValue>("StackingConstraint", "A flag determining whether stackingconstraints should be enforced or not.")); 50 56 } 51 57 [StorableConstructor] … … 58 64 } 59 65 60 public static PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> Decode(GroupingVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures ) {66 public static PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> Decode(GroupingVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures, bool stackingConstraints) { 61 67 PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result = 62 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures , itemMeasures);68 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures); 63 69 64 result. PackingItemPositions = ExtremePointsFunctions3D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);70 result.BinPackings = ThreeDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures, stackingConstraints); 65 71 66 72 return result; … … 72 78 if (solution == null) throw new InvalidOperationException("Encoding is not of type GroupingVector"); 73 79 74 return Decode(solution, binMeasures, itemMeasures );80 return Decode(solution, binMeasures, itemMeasures, StackingConstraintsParameter.Value.Value); 75 81 } 76 82 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointMultiComponentVectorDecoder3D.cs
r9563 r9593 38 38 using HeuristicLab.Encodings.PackingEncoding.GroupingVector; 39 39 using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector; 40 using HeuristicLab.Parameters; 40 41 41 42 namespace HeuristicLab.Problems.BinPacking.Decoders { … … 47 48 CuboidPackingItem>, I3DMCVDecoder { 48 49 50 public ValueParameter<BoolValue> StackingConstraintsParameter { 51 get { return (ValueParameter<BoolValue>)Parameters["StackingConstraint"]; } 52 } 53 49 54 public ExtremePointMultiComponentVectorDecoder3D () 50 55 : base() { 56 Parameters.Add(new ValueParameter<BoolValue>("StackingConstraint", "A flag determining whether stackingconstraints should be enforced or not.")); 51 57 } 52 58 [StorableConstructor] … … 59 65 } 60 66 61 public static PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> Decode(MultiComponentVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures ) {67 public static PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> Decode(MultiComponentVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures, bool stackingConstraints) { 62 68 PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result = 63 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures , itemMeasures);69 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures); 64 70 65 result. PackingItemPositions = ExtremePointsFunctions3D.ExtremePointBasedPacking(ref solution, itemMeasures, binMeasures);71 result.BinPackings = ThreeDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures, stackingConstraints); 66 72 67 73 return result; … … 73 79 if (solution == null) throw new InvalidOperationException("Encoding is not of type MultiComponentVector"); 74 80 75 return Decode(solution, binMeasures, itemMeasures );81 return Decode(solution, binMeasures, itemMeasures, StackingConstraintsParameter.Value.Value); 76 82 } 77 83 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointPackingSequenceDecoder3D.cs
r9563 r9593 36 36 using HeuristicLab.Encodings.PackingEncoding.PackingSequence; 37 37 using HeuristicLab.Problems.BinPacking.Interfaces; 38 using HeuristicLab.Parameters; 38 39 39 40 namespace HeuristicLab.Problems.BinPacking.Decoders { … … 45 46 CuboidPackingItem>, I3DPSDecoder { 46 47 48 public ValueParameter<BoolValue> StackingConstraintsParameter { 49 get { return (ValueParameter<BoolValue>)Parameters["StackingConstraint"]; } 50 } 51 47 52 public ExtremePointPackingSequenceDecoder3D () 48 53 : base() { 54 Parameters.Add(new ValueParameter<BoolValue>("StackingConstraint", "A flag determining whether stackingconstraints should be enforced or not.")); 49 55 } 50 56 [StorableConstructor] … … 64 70 65 71 PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result = 66 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures , itemMeasures);72 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures); 67 73 68 result. PackingItemPositions = ExtremePointsFunctions3D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);74 result.BinPackings = ThreeDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures, StackingConstraintsParameter.Value.Value); 69 75 70 76 return result; -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointsFunctions3D.cs
r9563 r9593 8 8 using HeuristicLab.Encodings.PackingEncoding.GroupingVector; 9 9 using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector; 10 using HeuristicLab.Encodings.PackingEncoding.PackingPlan; 10 11 using HeuristicLab.Encodings.PackingEncoding.PackingSequence; 11 12 using HeuristicLab.Encodings.PermutationEncoding; … … 20 21 21 22 22 public static Observable Dictionary<int, ThreeDimensionalPacking> ExtremePointBasedPacking(ref MultiComponentVectorEncoding solution,23 ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures ) {23 public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> ExtremePointBasedPacking(ref MultiComponentVectorEncoding solution, 24 ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, bool stackingConstraints) { 24 25 25 26 #region Preperations … … 97 98 } 98 99 99 return itemPositions;100 } 101 102 103 public static Observable Dictionary<int, ThreeDimensionalPacking> ExtremePointBasedPacking(GroupingVectorEncoding solution,104 ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures ) {100 return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 101 } 102 103 104 public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> ExtremePointBasedPacking(GroupingVectorEncoding solution, 105 ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, bool stackingConstraints) { 105 106 106 107 #region Preperations … … 139 140 140 141 extremePointsForBin[binNr] = OrderExtremePoints(extremePointsForBin[binNr], occupiedPoints, binMeasures); 141 var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePointsForBin[binNr], occupiedPoints, itemPositions );142 var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePointsForBin[binNr], occupiedPoints, itemPositions, stackingConstraints); 142 143 if (positionFound != null) { 143 144 extremePointsForBin[binNr].Remove(positionFound); … … 162 163 163 164 extremePointsForBin[binNr] = OrderExtremePoints(extremePointsForBin[binNr], occupiedPoints, binMeasures); 164 var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePointsForBin[binNr], occupiedPoints, itemPositions );165 var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePointsForBin[binNr], occupiedPoints, itemPositions, stackingConstraints); 165 166 if (positionFound != null) { 166 167 extremePointsForBin[binNr].Remove(positionFound); … … 179 180 } 180 181 181 return itemPositions;182 } 183 184 185 public static Observable Dictionary<int, ThreeDimensionalPacking> ExtremePointBasedPacking(PackingSequenceEncoding solution,186 ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures ) {182 return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 183 } 184 185 186 public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> ExtremePointBasedPacking(PackingSequenceEncoding solution, 187 ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, bool stackingConstraints) { 187 188 188 189 #region Preperations … … 200 201 var item = itemMeasures[itemIndex]; 201 202 extremePoints = OrderExtremePoints(extremePoints, occupiedPoints, binMeasures); 202 var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions );203 var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions, stackingConstraints); 203 204 if (positionFound != null) { 204 205 extremePoints.Remove(positionFound); … … 214 215 } 215 216 216 return itemPositions; 217 } 217 return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins); 218 } 219 220 218 221 219 222 220 223 public static ThreeDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, 221 HashSet<ThreeDimensionalPacking> extremePoints, List<int[, ,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions) { 222 return FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions, false); 223 } 224 HashSet<ThreeDimensionalPacking> extremePoints, List<int[, ,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, bool stackingConstraints) { 225 return FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions, stackingConstraints, false); 226 } 227 public static ThreeDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, 228 HashSet<ThreeDimensionalPacking> extremePoints, List<int[, ,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, bool stackingConstraints, bool rotated) { 229 230 var itemFromList = itemMeasures[itemIndex]; 231 CuboidPackingItem item = new CuboidPackingItem( 232 rotated ? itemFromList.Depth : itemFromList.Width, 233 itemFromList.Height, 234 rotated ? itemFromList.Width : itemFromList.Depth, 235 itemFromList.TargetBin); 236 237 int epIndex = 0; 238 while (epIndex < extremePoints.Count && 239 //(!IsPositionFeasible(binMeasures, item, extremePoints.ElementAt(epIndex), occupiedPoints) || 240 (!DeepestBottomLeftFunctions.IsPositionFeasible(binMeasures, extremePoints.ElementAt(epIndex).AssignedBin, item, extremePoints.ElementAt(epIndex), itemPositions, itemMeasures) || 241 (stackingConstraints && !IsStaticStable(occupiedPoints[extremePoints.ElementAt(epIndex).AssignedBin], item, extremePoints.ElementAt(epIndex))))) 242 { epIndex++; } 243 244 if (epIndex < extremePoints.Count) { 245 var result = extremePoints.ElementAt(epIndex); 246 result.Rotated = rotated; 247 return result; 248 } 249 return null; 250 } 251 252 224 253 public static ThreeDimensionalPacking FindExtremePointForItemUsingMaterialAndWeightConstraint(int itemIndex, ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, 225 254 HashSet<ThreeDimensionalPacking> extremePoints, List<int[, ,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, bool rotated) { … … 234 263 int epIndex = 0; 235 264 while (epIndex < extremePoints.Count && 265 //(!IsPositionFeasible(binMeasures, item, extremePoints.ElementAt(epIndex), occupiedPoints) || 236 266 (!DeepestBottomLeftFunctions.IsPositionFeasible(binMeasures, extremePoints.ElementAt(epIndex).AssignedBin, item, extremePoints.ElementAt(epIndex), itemPositions, itemMeasures) || 237 267 !IsStaticStable(occupiedPoints[extremePoints.ElementAt(epIndex).AssignedBin], item, extremePoints.ElementAt(epIndex)) || … … 243 273 return result; 244 274 } 245 return null;246 }247 public static ThreeDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures,248 HashSet<ThreeDimensionalPacking> extremePoints, List<int[,,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, bool rotated) {249 250 var itemFromList = itemMeasures[itemIndex];251 CuboidPackingItem item = new CuboidPackingItem(252 rotated ? itemFromList.Depth : itemFromList.Width,253 itemFromList.Height,254 rotated ? itemFromList.Width : itemFromList.Depth,255 itemFromList.TargetBin);256 257 int epIndex = 0;258 while (epIndex < extremePoints.Count &&259 (!DeepestBottomLeftFunctions.IsPositionFeasible(binMeasures, extremePoints.ElementAt(epIndex).AssignedBin, item, extremePoints.ElementAt(epIndex), itemPositions, itemMeasures) ||260 !IsStaticStable(occupiedPoints[extremePoints.ElementAt(epIndex).AssignedBin], item, extremePoints.ElementAt(epIndex))))261 { epIndex++; }262 263 if (epIndex < extremePoints.Count) {264 var result = extremePoints.ElementAt(epIndex);265 result.Rotated = rotated;266 return result;267 }268 275 return null; 269 276 } … … 439 446 return shortestSide; 440 447 } 448 449 441 450 } 442 451 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ISOContainerMultiComponentVectorDecoder3D.cs
r9563 r9593 62 62 63 63 PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result = 64 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>( new ObservableDictionary<int, CuboidPackingBin>(), itemMeasures);65 64 new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(); 65 /* 66 66 #region Preperations 67 67 int nrOfBins = solution.NrOfBins; … … 153 153 } 154 154 155 result.PackingItemPositions = itemPositions; 156 result.PackingBinMeasures = resultingBinMeasures; 155 result.BinPackings = BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, resultingBinMeasures, itemMeasures, nrOfBins); */ 157 156 return result; 158 157 }
Note: See TracChangeset
for help on using the changeset viewer.