Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/13/17 15:22:59 (7 years ago)
Author:
abeham
Message:

#2762:

  • Implemented review comments
  • Fixed ResidualSpaceBestFitExtremePointPermutationDecoder by sorting from smallest to largest (merit function should be minimized)
  • Some restructuring of the methods
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/BinPackingExtension/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/ExtremePointPermutationDecoderBase.cs

    r14976 r15229  
    1919 */
    2020#endregion
    21 
    22 using System;
     21 
    2322using System.Collections.Generic;
    24 using System.Linq;
    2523using HeuristicLab.Common;
    2624using HeuristicLab.Core;
     
    4139
    4240    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     }
    9541  }
    9642}
Note: See TracChangeset for help on using the changeset viewer.