- Timestamp:
- 07/12/16 19:54:35 (8 years ago)
- Location:
- branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3
- Files:
-
- 15 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/BinPacking3D.cs
r14046 r14048 30 30 [Item("BinPacking3D", "Represents a single-bin packing for a 3D bin-packing problem.")] 31 31 [StorableClass] 32 public class BinPacking3D : BinPacking< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> {32 public class BinPacking3D : BinPacking<PackingPosition, CuboidPackingShape, CuboidPackingItem> { 33 33 34 34 public BinPacking3D(CuboidPackingShape binMeasures) 35 35 : base(binMeasures) { 36 ExtremePoints = new SortedSet< ThreeDimensionalPacking>(new EPComparer3D());36 ExtremePoints = new SortedSet<PackingPosition>(new EPComparer3D()); 37 37 ExtremePoints.Add(binMeasures.Origin); 38 38 } … … 42 42 : base(original, cloner) { 43 43 this.depthWasDoubled = original.depthWasDoubled; 44 this.ExtremePoints = new SortedSet< ThreeDimensionalPacking>(original.ExtremePoints, new EPComparer3D());44 this.ExtremePoints = new SortedSet<PackingPosition>(original.ExtremePoints, new EPComparer3D()); 45 45 } 46 46 public override IDeepCloneable Clone(Cloner cloner) { … … 48 48 } 49 49 50 protected override void GenerateNewExtremePointsForNewItem(CuboidPackingItem newItem, ThreeDimensionalPackingposition) {50 protected override void GenerateNewExtremePointsForNewItem(CuboidPackingItem newItem, PackingPosition position) { 51 51 int newWidth = position.Rotated ? newItem.Depth : newItem.Width; 52 52 int newDepth = position.Rotated ? newItem.Width : newItem.Depth; 53 53 54 54 //Find ExtremePoints beginning from sourcepointX 55 var sourcePointX = new ThreeDimensionalPacking(0, position.X + newWidth, position.Y, position.Z);55 var sourcePointX = new PackingPosition(0, position.X + newWidth, position.Y, position.Z); 56 56 if (sourcePointX.X < BinMeasures.Width && sourcePointX.Y < BinMeasures.Height && sourcePointX.Z < BinMeasures.Depth) { 57 57 //Traversing down the y-axis 58 ThreeDimensionalPacking current = new ThreeDimensionalPacking(0, sourcePointX.X, sourcePointX.Y, sourcePointX.Z);59 while (current.Y > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveDown(current))) {60 current = ThreeDimensionalPacking.MoveDown(current);61 } 62 ExtremePoints.Add(( ThreeDimensionalPacking)current.Clone());63 while (current.X > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveLeft(current))) {64 current = ThreeDimensionalPacking.MoveLeft(current);58 PackingPosition current = new PackingPosition(0, sourcePointX.X, sourcePointX.Y, sourcePointX.Z); 59 while (current.Y > 0 && !IsPointOccupied(PackingPosition.MoveDown(current))) { 60 current = PackingPosition.MoveDown(current); 61 } 62 ExtremePoints.Add((PackingPosition)current.Clone()); 63 while (current.X > 0 && !IsPointOccupied(PackingPosition.MoveLeft(current))) { 64 current = PackingPosition.MoveLeft(current); 65 65 } 66 66 ExtremePoints.Add(current); 67 67 68 68 //Traversing down the z-axis 69 current = new ThreeDimensionalPacking(0, sourcePointX.X, sourcePointX.Y, sourcePointX.Z);70 while (current.Z > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveBack(current))) {71 current = ThreeDimensionalPacking.MoveBack(current);72 } 73 ExtremePoints.Add(( ThreeDimensionalPacking)current.Clone());74 while (current.Y > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveDown(current))) {75 current = ThreeDimensionalPacking.MoveDown(current);69 current = new PackingPosition(0, sourcePointX.X, sourcePointX.Y, sourcePointX.Z); 70 while (current.Z > 0 && !IsPointOccupied(PackingPosition.MoveBack(current))) { 71 current = PackingPosition.MoveBack(current); 72 } 73 ExtremePoints.Add((PackingPosition)current.Clone()); 74 while (current.Y > 0 && !IsPointOccupied(PackingPosition.MoveDown(current))) { 75 current = PackingPosition.MoveDown(current); 76 76 } 77 77 ExtremePoints.Add(current); … … 82 82 83 83 //Find ExtremePoints beginning from sourcepointY 84 var sourcePointY = new ThreeDimensionalPacking(0, position.X, position.Y + newItem.Height, position.Z);84 var sourcePointY = new PackingPosition(0, position.X, position.Y + newItem.Height, position.Z); 85 85 if (sourcePointY.X < BinMeasures.Width && sourcePointY.Y < BinMeasures.Height && sourcePointY.Z < BinMeasures.Depth) { 86 86 //Traversing down the x-axis 87 ThreeDimensionalPacking current = new ThreeDimensionalPacking(0, sourcePointY.X, sourcePointY.Y, sourcePointY.Z);88 while (current.X > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveLeft(current))) {89 current = ThreeDimensionalPacking.MoveLeft(current);90 } 91 ExtremePoints.Add(( ThreeDimensionalPacking)current.Clone());92 while (current.Y > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveDown(current))) {93 current = ThreeDimensionalPacking.MoveDown(current);87 PackingPosition current = new PackingPosition(0, sourcePointY.X, sourcePointY.Y, sourcePointY.Z); 88 while (current.X > 0 && !IsPointOccupied(PackingPosition.MoveLeft(current))) { 89 current = PackingPosition.MoveLeft(current); 90 } 91 ExtremePoints.Add((PackingPosition)current.Clone()); 92 while (current.Y > 0 && !IsPointOccupied(PackingPosition.MoveDown(current))) { 93 current = PackingPosition.MoveDown(current); 94 94 } 95 95 ExtremePoints.Add(current); 96 96 97 97 //Traversing down the z-axis 98 current = new ThreeDimensionalPacking(0, sourcePointY.X, sourcePointY.Y, sourcePointY.Z);99 while (current.Z > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveBack(current))) {100 current = ThreeDimensionalPacking.MoveBack(current);101 } 102 ExtremePoints.Add(( ThreeDimensionalPacking)current.Clone());103 while (current.Y > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveDown(current))) {104 current = ThreeDimensionalPacking.MoveDown(current);98 current = new PackingPosition(0, sourcePointY.X, sourcePointY.Y, sourcePointY.Z); 99 while (current.Z > 0 && !IsPointOccupied(PackingPosition.MoveBack(current))) { 100 current = PackingPosition.MoveBack(current); 101 } 102 ExtremePoints.Add((PackingPosition)current.Clone()); 103 while (current.Y > 0 && !IsPointOccupied(PackingPosition.MoveDown(current))) { 104 current = PackingPosition.MoveDown(current); 105 105 } 106 106 ExtremePoints.Add(current); … … 112 112 113 113 //Find ExtremePoints beginning from sourcepointZ 114 var sourcePointZ = new ThreeDimensionalPacking(0, position.X, position.Y, position.Z + newDepth);114 var sourcePointZ = new PackingPosition(0, position.X, position.Y, position.Z + newDepth); 115 115 if (sourcePointZ.X < BinMeasures.Width && sourcePointZ.Y < BinMeasures.Height && sourcePointZ.Z < BinMeasures.Depth) { 116 116 //Traversing down the x-axis 117 ThreeDimensionalPacking current = new ThreeDimensionalPacking(0, sourcePointZ.X, sourcePointZ.Y, sourcePointZ.Z);118 while (current.X > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveLeft(current))) {119 current = ThreeDimensionalPacking.MoveLeft(current);120 } 121 ExtremePoints.Add(( ThreeDimensionalPacking)current.Clone());122 while (current.Y > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveDown(current))) {123 current = ThreeDimensionalPacking.MoveDown(current);117 PackingPosition current = new PackingPosition(0, sourcePointZ.X, sourcePointZ.Y, sourcePointZ.Z); 118 while (current.X > 0 && !IsPointOccupied(PackingPosition.MoveLeft(current))) { 119 current = PackingPosition.MoveLeft(current); 120 } 121 ExtremePoints.Add((PackingPosition)current.Clone()); 122 while (current.Y > 0 && !IsPointOccupied(PackingPosition.MoveDown(current))) { 123 current = PackingPosition.MoveDown(current); 124 124 } 125 125 ExtremePoints.Add(current); 126 126 127 127 //Traversing down the y-axis 128 current = new ThreeDimensionalPacking(0, sourcePointZ.X, sourcePointZ.Y, sourcePointZ.Z);129 while (current.Y > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveDown(current))) {130 current = ThreeDimensionalPacking.MoveDown(current);131 } 132 ExtremePoints.Add(( ThreeDimensionalPacking)current.Clone());133 while (current.X > 0 && !IsPointOccupied( ThreeDimensionalPacking.MoveLeft(current))) {134 current = ThreeDimensionalPacking.MoveLeft(current);128 current = new PackingPosition(0, sourcePointZ.X, sourcePointZ.Y, sourcePointZ.Z); 129 while (current.Y > 0 && !IsPointOccupied(PackingPosition.MoveDown(current))) { 130 current = PackingPosition.MoveDown(current); 131 } 132 ExtremePoints.Add((PackingPosition)current.Clone()); 133 while (current.X > 0 && !IsPointOccupied(PackingPosition.MoveLeft(current))) { 134 current = PackingPosition.MoveLeft(current); 135 135 } 136 136 ExtremePoints.Add(current); … … 146 146 } 147 147 148 public override ThreeDimensionalPackingFindExtremePointForItem(CuboidPackingItem measures, bool rotated, bool stackingConstraints) {148 public override PackingPosition FindExtremePointForItem(CuboidPackingItem measures, bool rotated, bool stackingConstraints) { 149 149 150 150 CuboidPackingItem item = new CuboidPackingItem( … … 164 164 if (epIndex < ExtremePoints.Count) { 165 165 var origPoint = ExtremePoints.ElementAt(epIndex); 166 var result = new ThreeDimensionalPacking(origPoint.AssignedBin, origPoint.X, origPoint.Y, origPoint.Z, rotated);166 var result = new PackingPosition(origPoint.AssignedBin, origPoint.X, origPoint.Y, origPoint.Z, rotated); 167 167 return result; 168 168 } … … 170 170 } 171 171 172 public override ThreeDimensionalPackingFindPositionBySliding(CuboidPackingItem measures, bool rotated) {172 public override PackingPosition FindPositionBySliding(CuboidPackingItem measures, bool rotated) { 173 173 //Starting-position at upper right corner (=left bottom point of item-rectangle is at position item.width,item.height) 174 ThreeDimensionalPacking currentPosition = new ThreeDimensionalPacking(0,174 PackingPosition currentPosition = new PackingPosition(0, 175 175 BinMeasures.Width - (rotated ? measures.Depth : measures.Width), 176 176 BinMeasures.Height - measures.Height, 177 177 BinMeasures.Depth - (rotated ? measures.Width : measures.Depth), rotated); 178 178 //Slide the item as far as possible to the bottom 179 while (IsPositionFeasible(measures, ThreeDimensionalPacking.MoveDown(currentPosition))180 || IsPositionFeasible(measures, ThreeDimensionalPacking.MoveLeft(currentPosition))181 || IsPositionFeasible(measures, ThreeDimensionalPacking.MoveBack(currentPosition))) {179 while (IsPositionFeasible(measures, PackingPosition.MoveDown(currentPosition)) 180 || IsPositionFeasible(measures, PackingPosition.MoveLeft(currentPosition)) 181 || IsPositionFeasible(measures, PackingPosition.MoveBack(currentPosition))) { 182 182 //Slide the item as far as possible to the left 183 while (IsPositionFeasible(measures, ThreeDimensionalPacking.MoveLeft(currentPosition))184 || IsPositionFeasible(measures, ThreeDimensionalPacking.MoveBack(currentPosition))) {183 while (IsPositionFeasible(measures, PackingPosition.MoveLeft(currentPosition)) 184 || IsPositionFeasible(measures, PackingPosition.MoveBack(currentPosition))) { 185 185 //Slide the item as far as possible to the back 186 while (IsPositionFeasible(measures, ThreeDimensionalPacking.MoveBack(currentPosition))) {187 currentPosition = ThreeDimensionalPacking.MoveBack(currentPosition);186 while (IsPositionFeasible(measures, PackingPosition.MoveBack(currentPosition))) { 187 currentPosition = PackingPosition.MoveBack(currentPosition); 188 188 } 189 if (IsPositionFeasible(measures, ThreeDimensionalPacking.MoveLeft(currentPosition)))190 currentPosition = ThreeDimensionalPacking.MoveLeft(currentPosition);191 } 192 if (IsPositionFeasible(measures, ThreeDimensionalPacking.MoveDown(currentPosition)))193 currentPosition = ThreeDimensionalPacking.MoveDown(currentPosition);189 if (IsPositionFeasible(measures, PackingPosition.MoveLeft(currentPosition))) 190 currentPosition = PackingPosition.MoveLeft(currentPosition); 191 } 192 if (IsPositionFeasible(measures, PackingPosition.MoveDown(currentPosition))) 193 currentPosition = PackingPosition.MoveDown(currentPosition); 194 194 } 195 195 … … 242 242 } 243 243 244 public override int ShortestPossibleSideFromPoint( ThreeDimensionalPackingposition) {244 public override int ShortestPossibleSideFromPoint(PackingPosition position) { 245 245 246 246 int shortestSide = int.MaxValue; … … 252 252 return shortestSide; 253 253 254 ThreeDimensionalPacking current = new ThreeDimensionalPacking(0, position.X, position.Y, position.Z);255 while (current.X < width && IsPointOccupied(current)) { current = ThreeDimensionalPacking.MoveRight(current); }254 PackingPosition current = new PackingPosition(0, position.X, position.Y, position.Z); 255 while (current.X < width && IsPointOccupied(current)) { current = PackingPosition.MoveRight(current); } 256 256 if (current.X - position.X < shortestSide) 257 257 shortestSide = current.X - position.X; 258 258 259 259 260 current = new ThreeDimensionalPacking(0, position.X, position.Y, position.Z);261 while (current.Y < height && IsPointOccupied(current)) { current = ThreeDimensionalPacking.MoveUp(current); }260 current = new PackingPosition(0, position.X, position.Y, position.Z); 261 while (current.Y < height && IsPointOccupied(current)) { current = PackingPosition.MoveUp(current); } 262 262 if (current.Y - position.Y < shortestSide) 263 263 shortestSide = current.Y - position.Y; 264 264 265 265 266 current = new ThreeDimensionalPacking(0, position.X, position.Y, position.Z);267 while (current.Z < depth && IsPointOccupied(current)) { current = ThreeDimensionalPacking.MoveFront(current); }266 current = new PackingPosition(0, position.X, position.Y, position.Z); 267 while (current.Z < depth && IsPointOccupied(current)) { current = PackingPosition.MoveFront(current); } 268 268 if (current.Z - position.Z < shortestSide) 269 269 shortestSide = current.Z - position.Z; … … 271 271 return shortestSide; 272 272 } 273 public override bool IsStaticStable(CuboidPackingItem item, ThreeDimensionalPackingposition) {273 public override bool IsStaticStable(CuboidPackingItem item, PackingPosition position) { 274 274 //Static stability is given, if item is placed on the ground 275 275 if (position.Y == 0) 276 276 return true; 277 277 278 if (IsPointOccupied(new ThreeDimensionalPacking(0, position.X, position.Y - 1, position.Z))279 && IsPointOccupied(new ThreeDimensionalPacking(0, position.X + item.Width - 1, position.Y - 1, position.Z))280 && IsPointOccupied(new ThreeDimensionalPacking(0, position.X, position.Y - 1, position.Z + item.Depth - 1))281 && IsPointOccupied(new ThreeDimensionalPacking(0, position.X + item.Width - 1, position.Y - 1, position.Z + item.Depth - 1)))278 if (IsPointOccupied(new PackingPosition(0, position.X, position.Y - 1, position.Z)) 279 && IsPointOccupied(new PackingPosition(0, position.X + item.Width - 1, position.Y - 1, position.Z)) 280 && IsPointOccupied(new PackingPosition(0, position.X, position.Y - 1, position.Z + item.Depth - 1)) 281 && IsPointOccupied(new PackingPosition(0, position.X + item.Width - 1, position.Y - 1, position.Z + item.Depth - 1))) 282 282 return true; 283 283 … … 304 304 305 305 [Storable] 306 private bool depthWasDoubled = false; 306 private bool depthWasDoubled = false; // TODO ??? 307 307 public void DoubleDepth() { 308 308 if (!depthWasDoubled) { … … 314 314 } 315 315 316 public bool IsSupportedByAtLeastOnePoint(CuboidPackingItem item, ThreeDimensionalPackingposition) {316 public bool IsSupportedByAtLeastOnePoint(CuboidPackingItem item, PackingPosition position) { 317 317 if (position.Y == 0) 318 318 return true; … … 321 321 for (int x = position.X; x < position.X + item.Width; x++) 322 322 for (int z = position.Z; z < position.Z + item.Depth; z++) 323 if (IsPointOccupied(new ThreeDimensionalPacking(0, x, y, z)))323 if (IsPointOccupied(new PackingPosition(0, x, y, z))) 324 324 return true; 325 325 326 326 return false; 327 327 } 328 public bool IsWeightSupported(CuboidPackingItem item, ThreeDimensionalPackingep) {328 public bool IsWeightSupported(CuboidPackingItem item, PackingPosition ep) { 329 329 if (ep.Y == 0) 330 330 return true; 331 331 332 if (ItemMeasures[PointOccupation(new ThreeDimensionalPacking(0, ep.X, ep.Y - 1, ep.Z))].SupportsStacking(item)333 && ItemMeasures[PointOccupation(new ThreeDimensionalPacking(0, ep.X + item.Width - 1, ep.Y - 1, ep.Z))].SupportsStacking(item)334 && ItemMeasures[PointOccupation(new ThreeDimensionalPacking(0, ep.X, ep.Y - 1, ep.Z + item.Depth - 1))].SupportsStacking(item)335 && ItemMeasures[PointOccupation(new ThreeDimensionalPacking(0, ep.X + item.Width - 1, ep.Y - 1, ep.Z + item.Depth - 1))].SupportsStacking(item))332 if (ItemMeasures[PointOccupation(new PackingPosition(0, ep.X, ep.Y - 1, ep.Z))].SupportsStacking(item) 333 && ItemMeasures[PointOccupation(new PackingPosition(0, ep.X + item.Width - 1, ep.Y - 1, ep.Z))].SupportsStacking(item) 334 && ItemMeasures[PointOccupation(new PackingPosition(0, ep.X, ep.Y - 1, ep.Z + item.Depth - 1))].SupportsStacking(item) 335 && ItemMeasures[PointOccupation(new PackingPosition(0, ep.X + item.Width - 1, ep.Y - 1, ep.Z + item.Depth - 1))].SupportsStacking(item)) 336 336 return true; 337 337 … … 345 345 } 346 346 } 347 protected override void AddNewItemToOccupationLayers(int itemID, CuboidPackingItem measures, ThreeDimensionalPackingposition) {347 protected override void AddNewItemToOccupationLayers(int itemID, CuboidPackingItem measures, PackingPosition position) { 348 348 int z1 = position.Z / 10; 349 349 int z2 = (position.Z + (position.Rotated ? measures.Width : measures.Depth)) / 10; … … 352 352 OccupationLayers[i].Add(itemID); 353 353 } 354 protected override List<int> GetLayerItemIDs( ThreeDimensionalPackingposition) {354 protected override List<int> GetLayerItemIDs(PackingPosition position) { 355 355 return OccupationLayers[position.Z / 10]; 356 356 } 357 protected override List<int> GetLayerItemIDs(CuboidPackingItem measures, ThreeDimensionalPackingposition) {357 protected override List<int> GetLayerItemIDs(CuboidPackingItem measures, PackingPosition position) { 358 358 List<int> result = new List<int>(); 359 359 int z1 = position.Z / 10; … … 366 366 } 367 367 } 368 public class EPComparer3D : IComparer< ThreeDimensionalPacking> {369 public int Compare( ThreeDimensionalPacking a, ThreeDimensionalPackingb) {368 public class EPComparer3D : IComparer<PackingPosition> { 369 public int Compare(PackingPosition a, PackingPosition b) { 370 370 int result = a.Z.CompareTo(b.Z); 371 371 if (result == 0) -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/CuboidIdenticalBinPackingProblem.cs
r14046 r14048 38 38 [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 310)] 39 39 // TODO don't support generic BPPData but only 3d BPPData 40 public class CuboidIdenticalBinPackingProblem : BinPackingProblem< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, IProblemInstanceConsumer<BPPData>, IProblemInstanceExporter<BPPData> {40 public class CuboidIdenticalBinPackingProblem : BinPackingProblem<PackingPosition, CuboidPackingShape, CuboidPackingItem>, IProblemInstanceConsumer<BPPData>, IProblemInstanceExporter<BPPData> { 41 41 42 42 … … 102 102 } 103 103 public CuboidIdenticalBinPackingProblem() : base( 104 new PackingPlanEvaluationAlgorithm<Permutation, ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>()) {104 new PackingPlanEvaluationAlgorithm<Permutation, PackingPosition, CuboidPackingShape, CuboidPackingItem>()) { 105 105 } 106 106 … … 178 178 protected override void RemoveTooBigItems() { 179 179 PackingItemMeasures.RemoveAll(pi => 180 !PackingBinMeasures.Encloses(new ThreeDimensionalPacking(0, 0, 0, 0, false), pi) &&181 !PackingBinMeasures.Encloses(new ThreeDimensionalPacking(0, 0, 0, 0, true), pi));180 !PackingBinMeasures.Encloses(new PackingPosition(0, 0, 0, 0, false), pi) && 181 !PackingBinMeasures.Encloses(new PackingPosition(0, 0, 0, 0, true), pi)); 182 182 } 183 183 #endregion -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/CuboidPackingShape.cs
r14046 r14048 31 31 [Item("CuboidPackingShape", "Represents the cuboid measures (width, height, depth) of a three-dimensional cuboidic bin-packing object.")] 32 32 [StorableClass] 33 public class CuboidPackingShape : PackingShape< ThreeDimensionalPacking>, IComparable<CuboidPackingShape> {33 public class CuboidPackingShape : PackingShape<PackingPosition>, IComparable<CuboidPackingShape> { 34 34 public IFixedValueParameter<IntValue> HeightParameter { 35 35 get { return (IFixedValueParameter<IntValue>)Parameters["Height"]; } … … 128 128 public int y2; 129 129 public int z2; 130 public CuboidDiagonal(CuboidPackingShape myShape) : this(new ThreeDimensionalPacking(0, 0, 0, 0), myShape) { }131 public CuboidDiagonal( ThreeDimensionalPackingmyPosition, CuboidPackingShape myShape) {130 public CuboidDiagonal(CuboidPackingShape myShape) : this(new PackingPosition(0, 0, 0, 0), myShape) { } 131 public CuboidDiagonal(PackingPosition myPosition, CuboidPackingShape myShape) { 132 132 x1 = myPosition.X; 133 133 y1 = myPosition.Y; … … 141 141 142 142 #region Helpers 143 public override ThreeDimensionalPacking Origin { get { return new ThreeDimensionalPacking(0, 0, 0, 0); } }143 public override PackingPosition Origin { get { return new PackingPosition(0, 0, 0, 0); } } 144 144 public override int Volume { get { return Width * Height * Depth; } } 145 145 146 public override bool EnclosesPoint( ThreeDimensionalPacking myPosition, ThreeDimensionalPackingcheckedPoint) {146 public override bool EnclosesPoint(PackingPosition myPosition, PackingPosition checkedPoint) { 147 147 return (myPosition.X <= checkedPoint.X && 148 148 (myPosition.X + (myPosition.Rotated ? Depth : Width) - 1) >= checkedPoint.X && … … 152 152 (myPosition.Z + (myPosition.Rotated ? Width : Depth) - 1) >= checkedPoint.Z); 153 153 } 154 public override bool Encloses( ThreeDimensionalPacking checkedPosition, PackingShape<ThreeDimensionalPacking> checkedShape) {154 public override bool Encloses(PackingPosition checkedPosition, PackingShape<PackingPosition> checkedShape) { 155 155 return Encloses(checkedPosition, (CuboidPackingShape)checkedShape); 156 156 } 157 private bool Encloses( ThreeDimensionalPackingcheckedPosition, CuboidPackingShape checkedShape) {157 private bool Encloses(PackingPosition checkedPosition, CuboidPackingShape checkedShape) { 158 158 return Encloses(new CuboidDiagonal(this), new CuboidDiagonal(checkedPosition, checkedShape)); 159 159 } … … 167 167 } 168 168 169 public override bool Overlaps( ThreeDimensionalPacking myPosition, ThreeDimensionalPacking checkedPosition, PackingShape<ThreeDimensionalPacking> checkedShape) {169 public override bool Overlaps(PackingPosition myPosition, PackingPosition checkedPosition, PackingShape<PackingPosition> checkedShape) { 170 170 return Overlaps(myPosition, checkedPosition, (CuboidPackingShape)checkedShape); 171 171 } 172 private bool Overlaps( ThreeDimensionalPacking myPosition, ThreeDimensionalPackingcheckedPosition, CuboidPackingShape checkedShape) {172 private bool Overlaps(PackingPosition myPosition, PackingPosition checkedPosition, CuboidPackingShape checkedShape) { 173 173 return Overlaps(new CuboidDiagonal(myPosition, this), new CuboidDiagonal(checkedPosition, checkedShape)); 174 174 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Decoders/DBL/DeepestBottomLeftGroupingVectorDecoder.cs
r14047 r14048 31 31 [Item("Identical bin, three dimensional, GroupingVector-decoder", "<Description missing...>")] 32 32 [StorableClass] 33 public class DeepestBottomLeftGroupingVectorDecoder : PackingSolutionDecoder< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, I3DGVDecoder {33 public class DeepestBottomLeftGroupingVectorDecoder : PackingSolutionDecoder<PackingPosition, CuboidPackingShape, CuboidPackingItem>, I3DGVDecoder { 34 34 public DeepestBottomLeftGroupingVectorDecoder() : base() {} 35 35 [StorableConstructor] … … 42 42 } 43 43 44 public override PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) {44 public override PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 45 45 var solution = encodedSolution as GroupingVectorEncoding; 46 46 if (solution == null) throw new InvalidOperationException("Encoding is not of type GroupingVector"); -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Decoders/DBL/DeepestBottomLeftMultiComponentVectorDecoder.cs
r14047 r14048 31 31 [Item("Identical bin, three dimensional, MultiComponentVector-decoder", "<Description missing...>")] 32 32 [StorableClass] 33 public class DeepestBottomLeftMultiComponentVectorDecoder : PackingSolutionDecoder< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, I3DMCVDecoder {33 public class DeepestBottomLeftMultiComponentVectorDecoder : PackingSolutionDecoder<PackingPosition, CuboidPackingShape, CuboidPackingItem>, I3DMCVDecoder { 34 34 public DeepestBottomLeftMultiComponentVectorDecoder() : base() { } 35 35 [StorableConstructor] … … 42 42 } 43 43 44 public override PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) {44 public override PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 45 45 var solution = encodedSolution as MultiComponentVectorEncoding; 46 46 if (solution == null) throw new InvalidOperationException("Encoding is not of type MultiComponent Vector"); -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Decoders/DBL/DeepestBottomLeftPackingSequenceDecoder.cs
r14047 r14048 31 31 [Item("Identical bin, three dimensional, PackingSequence-decoder", "<Description missing...>")] 32 32 [StorableClass] 33 public class DeepestBottomLeftPackingSequenceDecoder : PackingSolutionDecoder< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, I3DPSDecoder {33 public class DeepestBottomLeftPackingSequenceDecoder : PackingSolutionDecoder<PackingPosition, CuboidPackingShape, CuboidPackingItem>, I3DPSDecoder { 34 34 public DeepestBottomLeftPackingSequenceDecoder(): base() {} 35 35 [StorableConstructor] … … 42 42 } 43 43 44 public override PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) {44 public override PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 45 45 var solution = encodedSolution as PackingSequenceEncoding; 46 46 if (solution == null) throw new InvalidOperationException("Encoding is not of type PackingSequence"); -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Decoders/EP/ExtremePointGroupingVectorDecoder3D.cs
r14047 r14048 31 31 [Item("Identical bin, three dimensional, extreme points based decoder for the GroupingVector encoding.", "<Description missing...>")] 32 32 [StorableClass] 33 public class ExtremePointGroupingVectorDecoder3D : PackingSolutionDecoder< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, I3DGVDecoder {33 public class ExtremePointGroupingVectorDecoder3D : PackingSolutionDecoder<PackingPosition, CuboidPackingShape, CuboidPackingItem>, I3DGVDecoder { 34 34 public ExtremePointGroupingVectorDecoder3D() : base() { } 35 35 [StorableConstructor] … … 42 42 } 43 43 44 public static PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> Decode(GroupingVectorEncoding solution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures, bool stackingConstraints) {44 public static PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> Decode(GroupingVectorEncoding solution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures, bool stackingConstraints) { 45 45 Solution result = new Solution(binMeasures, true, stackingConstraints); 46 46 result.Pack(solution, itemMeasures); … … 48 48 } 49 49 50 public override PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) {50 public override PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 51 51 var solution = encodedSolution as GroupingVectorEncoding; 52 52 if (solution == null) throw new InvalidOperationException("Encoding is not of type GroupingVector"); -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Decoders/EP/ExtremePointMultiComponentVectorDecoder3D.cs
r14047 r14048 31 31 [Item("Identical bin, three dimensional, extreme points based decoder for the MultiComponentVector encoding.", "<Description missing...>")] 32 32 [StorableClass] 33 public class ExtremePointMultiComponentVectorDecoder3D : PackingSolutionDecoder< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, I3DMCVDecoder {33 public class ExtremePointMultiComponentVectorDecoder3D : PackingSolutionDecoder<PackingPosition, CuboidPackingShape, CuboidPackingItem>, I3DMCVDecoder { 34 34 public ExtremePointMultiComponentVectorDecoder3D () : base() { } 35 35 [StorableConstructor] … … 42 42 } 43 43 44 public static PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> Decode(MultiComponentVectorEncoding solution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures, bool stackingConstraints) {44 public static PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> Decode(MultiComponentVectorEncoding solution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures, bool stackingConstraints) { 45 45 Solution result = new Solution(binMeasures, true, stackingConstraints); 46 46 result.Pack(solution, itemMeasures); … … 48 48 } 49 49 50 public override PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) {50 public override PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 51 51 var solution = encodedSolution as MultiComponentVectorEncoding; 52 52 if (solution == null) throw new InvalidOperationException("Encoding is not of type MultiComponentVector"); -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Decoders/EP/ExtremePointPackingSequenceDecoder3D.cs
r14047 r14048 32 32 [Item("Identical bin, three dimensional, extreme points based decoder for the PackingSequence encoding.", "<Description missing...>")] 33 33 [StorableClass] 34 public class ExtremePointPackingSequenceDecoder3D : PackingSolutionDecoder< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, I3DPSDecoder {34 public class ExtremePointPackingSequenceDecoder3D : PackingSolutionDecoder<PackingPosition, CuboidPackingShape, CuboidPackingItem>, I3DPSDecoder { 35 35 public ExtremePointPackingSequenceDecoder3D () : base() {} 36 36 [StorableConstructor] … … 44 44 45 45 46 public override PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) {46 public override PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> CreatePackingPlanFromEncoding(IItem encodedSolution, CuboidPackingShape binMeasures, ItemList<CuboidPackingItem> itemMeasures) { 47 47 var solution = encodedSolution as PackingSequenceEncoding; 48 48 if (solution == null) throw new InvalidOperationException("Encoding is not of type PackingSequence"); -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/HeuristicLab.Problems.BinPacking3D-3.3.csproj
r14047 r14048 175 175 <Compile Include="MoveEvaluators\PackingMoveEvaluator3DMCV.cs" /> 176 176 <Compile Include="MoveEvaluators\PackingMoveEvaluator3DPS.cs" /> 177 <Compile Include="PackingPosition.cs" /> 177 178 <Compile Include="PackingRatioCuboidIdenticalBinEvaluator.cs" /> 178 179 <Compile Include="Plugin.cs" /> 179 180 <Compile Include="Properties\AssemblyInfo.cs" /> 180 181 <Compile Include="Solution.cs" /> 181 <Compile Include="ThreeDimensionalPacking.cs" />182 182 </ItemGroup> 183 183 <ItemGroup> -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/MoveEvaluators/PackingMoveEvaluator3DGV.cs
r14046 r14048 30 30 [Item("GroupingVectorMoveEvaluator3D", "Class for evaluating packing moves for 3dimensional problems.")] 31 31 [StorableClass] 32 public class PackingMoveEvaluator3DGV : PackingMoveEvaluator< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, ISingleObjectiveMoveEvaluator, IGroupingVectorMoveOperator, I3DOperator {32 public class PackingMoveEvaluator3DGV : PackingMoveEvaluator<PackingPosition, CuboidPackingShape, CuboidPackingItem>, ISingleObjectiveMoveEvaluator, IGroupingVectorMoveOperator, I3DOperator { 33 33 [StorableConstructor] 34 34 protected PackingMoveEvaluator3DGV(bool deserializing) : base(deserializing) { } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/MoveEvaluators/PackingMoveEvaluator3DMCV.cs
r14046 r14048 30 30 [Item("MultiComponentVectorMoveEvaluator3D", "Class for evaluating packing moves for 3dimensional problems.")] 31 31 [StorableClass] 32 public class PackingMoveEvaluator3DMCV : PackingMoveEvaluator< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, ISingleObjectiveMoveEvaluator, IMultiComponentVectorMoveOperator, I3DOperator {32 public class PackingMoveEvaluator3DMCV : PackingMoveEvaluator<PackingPosition, CuboidPackingShape, CuboidPackingItem>, ISingleObjectiveMoveEvaluator, IMultiComponentVectorMoveOperator, I3DOperator { 33 33 [StorableConstructor] 34 34 protected PackingMoveEvaluator3DMCV(bool deserializing) : base(deserializing) { } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/MoveEvaluators/PackingMoveEvaluator3DPS.cs
r14046 r14048 30 30 [Item("PackingSequenceMoveEvaluator3D", "Class for evaluating packing moves for 3dimensional problems.")] 31 31 [StorableClass] 32 public class PackingMoveEvaluator3DPS : PackingMoveEvaluator< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem>, ISingleObjectiveMoveEvaluator, IPackingSequenceMoveOperator, I3DOperator {32 public class PackingMoveEvaluator3DPS : PackingMoveEvaluator<PackingPosition, CuboidPackingShape, CuboidPackingItem>, ISingleObjectiveMoveEvaluator, IPackingSequenceMoveOperator, I3DOperator { 33 33 [StorableConstructor] 34 34 protected PackingMoveEvaluator3DPS(bool deserializing) : base(deserializing) { } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/PackingPosition.cs
r14047 r14048 24 24 using HeuristicLab.Core; 25 25 using HeuristicLab.Common; 26 using HeuristicLab.Problems.BinPacking;27 26 28 27 namespace HeuristicLab.Problems.BinPacking3D { 29 [Item(" Three Dimensional Packing", "Represents a packing-position associated with a three dimensional packing-problem.")]28 [Item("Packing Position (3d)", "Represents a packing-position associated with a three dimensional packing-problem.")] 30 29 [StorableClass] 31 // ThreeDimensionalPackingis immutable (and handled as value type concerning Equals and GetHashCode)32 public class ThreeDimensionalPacking : PackingDimensions{30 // PackingPosition is immutable (and handled as value type concerning Equals and GetHashCode) 31 public class PackingPosition : BinPacking.PackingPosition { 33 32 [Storable] 34 33 private readonly int x; … … 43 42 44 43 [StorableConstructor] 45 protected ThreeDimensionalPacking(bool deserializing) : base(deserializing) { }46 protected ThreeDimensionalPacking(ThreeDimensionalPackingoriginal, Cloner cloner)44 protected PackingPosition(bool deserializing) : base(deserializing) { } 45 protected PackingPosition(PackingPosition original, Cloner cloner) 47 46 : base(original, cloner) { 48 47 x = original.X; … … 51 50 } 52 51 public override IDeepCloneable Clone(Cloner cloner) { 53 return new ThreeDimensionalPacking(this, cloner);52 return new PackingPosition(this, cloner); 54 53 } 55 54 56 public ThreeDimensionalPacking(int assignedBin, int x, int y, int z, bool rotated = false)55 public PackingPosition(int assignedBin, int x, int y, int z, bool rotated = false) 57 56 : base(assignedBin, rotated) { 58 57 this.x = x; … … 67 66 68 67 public override bool Equals(object obj) { 69 var tdp = obj as ThreeDimensionalPacking;68 var tdp = obj as PackingPosition; 70 69 if (tdp != null) 71 70 return (tdp.X == this.X && tdp.Y == this.Y && tdp.Z == this.Z); … … 77 76 } 78 77 79 public static ThreeDimensionalPacking MoveLeft(ThreeDimensionalPackingoriginal) {80 return new ThreeDimensionalPacking(original.AssignedBin, original.X - 1, original.Y, original.Z, original.Rotated);78 public static PackingPosition MoveLeft(PackingPosition original) { 79 return new PackingPosition(original.AssignedBin, original.X - 1, original.Y, original.Z, original.Rotated); 81 80 } 82 public static ThreeDimensionalPacking MoveDown(ThreeDimensionalPackingoriginal) {83 return new ThreeDimensionalPacking(original.AssignedBin, original.X, original.Y - 1, original.Z, original.Rotated);81 public static PackingPosition MoveDown(PackingPosition original) { 82 return new PackingPosition(original.AssignedBin, original.X, original.Y - 1, original.Z, original.Rotated); 84 83 } 85 public static ThreeDimensionalPacking MoveBack(ThreeDimensionalPackingoriginal) {86 return new ThreeDimensionalPacking(original.AssignedBin, original.X, original.Y, original.Z - 1, original.Rotated);84 public static PackingPosition MoveBack(PackingPosition original) { 85 return new PackingPosition(original.AssignedBin, original.X, original.Y, original.Z - 1, original.Rotated); 87 86 } 88 87 89 public static ThreeDimensionalPacking MoveRight(ThreeDimensionalPackingoriginal) {90 return new ThreeDimensionalPacking(original.AssignedBin, original.X + 1, original.Y, original.Z, original.Rotated);88 public static PackingPosition MoveRight(PackingPosition original) { 89 return new PackingPosition(original.AssignedBin, original.X + 1, original.Y, original.Z, original.Rotated); 91 90 } 92 public static ThreeDimensionalPacking MoveUp(ThreeDimensionalPackingoriginal) {93 return new ThreeDimensionalPacking(original.AssignedBin, original.X, original.Y + 1, original.Z, original.Rotated);91 public static PackingPosition MoveUp(PackingPosition original) { 92 return new PackingPosition(original.AssignedBin, original.X, original.Y + 1, original.Z, original.Rotated); 94 93 } 95 public static ThreeDimensionalPacking MoveFront(ThreeDimensionalPackingoriginal) {96 return new ThreeDimensionalPacking(original.AssignedBin, original.X, original.Y, original.Z + 1, original.Rotated);94 public static PackingPosition MoveFront(PackingPosition original) { 95 return new PackingPosition(original.AssignedBin, original.X, original.Y, original.Z + 1, original.Rotated); 97 96 } 98 97 } -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/PackingRatioCuboidIdenticalBinEvaluator.cs
r14046 r14048 28 28 [Item("Packing-Ratio Cuboid Identical-Bin Evaluator", "Represents an evaluation-algorithm for cuboid-shaped bin-packing problems with identical bins which calculates the ratio between packed and unpacked space. Found in Falkenauer:1996")] 29 29 [StorableClass] 30 public class PackingRatioCuboidIdenticalBinEvaluator : PackingRatioRegularIdenticalBinEvaluator< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> {30 public class PackingRatioCuboidIdenticalBinEvaluator : PackingRatioRegularIdenticalBinEvaluator<PackingPosition, CuboidPackingShape, CuboidPackingItem> { 31 31 32 32 [StorableConstructor] -
branches/HeuristicLab.BinPacking/HeuristicLab.Problems.BinPacking.3D/3.3/Solution.cs
r14047 r14048 7 7 [Item("Bin Packing Solution (3d)", "Represents a solution for a 3D bin packing problem.")] 8 8 [StorableClass] 9 public class Solution : PackingPlan< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> {9 public class Solution : PackingPlan<PackingPosition, CuboidPackingShape, CuboidPackingItem> { 10 10 public Solution(CuboidPackingShape binMeasures) : this(binMeasures, false, false) { } 11 11 public Solution(CuboidPackingShape binMeasures, bool useExtremePoints, bool stackingConstraints) : base(binMeasures, useExtremePoints, stackingConstraints) { } … … 18 18 return new Solution(this, cloner); 19 19 } 20 public override BinPacking< ThreeDimensionalPacking, CuboidPackingShape, CuboidPackingItem> NewBinPacking() {20 public override BinPacking<PackingPosition, CuboidPackingShape, CuboidPackingItem> NewBinPacking() { 21 21 return new BinPacking3D(BinMeasures); 22 22 }
Note: See TracChangeset
for help on using the changeset viewer.