Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/09/13 12:58:39 (11 years ago)
Author:
jhelm
Message:

#1966: Bugfixing; Refactoring; Performancetuning;

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking/3.3/Encodings/PackingPlans/BinPacking2D.cs

    r9598 r9599  
    4141  public class BinPacking2D : BinPacking<TwoDimensionalPacking, RectangularPackingBin, RectangularPackingItem> {
    4242
    43     public BinPacking2D(RectangularPackingBin binMeasures) : base(binMeasures) {
    44       //OccupiedPoints = new OccupiedPoints2D(binMeasures);
     43    public BinPacking2D(RectangularPackingBin binMeasures)
     44      : base(binMeasures) {
     45      //ExtremePoints = new HashSet<TwoDimensionalPacking>();
     46      ExtremePoints = new SortedSet<TwoDimensionalPacking>(new EPComparer2D());
     47      ExtremePoints.Add(binMeasures.Origin);
    4548    }
    4649    [StorableConstructor]
     
    4851    protected BinPacking2D(BinPacking2D original, Cloner cloner)
    4952      : base(original, cloner) {
     53      this.ExtremePoints = new SortedSet<TwoDimensionalPacking>(original.ExtremePoints, new EPComparer2D());
    5054    }
    5155    public override IDeepCloneable Clone(Cloner cloner) {
     
    6266      if (sourcePointX.X < BinMeasures.Width && sourcePointX.Y < BinMeasures.Height) {
    6367        //Traversing down the y-axis       
    64         while (sourcePointX.Y > 0 && (-1).Equals(IsPointOccupied(new TwoDimensionalPacking(0, sourcePointX.X, sourcePointX.Y - 1)))) {
     68        while (sourcePointX.Y > 0 && !IsPointOccupied(new TwoDimensionalPacking(0, sourcePointX.X, sourcePointX.Y - 1))) {
    6569          sourcePointX.Y--;
    6670        }
     
    7579      if (sourcePointY.X < BinMeasures.Width && sourcePointY.Y < BinMeasures.Height) {
    7680        //Traversing down the x-axis 
    77         while (sourcePointY.X > 0 && (-1).Equals(IsPointOccupied(new TwoDimensionalPacking (0,sourcePointY.X - 1, sourcePointY.Y)))) {
     81        while (sourcePointY.X > 0 && !IsPointOccupied(new TwoDimensionalPacking (0,sourcePointY.X - 1, sourcePointY.Y))) {
    7882          sourcePointY.X--;
    7983        }
     
    8185      }
    8286
    83       ExtremePoints = new HashSet<TwoDimensionalPacking>(ExtremePoints.
    84         OrderBy(ep => ep.X).
    85         ThenBy(ep => ep.Y).
    86         ThenBy(ep => ShortestPossibleSideFromPoint(ep)));
     87      //ExtremePoints.RemoveWhere(ep => IsPointOccupied(ep));
     88
     89      //ExtremePoints = new HashSet<TwoDimensionalPacking>(ExtremePoints.
     90      //  OrderBy(ep => ep.X).
     91      //  ThenBy(ep => ep.Y).
     92      //  ThenBy(ep => ShortestPossibleSideFromPoint(ep)));
    8793    }
    8894
     
    190196      throw new NotImplementedException();
    191197    }
     198
     199
     200    protected override void InitializeOccupationLayers() {
     201      for (int i = 0; i*10 <= BinMeasures.Width; i += 1 ) {
     202        OccupationLayers[i] = new List<int>();
     203      }
     204    }
     205    protected override void AddNewItemToOccupationLayers(int itemID, RectangularPackingItem measures, TwoDimensionalPacking position) {
     206      int x1 = position.X / 10;
     207      int x2 = (position.X + (position.Rotated ? measures.Height : measures.Width)) / 10;
     208
     209      for (int i = x1; i <= x2; i++)
     210        OccupationLayers[i].Add(itemID);
     211    }
     212    protected override List<int> GetLayerItemIDs(TwoDimensionalPacking position) {
     213      return OccupationLayers[position.X / 10];
     214    }
     215    protected override List<int> GetLayerItemIDs(RectangularPackingItem measures, TwoDimensionalPacking position) {
     216      List<int> result = new List<int> ();
     217      int x1 = position.X / 10;
     218      int x2 = (position.X + (position.Rotated ? measures.Height : measures.Width)) / 10;
     219
     220      for (int i = x1; i <= x2; i++)
     221        result.AddRange(OccupationLayers[i]);
     222
     223      return result;
     224    }
     225  }
     226  public class EPComparer2D : IComparer<TwoDimensionalPacking> {
     227    public int Compare(TwoDimensionalPacking a, TwoDimensionalPacking b) {
     228      int result = a.X.CompareTo(b.X);
     229      if (result == 0)
     230        result = a.Y.CompareTo(b.Y);
     231
     232      return result;
     233    }
    192234  }
    193235}
Note: See TracChangeset for help on using the changeset viewer.