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/FreeVolumeBestFitExtremePointPermutationDecoder.cs

    r14976 r15229  
    4444
    4545    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) {
    4650      Solution result = new Solution(binShape, useExtremePoints: true, stackingConstraints: useStackingConstraints);
    4751      IList<int> remainingIDs = new List<int>(permutation);
     
    5155      foreach (int ID in remainingIDs) {
    5256        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          }
    5666        }
    57         if (notPacked == result.NrOfBins) {
     67        if (!posFound) {
    5868          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);
    6072          result.Bins.Add(bp);
    6173        }
Note: See TracChangeset for help on using the changeset viewer.