Changeset 9593 for branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/2D/BL/BottomLeftFunctions.cs
- Timestamp:
- 06/06/13 03:12:42 (11 years ago)
- File:
-
- 1 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),
Note: See TracChangeset
for help on using the changeset viewer.