Changeset 9593 for branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointsFunctions3D.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/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 }
Note: See TracChangeset
for help on using the changeset viewer.