Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/06/13 03:12:42 (11 years ago)
Author:
jhelm
Message:

#1966: Applied some heavy refactoring on the decoder-classes and cleaned up the code a bit;

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/DBL/DeepestBottomLeftFunctions.cs

    r9563 r9593  
    77using HeuristicLab.Encodings.PackingEncoding.GroupingVector;
    88using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector;
     9using HeuristicLab.Encodings.PackingEncoding.PackingPlan;
    910using HeuristicLab.Encodings.PackingEncoding.PackingSequence;
    1011using HeuristicLab.Encodings.PermutationEncoding;
     
    1819  public static class DeepestBottomLeftFunctions {
    1920
    20     public static ObservableDictionary<int, ThreeDimensionalPacking> DeepestLeftBottomPacking(MultiComponentVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {
     21    public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> DeepestLeftBottomPacking(MultiComponentVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {
    2122      int nrOfBins = solution.NrOfBins;
    2223
     
    2829      }
    2930
    30       ObservableDictionary<int, ThreeDimensionalPacking> packingPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();
     31      ObservableDictionary<int, ThreeDimensionalPacking> itemPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();
    3132      var remainingItems = new List<PackingInformation>();
    3233
     
    4041          ThreeDimensionalPacking position = null;
    4142
    42           position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures, unpackedItems[i].Rotated);
    43 
    44           if (position == null) {
    45             position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures, !unpackedItems[i].Rotated);
     43          position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures, unpackedItems[i].Rotated);
     44
     45          if (position == null) {
     46            position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures, !unpackedItems[i].Rotated);
    4647          }
    4748          if (position == null) {
     
    4950            solution.PackingInformations[binNr].Remove(unpackedItems[i]);
    5051          } else {
    51             packingPositions[itemIndex] = position;
     52            itemPositions[itemIndex] = position;
    5253            solution.PackingInformations[binNr].Find(pi => pi.ItemID == itemIndex).Rotated = position.Rotated;
    5354          }
     
    6566
    6667          //Look for space in current bin
    67           position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures, unpackedItems[i].Rotated);
    68 
    69           if (position == null) {
    70             position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures, !unpackedItems[i].Rotated);
     68          position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures, unpackedItems[i].Rotated);
     69
     70          if (position == null) {
     71            position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures, !unpackedItems[i].Rotated);
    7172          }
    7273          if (position != null) {
    73             packingPositions[itemIndex] = position;
     74            itemPositions[itemIndex] = position;
    7475            remainingItems.Remove(unpackedItems[i]);
    7576            solution.PackingInformations[binNr].Add(unpackedItems[i]);
     
    8384      }
    8485
    85       return packingPositions;
    86     }
    87 
    88     public static ObservableDictionary<int, ThreeDimensionalPacking> DeepestLeftBottomPacking(GroupingVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {
     86      return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins);
     87    }
     88
     89    public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> DeepestLeftBottomPacking(GroupingVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {
    8990      int nrOfBins = solution.GroupingVector.Max() + 1;
    9091
     
    100101      }
    101102
    102       ObservableDictionary<int, ThreeDimensionalPacking> packingPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();
     103      ObservableDictionary<int, ThreeDimensionalPacking> itemPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();
    103104      var remainingItems = new List<int>();
    104105
     
    112113          ThreeDimensionalPacking position = null;
    113114
    114           position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures);
     115          position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures);
    115116
    116117          if (position == null) {
    117118            remainingItems.Add(itemIndex);
    118119          } else
    119             packingPositions[itemIndex] = position;
     120            itemPositions[itemIndex] = position;
    120121        }
    121122      }
     
    131132
    132133          //Look for space in current bin
    133           position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures);
     134          position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures);
    134135
    135136          if (position != null) {
    136             packingPositions[itemIndex] = position;
     137            itemPositions[itemIndex] = position;
    137138            remainingItems.Remove(itemIndex);
    138139            //solution.GroupingVector[itemIndex] = binNr;
     
    144145      }
    145146
    146       return packingPositions;
    147     }
    148 
    149     public static ObservableDictionary<int, ThreeDimensionalPacking> DeepestLeftBottomPacking(PackingSequenceEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {
    150       ObservableDictionary<int, ThreeDimensionalPacking> packingPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();
     147      return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins);
     148    }
     149
     150    public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> DeepestLeftBottomPacking(PackingSequenceEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {
     151      ObservableDictionary<int, ThreeDimensionalPacking> itemPositions = new ObservableDictionary<int, ThreeDimensionalPacking>();
    151152      int nrOfBins = 1;
    152153      for (int i = 0; i < solution.PackingSequence.Length; i++) {
     
    155156        //Look for space in existing bins
    156157        for (int binNr = 0; binNr < nrOfBins; binNr++) {
    157           position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, packingPositions, itemMeasures);
     158          position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, binNr, item, itemPositions, itemMeasures);
    158159          if (position != null)
    159160            break;
     
    162163        if (position == null) {
    163164          nrOfBins++;
    164           position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, nrOfBins - 1, item, packingPositions, itemMeasures);
     165          position = DeepestBottomLeftFunctions.DeepestLeftBottomPosition(binMeasures, nrOfBins - 1, item, itemPositions, itemMeasures);
    165166        }
    166167
     
    168169          position = new ThreeDimensionalPacking(-1, 0, 0, 0);
    169170
    170         packingPositions[solution.PackingSequence[i]] = position;
    171       }
    172 
    173       return packingPositions;
     171        itemPositions[solution.PackingSequence[i]] = position;
     172      }
     173
     174      return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins);
    174175    }
    175176
     
    204205    }
    205206
     207   
     208
    206209    public static bool IsPositionFeasible(CuboidPackingBin binMeasures, int binNr, CuboidPackingItem currentItem,
    207210      ThreeDimensionalPacking currentPosition, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, ItemList<CuboidPackingItem> itemMeasures) {
     
    233236    }
    234237
    235 
    236  
    237238  }
    238239}
Note: See TracChangeset for help on using the changeset viewer.