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;

Location:
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointGroupingVectorDecoder3D.cs

    r9563 r9593  
    3737using HeuristicLab.Problems.BinPacking.Interfaces;
    3838using HeuristicLab.Encodings.PackingEncoding.GroupingVector;
     39using HeuristicLab.Parameters;
    3940
    4041namespace HeuristicLab.Problems.BinPacking.Decoders {
     
    4647      CuboidPackingItem>, I3DGVDecoder {
    4748
     49    public ValueParameter<BoolValue> StackingConstraintsParameter {
     50      get { return (ValueParameter<BoolValue>)Parameters["StackingConstraint"]; }
     51    }
     52
    4853    public ExtremePointGroupingVectorDecoder3D ()
    4954      : base() {
     55      Parameters.Add(new ValueParameter<BoolValue>("StackingConstraint", "A flag determining whether stackingconstraints should be enforced or not."));
    5056    }
    5157    [StorableConstructor]
     
    5864    }
    5965
    60     public static PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> Decode(GroupingVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {
     66    public static PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> Decode(GroupingVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures, bool stackingConstraints) {
    6167      PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result =
    62         new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures, itemMeasures);
     68        new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures);
    6369
    64       result.PackingItemPositions = ExtremePointsFunctions3D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);
     70      result.BinPackings = ThreeDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures, stackingConstraints);
    6571
    6672      return result;
     
    7278      if (solution == null) throw new InvalidOperationException("Encoding is not of type GroupingVector");
    7379
    74       return Decode(solution, binMeasures, itemMeasures);
     80      return Decode(solution, binMeasures, itemMeasures, StackingConstraintsParameter.Value.Value);
    7581    }
    7682  }
  • branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointMultiComponentVectorDecoder3D.cs

    r9563 r9593  
    3838using HeuristicLab.Encodings.PackingEncoding.GroupingVector;
    3939using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector;
     40using HeuristicLab.Parameters;
    4041
    4142namespace HeuristicLab.Problems.BinPacking.Decoders {
     
    4748      CuboidPackingItem>, I3DMCVDecoder {
    4849
     50    public ValueParameter<BoolValue> StackingConstraintsParameter {
     51      get { return (ValueParameter<BoolValue>)Parameters["StackingConstraint"]; }
     52    }
     53
    4954    public ExtremePointMultiComponentVectorDecoder3D ()
    5055      : base() {
     56      Parameters.Add(new ValueParameter<BoolValue>("StackingConstraint", "A flag determining whether stackingconstraints should be enforced or not."));
    5157    }
    5258    [StorableConstructor]
     
    5965    }
    6066
    61     public static PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> Decode(MultiComponentVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures) {
     67    public static PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> Decode(MultiComponentVectorEncoding solution, CuboidPackingBin binMeasures, ItemList<CuboidPackingItem> itemMeasures, bool stackingConstraints) {
    6268      PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result =
    63         new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures, itemMeasures);
     69        new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures);
    6470
    65       result.PackingItemPositions = ExtremePointsFunctions3D.ExtremePointBasedPacking(ref solution, itemMeasures, binMeasures);
     71      result.BinPackings = ThreeDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures, stackingConstraints);
    6672
    6773      return result;
     
    7379      if (solution == null) throw new InvalidOperationException("Encoding is not of type MultiComponentVector");
    7480
    75       return Decode(solution, binMeasures, itemMeasures);
     81      return Decode(solution, binMeasures, itemMeasures, StackingConstraintsParameter.Value.Value);
    7682    }
    7783  }
  • branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointPackingSequenceDecoder3D.cs

    r9563 r9593  
    3636using HeuristicLab.Encodings.PackingEncoding.PackingSequence;
    3737using HeuristicLab.Problems.BinPacking.Interfaces;
     38using HeuristicLab.Parameters;
    3839
    3940namespace HeuristicLab.Problems.BinPacking.Decoders {
     
    4546      CuboidPackingItem>, I3DPSDecoder {
    4647
     48    public ValueParameter<BoolValue> StackingConstraintsParameter {
     49      get { return (ValueParameter<BoolValue>)Parameters["StackingConstraint"]; }
     50    }
     51
    4752    public ExtremePointPackingSequenceDecoder3D ()
    4853      : base() {
     54        Parameters.Add(new ValueParameter<BoolValue>("StackingConstraint", "A flag determining whether stackingconstraints should be enforced or not."));
    4955    }
    5056    [StorableConstructor]
     
    6470
    6571      PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result =
    66         new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures, itemMeasures);
     72        new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(binMeasures);
    6773
    68       result.PackingItemPositions = ExtremePointsFunctions3D.ExtremePointBasedPacking(solution, itemMeasures, binMeasures);
     74      result.BinPackings = ThreeDimensionalPackingFunctions.ExtremePointBasedPacking(solution, itemMeasures, binMeasures, StackingConstraintsParameter.Value.Value);
    6975
    7076      return result;
  • branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ExtremePointsFunctions3D.cs

    r9563 r9593  
    88using HeuristicLab.Encodings.PackingEncoding.GroupingVector;
    99using HeuristicLab.Encodings.PackingEncoding.MultiComponentVector;
     10using HeuristicLab.Encodings.PackingEncoding.PackingPlan;
    1011using HeuristicLab.Encodings.PackingEncoding.PackingSequence;
    1112using HeuristicLab.Encodings.PermutationEncoding;
     
    2021
    2122
    22     public static ObservableDictionary<int, ThreeDimensionalPacking> ExtremePointBasedPacking(ref MultiComponentVectorEncoding solution,
    23         ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures) {
     23    public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> ExtremePointBasedPacking(ref MultiComponentVectorEncoding solution,
     24        ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, bool stackingConstraints) {
    2425
    2526      #region Preperations
     
    9798      }
    9899
    99       return itemPositions;
    100     }
    101 
    102 
    103     public static ObservableDictionary<int, ThreeDimensionalPacking> ExtremePointBasedPacking(GroupingVectorEncoding solution,
    104         ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures) {
     100      return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins);
     101    }
     102
     103
     104    public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> ExtremePointBasedPacking(GroupingVectorEncoding solution,
     105        ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, bool stackingConstraints) {
    105106
    106107      #region Preperations
     
    139140
    140141          extremePointsForBin[binNr] = OrderExtremePoints(extremePointsForBin[binNr], occupiedPoints, binMeasures);
    141           var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePointsForBin[binNr], occupiedPoints, itemPositions);
     142          var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePointsForBin[binNr], occupiedPoints, itemPositions, stackingConstraints);
    142143          if (positionFound != null) {
    143144            extremePointsForBin[binNr].Remove(positionFound);
     
    162163
    163164          extremePointsForBin[binNr] = OrderExtremePoints(extremePointsForBin[binNr], occupiedPoints, binMeasures);
    164           var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePointsForBin[binNr], occupiedPoints, itemPositions);
     165          var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePointsForBin[binNr], occupiedPoints, itemPositions, stackingConstraints);
    165166          if (positionFound != null) {
    166167            extremePointsForBin[binNr].Remove(positionFound);
     
    179180      }
    180181
    181       return itemPositions;
    182     }
    183 
    184 
    185     public static ObservableDictionary<int, ThreeDimensionalPacking> ExtremePointBasedPacking(PackingSequenceEncoding solution,
    186         ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures) {
     182      return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins);
     183    }
     184
     185
     186    public static ObservableList<BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>> ExtremePointBasedPacking(PackingSequenceEncoding solution,
     187        ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures, bool stackingConstraints) {
    187188
    188189      #region Preperations
     
    200201        var item = itemMeasures[itemIndex];
    201202        extremePoints = OrderExtremePoints(extremePoints, occupiedPoints, binMeasures);
    202         var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions);
     203        var positionFound = FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions, stackingConstraints);
    203204        if (positionFound != null) {
    204205          extremePoints.Remove(positionFound);
     
    214215      }
    215216
    216       return itemPositions;
    217     }
     217      return BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, binMeasures, itemMeasures, nrOfBins);
     218    }
     219
     220
    218221
    219222
    220223    public static ThreeDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures,
    221         HashSet<ThreeDimensionalPacking> extremePoints, List<int[, ,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions) {
    222           return FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions, false);
    223     }
     224        HashSet<ThreeDimensionalPacking> extremePoints, List<int[, ,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, bool stackingConstraints) {
     225          return FindExtremePointForItem(itemIndex, itemMeasures, binMeasures, extremePoints, occupiedPoints, itemPositions, stackingConstraints, false);
     226    }
     227    public static ThreeDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures,
     228        HashSet<ThreeDimensionalPacking> extremePoints, List<int[, ,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, bool stackingConstraints, bool rotated) {
     229
     230      var itemFromList = itemMeasures[itemIndex];
     231      CuboidPackingItem item = new CuboidPackingItem(
     232        rotated ? itemFromList.Depth : itemFromList.Width,
     233        itemFromList.Height,
     234        rotated ? itemFromList.Width : itemFromList.Depth,
     235        itemFromList.TargetBin);
     236
     237      int epIndex = 0;
     238      while (epIndex < extremePoints.Count &&   
     239        //(!IsPositionFeasible(binMeasures, item, extremePoints.ElementAt(epIndex), occupiedPoints) ||
     240        (!DeepestBottomLeftFunctions.IsPositionFeasible(binMeasures, extremePoints.ElementAt(epIndex).AssignedBin, item, extremePoints.ElementAt(epIndex), itemPositions, itemMeasures) ||
     241        (stackingConstraints && !IsStaticStable(occupiedPoints[extremePoints.ElementAt(epIndex).AssignedBin], item, extremePoints.ElementAt(epIndex)))))
     242      { epIndex++; }
     243
     244      if (epIndex < extremePoints.Count) {
     245        var result = extremePoints.ElementAt(epIndex);
     246        result.Rotated = rotated;
     247        return result;
     248      }
     249      return null;
     250    }
     251
     252
    224253    public static ThreeDimensionalPacking FindExtremePointForItemUsingMaterialAndWeightConstraint(int itemIndex, ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures,
    225254       HashSet<ThreeDimensionalPacking> extremePoints, List<int[, ,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, bool rotated) {
     
    234263      int epIndex = 0;
    235264      while (epIndex < extremePoints.Count &&
     265        //(!IsPositionFeasible(binMeasures, item, extremePoints.ElementAt(epIndex), occupiedPoints) || 
    236266        (!DeepestBottomLeftFunctions.IsPositionFeasible(binMeasures, extremePoints.ElementAt(epIndex).AssignedBin, item, extremePoints.ElementAt(epIndex), itemPositions, itemMeasures) ||
    237267        !IsStaticStable(occupiedPoints[extremePoints.ElementAt(epIndex).AssignedBin], item, extremePoints.ElementAt(epIndex)) ||
     
    243273        return result;
    244274      }
    245       return null;
    246     }
    247     public static ThreeDimensionalPacking FindExtremePointForItem(int itemIndex, ItemList<CuboidPackingItem> itemMeasures, CuboidPackingBin binMeasures,
    248         HashSet<ThreeDimensionalPacking> extremePoints, List<int[,,]> occupiedPoints, ObservableDictionary<int, ThreeDimensionalPacking> itemPositions, bool rotated) {
    249 
    250       var itemFromList = itemMeasures[itemIndex];
    251       CuboidPackingItem item = new CuboidPackingItem(
    252         rotated ? itemFromList.Depth : itemFromList.Width,
    253         itemFromList.Height,
    254         rotated ? itemFromList.Width : itemFromList.Depth,
    255         itemFromList.TargetBin);
    256 
    257       int epIndex = 0;
    258       while (epIndex < extremePoints.Count &&
    259         (!DeepestBottomLeftFunctions.IsPositionFeasible(binMeasures, extremePoints.ElementAt(epIndex).AssignedBin, item, extremePoints.ElementAt(epIndex), itemPositions, itemMeasures) ||
    260         !IsStaticStable(occupiedPoints[extremePoints.ElementAt(epIndex).AssignedBin], item, extremePoints.ElementAt(epIndex))))
    261       { epIndex++; }
    262 
    263       if (epIndex < extremePoints.Count) {
    264         var result = extremePoints.ElementAt(epIndex);
    265         result.Rotated = rotated;
    266         return result;
    267       }
    268275      return null;
    269276    }
     
    439446      return shortestSide;
    440447    }
     448
     449   
    441450  }
    442451}
  • branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Decoders/3D/EP/ISOContainerMultiComponentVectorDecoder3D.cs

    r9563 r9593  
    6262     
    6363      PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem> result =
    64         new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>(new ObservableDictionary<int, CuboidPackingBin>(), itemMeasures);
    65 
     64        new PackingPlan<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>();
     65                                                                   /*
    6666      #region Preperations
    6767      int nrOfBins = solution.NrOfBins;
     
    153153      }
    154154
    155       result.PackingItemPositions = itemPositions;
    156       result.PackingBinMeasures = resultingBinMeasures;
     155      result.BinPackings = BinPacking<ThreeDimensionalPacking, CuboidPackingBin, CuboidPackingItem>.GetBinPackings(itemPositions, resultingBinMeasures, itemMeasures, nrOfBins);   */
    157156      return result;
    158157    }
Note: See TracChangeset for help on using the changeset viewer.