Changeset 15229 for branches/BinPackingExtension/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/ExtremePointPermutationDecoderBase.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/ExtremePointPermutationDecoderBase.cs
r14976 r15229 19 19 */ 20 20 #endregion 21 22 using System; 21 23 22 using System.Collections.Generic; 24 using System.Linq;25 23 using HeuristicLab.Common; 26 24 using HeuristicLab.Core; … … 41 39 42 40 public abstract Solution Decode(Permutation permutation, PackingShape binShape, IList<PackingItem> items, bool useStackingConstraints); 43 44 public virtual bool FindExtremePointForItem(Dictionary<Tuple<BinPacking3D, PackingPosition>, int> PointsSpace, PackingItem item, bool rotated, bool stackingConstraints, out BinPacking3D bin, out PackingPosition pos) {45 46 PackingItem newItem = new PackingItem(47 rotated ? item.Depth : item.Width,48 item.Height,49 rotated ? item.Width : item.Depth,50 item.TargetBin, item.Weight, item.Material);51 52 var EPoints = PointsSpace.Keys.ToList();53 BinPacking3D bp;54 PackingPosition position;55 int epIndex = 0;56 while (epIndex < EPoints.Count && (57 !(((bp = EPoints.ElementAt(epIndex).Item1)).IsPositionFeasible(newItem, (position = EPoints.ElementAt(epIndex).Item2)))58 || !bp.IsSupportedByAtLeastOnePoint(newItem, position)59 || (stackingConstraints && !bp.IsStaticStable(newItem, position))60 || (stackingConstraints && !bp.IsWeightSupported(newItem, position))61 )) { epIndex++; }62 63 if (epIndex < EPoints.Count) {64 bin = EPoints.ElementAt(epIndex).Item1;65 var origPoint = EPoints.ElementAt(epIndex).Item2;66 pos = new PackingPosition(origPoint.AssignedBin, origPoint.X, origPoint.Y, origPoint.Z, rotated);67 68 return true;69 }70 bin = null;71 pos = null;72 return false;73 }74 75 public virtual Dictionary<Tuple<BinPacking3D, PackingPosition>, int> GetResidualSpaceAllPoints(Solution solution, PackingItem item) {76 Dictionary<Tuple<BinPacking3D, PackingPosition>, int> result = new Dictionary<Tuple<BinPacking3D, PackingPosition>, int>();77 foreach (BinPacking3D bp in solution.Bins) {78 foreach (var ep in bp.ExtremePoints) {79 result.Add(Tuple.Create(bp, ep), bp.GetResidualSpace(item, ep));80 }81 }82 return result;83 }84 85 public virtual bool ExtremePointBasedPacking(Dictionary<Tuple<BinPacking3D, PackingPosition>, int> PointsSpace, int itemID, IList<PackingItem> items, bool stackingConstraints) {86 BinPacking3D bp;87 PackingPosition positionFound;88 var item = items[itemID];89 if (FindExtremePointForItem(PointsSpace, item, false, stackingConstraints, out bp, out positionFound)) {90 bp.PackItem(itemID, item, positionFound);91 return true;92 }93 return false;94 }95 41 } 96 42 }
Note: See TracChangeset
for help on using the changeset viewer.