Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/28/17 16:10:31 (6 years ago)
Author:
rhanghof
Message:

#2817:

  • Added line projection based bin packing
  • Added residual spaces to the view
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2817-BinPackingSpeedup/HeuristicLab.Problems.BinPacking/3.3/3D/Packer/BinPackerFirstFit.cs

    r15473 r15488  
    2020#endregion
    2121
     22using HeuristicLab.Common;
    2223using HeuristicLab.Core;
    2324using HeuristicLab.Encodings.PermutationEncoding;
    2425using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     26using HeuristicLab.Problems.BinPacking3D.ExtremePointCreation;
    2527using System;
    2628using System.Collections.Generic;
     
    3032
    3133namespace HeuristicLab.Problems.BinPacking3D.Packer {
     34  public class BinPackerFirstFit : BinPacker {
     35    #region Constructors for HEAL
     36    [StorableConstructor]
     37    protected BinPackerFirstFit(bool deserializing) : base(deserializing) { }
    3238
    33   [Item("BinPackerFirstFit", "A class for packing bins for the 3D bin-packer problem. It uses a first fit algorithm")]
    34   [StorableClass]
    35   public class BinPackerFirstFit : BinPacker {
     39    protected BinPackerFirstFit(BinPackerFirstFit original, Cloner cloner)
     40      : base(original, cloner) {
     41    }
     42
     43    public override IDeepCloneable Clone(Cloner cloner) {
     44      return new BinPackerFirstFit(this, cloner);
     45    }
     46    #endregion
    3647
    3748    public BinPackerFirstFit() : base() { }   
     
    4152    /// </summary>
    4253    /// <returns>Returns a collection of bin packing 3d objects. Each object represents a bin and the packed items</returns>
    43     public override IList<BinPacking3D> PackItems(Permutation sortedItems, PackingShape binShape, IList<PackingItem> items, bool useStackingConstraints) {
     54    public override IList<BinPacking3D> PackItems(Permutation sortedItems, PackingShape binShape, IList<PackingItem> items, ExtremePointCreationMethod epGenerationMethod, bool useStackingConstraints) {
    4455      IList<BinPacking3D> packingList = new List<BinPacking3D>();
    4556      IList<int> remainingIds = new List<int>(sortedItems);
     
    4758      while (remainingIds.Count > 0) {
    4859        BinPacking3D packingBin = new BinPacking3D(binShape);
    49         PackRemainingItems(ref remainingIds, ref packingBin, items, useStackingConstraints, null);
     60        PackRemainingItems(ref remainingIds, ref packingBin, items, epGenerationMethod, useStackingConstraints, null);
    5061        packingList.Add(packingBin);
    5162      }
     
    6071    /// <param name="items">List of packing items. Some of the items will be assigned to the BinPacking3D object</param>
    6172    /// <param name="packingBin">This object will be filled with some of the given items</param>
    62     protected void PackRemainingItems(ref IList<int> remainingIds, ref BinPacking3D packingBin, IList<PackingItem> items, bool useStackingConstraints, Dictionary<int, bool> rotationArray) {
    63 
     73    protected void PackRemainingItems(ref IList<int> remainingIds, ref BinPacking3D packingBin, IList<PackingItem> items, ExtremePointCreationMethod epCreationMethod, bool useStackingConstraints, Dictionary<int, bool> rotationArray) {
     74      IExtremePointCreator extremePointCreator = ExtremePointCreatorFactory.CreateExtremePointCreator(epCreationMethod, useStackingConstraints);
    6475      foreach (var itemId in new List<int>(remainingIds)) {
    6576        bool rotated = rotationArray == null ? false : rotationArray[itemId];
     
    6778        // if a valid packing position could be found, the current item can be added to the given bin
    6879        if (position != null) {
    69           PackItem(packingBin, itemId, items[itemId], position, useStackingConstraints);
     80          PackItem(packingBin, itemId, items[itemId], position, extremePointCreator, useStackingConstraints);
    7081          remainingIds.Remove(itemId);
    7182        }
Note: See TracChangeset for help on using the changeset viewer.