Changeset 15229 for branches/BinPackingExtension/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/FreeVolumeBestFitExtremePointPermutationDecoder.cs
- Timestamp:
- 07/13/17 15:22:59 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/BinPackingExtension/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/FreeVolumeBestFitExtremePointPermutationDecoder.cs
r14976 r15229 44 44 45 45 public override Solution Decode(Permutation permutation, PackingShape binShape, IList<PackingItem> items, bool useStackingConstraints) { 46 return Apply(permutation, binShape, items, useStackingConstraints); 47 } 48 49 public static Solution Apply(Permutation permutation, PackingShape binShape, IList<PackingItem> items, bool useStackingConstraints) { 46 50 Solution result = new Solution(binShape, useExtremePoints: true, stackingConstraints: useStackingConstraints); 47 51 IList<int> remainingIDs = new List<int>(permutation); … … 51 55 foreach (int ID in remainingIDs) { 52 56 var sortedBins = result.Bins.OrderBy(x => x.FreeVolume); 53 var notPacked = 0; 54 foreach (BinPacking3D bp in sortedBins) { 55 if (!bp.ExtremePointBasedPacking(ID, items, stackingConstraints: useStackingConstraints)) { notPacked++; } else break; 57 var item = items[ID]; 58 var posFound = false; 59 foreach (var bp in sortedBins) { 60 var pos = bp.FindExtremePointForItem(item, false, useStackingConstraints); 61 posFound = pos != null; 62 if (posFound) { 63 bp.PackItem(ID, item, pos); 64 break; 65 } 56 66 } 57 if ( notPacked == result.NrOfBins) {67 if (!posFound) { 58 68 var bp = new BinPacking3D(binShape); 59 bp.ExtremePointBasedPacking(ID, items, stackingConstraints: useStackingConstraints); 69 var pos = bp.FindExtremePointForItem(item, false, useStackingConstraints); 70 if (pos == null) throw new InvalidOperationException("Item " + ID + " cannot be packed in empty bin."); 71 bp.PackItem(ID, item, pos); 60 72 result.Bins.Add(bp); 61 73 }
Note: See TracChangeset
for help on using the changeset viewer.