Changeset 9593 for branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP
- Timestamp:
- 06/06/13 03:12:42 (11 years ago)
- Location:
- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
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.