Index: /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 14166)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 14167)
@@ -149,4 +149,5 @@
     <EmbeddedResource Include="Documents\ALPSGP_SymReg.hl" />
     <EmbeddedResource Include="Documents\ALPSGA_TSP.hl" />
+    <EmbeddedResource Include="Documents\TS_BPP.hl" />
     <None Include="Plugin.cs.frame" />
     <Compile Include="OptimizerSingleDocumentMainForm.cs">
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/StartPage.cs	(revision 14167)
@@ -135,5 +135,5 @@
       var standardProblems = new List<string> { "ALPSGA_TSP", "ES_Griewank", "GA_Grouping", "GA_TSP", "GA_VRP", "GE_ArtificialAnt",
                 "IslandGA_TSP", "LS_Knapsack", "PSO_Schwefel", "RAPGA_JSSP",
-                "SA_Rastrigin", "SGP_SantaFe","GP_Multiplexer", "SS_VRP", "TS_TSP", "TS_VRP", "VNS_OP", "VNS_TSP"
+                "SA_Rastrigin", "SGP_SantaFe","GP_Multiplexer", "SS_VRP", "TS_TSP", "TS_VRP", "VNS_OP", "VNS_TSP", "TS_BPP"
         };
       groupLookup[standardProblemsGroup] = standardProblems;
Index: /trunk/sources/HeuristicLab.Problems.BinPacking.Views/3.3/PackingPlan2DView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking.Views/3.3/PackingPlan2DView.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking.Views/3.3/PackingPlan2DView.cs	(revision 14167)
@@ -57,5 +57,5 @@
     private void UpdateState(PackingPlan<BinPacking2D.PackingPosition, PackingShape, PackingItem> plan) {
       int currentBin = (binSelection != null && binSelection.SelectedItem != null) ? (int)(binSelection.SelectedItem) : 0;
-      container2DView.Packing = plan.BinPackings[currentBin];
+      container2DView.Packing = plan.Bins[currentBin];
     }
 
Index: /trunk/sources/HeuristicLab.Problems.BinPacking.Views/3.3/PackingPlan3DView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking.Views/3.3/PackingPlan3DView.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking.Views/3.3/PackingPlan3DView.cs	(revision 14167)
@@ -47,5 +47,5 @@
       } else {
         int i = 0;
-        foreach (var bp in Content.BinPackings)
+        foreach (var bp in Content.Bins)
           binSelection.Items.Add(i++ + " (" + Math.Round(bp.PackingDensity * 100, 2) + "%)");
 
@@ -57,5 +57,5 @@
     private void ShowSelectedPacking() {
       int currentBin = (binSelection != null) ? (int)(binSelection.SelectedIndex) : 0;
-      packingPlan3D.Packing = Content.BinPackings[currentBin];
+      packingPlan3D.Packing = Content.Bins[currentBin];
     }
 
@@ -66,5 +66,5 @@
       // add items of this container
       int currentBin = (binSelection != null) ? (int)(binSelection.SelectedIndex) : 0;
-      var packing = Content.BinPackings[currentBin];
+      var packing = Content.Bins[currentBin];
       foreach (var item in packing.Items) {
         itemSelection.Items.Add(item.Key);
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Evaluators/BinUtilizationEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Evaluators/BinUtilizationEvaluator.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Evaluators/BinUtilizationEvaluator.cs	(revision 14167)
@@ -53,6 +53,6 @@
 
       for (int i = 0; i < nrOfBins; i++) {
-        totalUsableSpace += solution.BinPackings[i].BinShape.Volume;
-        totalUsedSpace += solution.BinPackings[i].Items.Sum(kvp => kvp.Value.Volume);
+        totalUsableSpace += solution.Bins[i].BinShape.Volume;
+        totalUsedSpace += solution.Bins[i].Items.Sum(kvp => kvp.Value.Volume);
       }
 
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Evaluators/PackingRatioEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Evaluators/PackingRatioEvaluator.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Evaluators/PackingRatioEvaluator.cs	(revision 14167)
@@ -60,6 +60,6 @@
       const double k = 2;
       for (int i = 0; i < nrOfBins; i++) {
-        double f = solution.BinPackings[i].Items.Sum(kvp => kvp.Value.Volume);
-        double c = solution.BinPackings[i].BinShape.Volume;
+        double f = solution.Bins[i].Items.Sum(kvp => kvp.Value.Volume);
+        double c = solution.Bins[i].BinShape.Volume;
         result += Math.Pow(f / c, k);
       }
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/BottomLeftIntegerVectorDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/BottomLeftIntegerVectorDecoder.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/BottomLeftIntegerVectorDecoder.cs	(revision 14167)
@@ -53,5 +53,5 @@
       Solution partialSolution,
       ref IList<int> remainingIDs, IList<PackingItem> items) {
-      var bp = new BinPacking2D(partialSolution.BinMeasures);
+      var bp = new BinPacking2D(partialSolution.BinShape);
       bp.SlidingBasedPacking(ref remainingIDs, items);
       return bp;
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/ExtremePointIntegerVectorDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/ExtremePointIntegerVectorDecoder.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/ExtremePointIntegerVectorDecoder.cs	(revision 14167)
@@ -53,5 +53,5 @@
       Solution partialSolution,
       ref IList<int> remainingIDs, IList<PackingItem> items) {
-      var bp = new BinPacking2D(partialSolution.BinMeasures);
+      var bp = new BinPacking2D(partialSolution.BinShape);
       bp.ExtremePointBasedPacking(ref remainingIDs, items, stackingConstraints: false);
       return bp;
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/IntegerVectorDecoderBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/IntegerVectorDecoderBase.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/IntegerVectorEncoding/IntegerVectorDecoderBase.cs	(revision 14167)
@@ -47,5 +47,5 @@
       foreach (var sequence in sequenceMatrix) {
         remainingIDs = remainingIDs.Concat(sequence).ToList();
-        result.BinPackings.Add(CreatePacking(result, ref remainingIDs, items));
+        result.Bins.Add(CreatePacking(result, ref remainingIDs, items));
       }
       result.UpdateBinPackings();
@@ -54,5 +54,5 @@
       var temp = new List<int>(remainingIDs);
       foreach (int id in temp) {
-        foreach (BinPacking2D bp in result.BinPackings) {
+        foreach (BinPacking2D bp in result.Bins) {
           var position = FindPositionForItem(bp, items[id]);
           if (position != null) {
@@ -66,5 +66,5 @@
       //Put still remaining items in new bins
       while (remainingIDs.Count > 0) {
-        result.BinPackings.Add(CreatePacking(result, ref remainingIDs, items));
+        result.Bins.Add(CreatePacking(result, ref remainingIDs, items));
       }
       result.UpdateBinPackings();
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/BottomLeftPermutationDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/BottomLeftPermutationDecoder.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/BottomLeftPermutationDecoder.cs	(revision 14167)
@@ -47,5 +47,5 @@
         var bp = new BinPacking2D(binShape);
         bp.SlidingBasedPacking(ref remainingIDs, items);
-        result.BinPackings.Add(bp);
+        result.Bins.Add(bp);
       }
       result.UpdateBinPackings();
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/ExtremePointPermutationDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/ExtremePointPermutationDecoder.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/PermutationEncoding/ExtremePointPermutationDecoder.cs	(revision 14167)
@@ -47,5 +47,5 @@
         var bp = new BinPacking2D(binShape);
         bp.ExtremePointBasedPacking(ref remainingIDs, items, stackingConstraints: false);
-        result.BinPackings.Add(bp);
+        result.Bins.Add(bp);
       }
       result.UpdateBinPackings();
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Solution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Solution.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/2D/Solution.cs	(revision 14167)
@@ -29,6 +29,6 @@
   [StorableClass]
   public class Solution : PackingPlan<PackingPosition, PackingShape, PackingItem> {
-    public Solution(PackingShape binMeasures) : this(binMeasures, false, false) { }
-    public Solution(PackingShape binMeasures, bool useExtremePoints, bool stackingConstraints) : base(binMeasures, useExtremePoints, stackingConstraints) { }
+    public Solution(PackingShape binShape) : this(binShape, false, false) { }
+    public Solution(PackingShape binShape, bool useExtremePoints, bool stackingConstraints) : base(binShape, useExtremePoints, stackingConstraints) { }
     [StorableConstructor]
     protected Solution(bool deserializing) : base(deserializing) { }
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Evaluators/BinUtilizationEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Evaluators/BinUtilizationEvaluator.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Evaluators/BinUtilizationEvaluator.cs	(revision 14167)
@@ -54,6 +54,6 @@
 
       for (int i = 0; i < nrOfBins; i++) {
-        totalUsableSpace += solution.BinPackings[i].BinShape.Volume;
-        totalUsedSpace += solution.BinPackings[i].Items.Sum(kvp => kvp.Value.Volume);
+        totalUsableSpace += solution.Bins[i].BinShape.Volume;
+        totalUsedSpace += solution.Bins[i].Items.Sum(kvp => kvp.Value.Volume);
       }
 
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Evaluators/PackingRatioEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Evaluators/PackingRatioEvaluator.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Evaluators/PackingRatioEvaluator.cs	(revision 14167)
@@ -61,6 +61,6 @@
       const double k = 2;
       for (int i = 0; i < nrOfBins; i++) {
-        double f = solution.BinPackings[i].Items.Sum(kvp => kvp.Value.Volume);
-        double c = solution.BinPackings[i].BinShape.Volume;
+        double f = solution.Bins[i].Items.Sum(kvp => kvp.Value.Volume);
+        double c = solution.Bins[i].BinShape.Volume;
         result += Math.Pow(f / c, k);
       }
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/BottomLeftIntegerVectorDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/BottomLeftIntegerVectorDecoder.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/BottomLeftIntegerVectorDecoder.cs	(revision 14167)
@@ -60,5 +60,5 @@
       Solution partialSolution,
       ref IList<int> remainingIDs, IList<PackingItem> items, bool useStackingConstraints) {
-      var bp = new BinPacking3D(partialSolution.BinMeasures);
+      var bp = new BinPacking3D(partialSolution.BinShape);
       bp.SlidingBasedPacking(ref remainingIDs, items);
       return bp;
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/ExtremePointIntegerVectorDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/ExtremePointIntegerVectorDecoder.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/ExtremePointIntegerVectorDecoder.cs	(revision 14167)
@@ -53,5 +53,5 @@
       Solution partialSolution,
       ref IList<int> remainingIDs, IList<PackingItem> items, bool useStackingConstraints) {
-      var bp = new BinPacking3D(partialSolution.BinMeasures);
+      var bp = new BinPacking3D(partialSolution.BinShape);
       bp.ExtremePointBasedPacking(ref remainingIDs, items, useStackingConstraints);
       return bp;
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorDecoderBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorDecoderBase.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorDecoderBase.cs	(revision 14167)
@@ -47,5 +47,5 @@
       foreach (var sequence in sequenceMatrix) {
         remainingIDs = remainingIDs.Concat(sequence).ToList();
-        result.BinPackings.Add(CreatePacking(result, ref remainingIDs, items, useStackingConstraints));
+        result.Bins.Add(CreatePacking(result, ref remainingIDs, items, useStackingConstraints));
       }
       result.UpdateBinPackings();
@@ -54,5 +54,5 @@
       var temp = new List<int>(remainingIDs);
       foreach (int id in temp) {
-        foreach (BinPacking3D bp in result.BinPackings) {
+        foreach (BinPacking3D bp in result.Bins) {
           var position = FindPositionForItem(bp, items[id], useStackingConstraints);
           if (position != null) {
@@ -66,5 +66,5 @@
       //Put still remaining items in new bins
       while (remainingIDs.Count > 0) {
-        result.BinPackings.Add(CreatePacking(result, ref remainingIDs, items, useStackingConstraints));
+        result.Bins.Add(CreatePacking(result, ref remainingIDs, items, useStackingConstraints));
       }
       result.UpdateBinPackings();
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorProblem.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/IntegerVectorEncoding/IntegerVectorProblem.cs	(revision 14167)
@@ -35,5 +35,4 @@
   [Creatable(Category = CreatableAttribute.Categories.CombinatorialProblems, Priority = 330)]
   public sealed class IntegerVectorProblem : ProblemBase<IntegerVectorEncoding, IntegerVector> {
-    // persistence
     [StorableConstructor]
     private IntegerVectorProblem(bool deserializing) : base(deserializing) { }
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/BottomLeftPermutationDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/BottomLeftPermutationDecoder.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/BottomLeftPermutationDecoder.cs	(revision 14167)
@@ -47,5 +47,5 @@
         var bp = new BinPacking3D(binShape);
         bp.SlidingBasedPacking(ref remainingIDs, items);
-        result.BinPackings.Add(bp);
+        result.Bins.Add(bp);
       }
       result.UpdateBinPackings();
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/ExtremePointPermutationDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/ExtremePointPermutationDecoder.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/ExtremePointPermutationDecoder.cs	(revision 14167)
@@ -47,5 +47,5 @@
         var bp = new BinPacking3D(binShape);
         bp.ExtremePointBasedPacking(ref remainingIDs, items, stackingConstraints: useStackingConstraints);
-        result.BinPackings.Add(bp);
+        result.Bins.Add(bp);
       }
       result.UpdateBinPackings();
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/PermutationProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/PermutationProblem.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/PermutationEncoding/PermutationProblem.cs	(revision 14167)
@@ -34,5 +34,4 @@
   [Creatable(Category = CreatableAttribute.Categories.CombinatorialProblems, Priority = 320)]
   public sealed class PermutationProblem : ProblemBase<PermutationEncoding, Permutation> {
-    // persistence
     [StorableConstructor]
     private PermutationProblem(bool deserializing) : base(deserializing) { }
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Solution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Solution.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/3D/Solution.cs	(revision 14167)
@@ -8,6 +8,6 @@
   [StorableClass]
   public class Solution : PackingPlan<PackingPosition, PackingShape, PackingItem> {
-    public Solution(PackingShape binMeasures) : this(binMeasures, false, false) { }
-    public Solution(PackingShape binMeasures, bool useExtremePoints, bool stackingConstraints) : base(binMeasures, useExtremePoints, stackingConstraints) { }
+    public Solution(PackingShape binShape) : this(binShape, false, false) { }
+    public Solution(PackingShape binShape, bool useExtremePoints, bool stackingConstraints) : base(binShape, useExtremePoints, stackingConstraints) { }
     [StorableConstructor]
     protected Solution(bool deserializing) : base(deserializing) { }
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/PackingPlan.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/PackingPlan.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/PackingPlan.cs	(revision 14167)
@@ -38,6 +38,6 @@
     public int NrOfBins {
       get {
-        if (BinPackings != null)
-          return BinPackings.Count;
+        if (Bins != null)
+          return Bins.Count;
         else return 0;
       }
@@ -49,8 +49,8 @@
 
     [Storable]
-    public B BinMeasures { get; private set; }
+    public B BinShape { get; private set; }
 
     [Storable]
-    public ObservableList<BinPacking<D, B, I>> BinPackings { get; set; }
+    public ObservableList<BinPacking<D, B, I>> Bins { get; set; }
 
     [Storable]
@@ -69,10 +69,10 @@
     #endregion
 
-    protected PackingPlan(B binMeasures, bool useExtremePoints, bool stackingConstraints)
+    protected PackingPlan(B binShape, bool useExtremePoints, bool stackingConstraints)
       : base() {
-      BinMeasures = (B)binMeasures.Clone();
+      BinShape = (B)binShape.Clone();
       StackingConstraints = stackingConstraints;
       UseExtremePoints = useExtremePoints;
-      BinPackings = new ObservableList<BinPacking<D, B, I>>();
+      Bins = new ObservableList<BinPacking<D, B, I>>();
     }
 
@@ -81,8 +81,8 @@
     protected PackingPlan(PackingPlan<D, B, I> original, Cloner cloner)
       : base(original, cloner) {
-      this.BinPackings = new ObservableList<BinPacking<D, B, I>>(original.BinPackings.Select(p => cloner.Clone(p)));
+      this.Bins = new ObservableList<BinPacking<D, B, I>>(original.Bins.Select(p => cloner.Clone(p)));
       UseExtremePoints = original.UseExtremePoints;
       StackingConstraints = original.StackingConstraints;
-      BinMeasures = cloner.Clone(original.BinMeasures);
+      BinShape = cloner.Clone(original.BinShape);
       Quality = cloner.Clone(original.Quality);
     }
@@ -90,6 +90,6 @@
 
     public void UpdateBinPackings() {
-      BinPackings.RemoveAll(x => x.Positions.Count == 0);
-      BinPackings = new ObservableList<BinPacking<D, B, I>>(BinPackings.OrderByDescending(bp => bp.PackingDensity));
+      Bins.RemoveAll(x => x.Positions.Count == 0);
+      Bins = new ObservableList<BinPacking<D, B, I>>(Bins.OrderByDescending(bp => bp.PackingDensity));
     }
 
@@ -110,6 +110,4 @@
       OnQualityChanged();
     }
-
-    public event EventHandler BinPackingsChanged;
     #endregion
   }
Index: /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/PackingShape.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/PackingShape.cs	(revision 14166)
+++ /trunk/sources/HeuristicLab.Problems.BinPacking/3.3/PackingShape.cs	(revision 14167)
@@ -78,4 +78,5 @@
     public abstract int CompareTo(object obj);
 
+    [Storable]
     public IKeyedItemCollection<string, IParameter> Parameters { get; private set; }
   }
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab-3.3/Samples/TabuSearch3dBinPackingSampleTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab-3.3/Samples/TabuSearch3dBinPackingSampleTest.cs	(revision 14167)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab-3.3/Samples/TabuSearch3dBinPackingSampleTest.cs	(revision 14167)
@@ -0,0 +1,101 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.IO;
+using System.Linq;
+using HeuristicLab.Algorithms.TabuSearch;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.Problems.BinPacking3D;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Tests {
+  [TestClass]
+  public class TabuSearch3dBinPackingSampleTest {
+    private const string SampleFileName = "TS_BPP";
+
+    [TestMethod]
+    [TestCategory("Samples.Create")]
+    [TestProperty("Time", "medium")]
+    public void CreateTabuSearchBppSampleTest() {
+      var ts = CreateTabuSearchBppSample();
+      string path = Path.Combine(SamplesUtils.SamplesDirectory, SampleFileName + SamplesUtils.SampleFileExtension);
+      XmlGenerator.Serialize(ts, path);
+    }
+    [TestMethod]
+    [TestCategory("Samples.Execute")]
+    [TestProperty("Time", "long")]
+    public void RunTabuSearchBppSampleTest() {
+      var ts = CreateTabuSearchBppSample();
+      ts.SetSeedRandomly.Value = false;
+      SamplesUtils.RunAlgorithm(ts);
+      // Assert.AreEqual(6294, SamplesUtils.GetDoubleResult(ts, "BestQuality"));
+      // Assert.AreEqual(7380.0386666666664, SamplesUtils.GetDoubleResult(ts, "CurrentAverageQuality"));
+      // Assert.AreEqual(8328, SamplesUtils.GetDoubleResult(ts, "CurrentWorstQuality"));
+      // Assert.AreEqual(750000, SamplesUtils.GetIntResult(ts, "EvaluatedMoves"));
+    }
+
+    private TabuSearch CreateTabuSearchBppSample() {
+      TabuSearch ts = new TabuSearch();
+      #region Problem Configuration
+      PermutationProblem bppProblem = new PermutationProblem();
+      #endregion
+      #region Algorithm Configuration
+      ts.Name = "Tabu Search - 3D Bin Packing Problem";
+      ts.Description = "A tabu search algorithm that solves a 3D bin packing problem instance";
+      ts.Problem = bppProblem;
+
+      ts.MaximumIterations.Value = 1000;
+      // move generator has to be set first
+      var moveGenerator = ts.MoveGeneratorParameter.ValidValues
+        .OfType<Encodings.PermutationEncoding.StochasticTranslocationMultiMoveGenerator>()
+        .Single();
+      ts.MoveGenerator = moveGenerator;
+      var moveEvaluator = ts.MoveEvaluatorParameter.ValidValues
+        .OfType<Problems.BinPacking3D.TranslocationMoveEvaluator>()
+        .Single();
+      ts.MoveEvaluator = moveEvaluator;
+      var moveMaker = ts.MoveMakerParameter.ValidValues
+        .OfType<TranslocationMoveMaker>()
+        .Single();
+      ts.MoveMaker = moveMaker;
+      ts.SampleSize.Value = 100;
+      ts.Seed.Value = 0;
+      ts.SetSeedRandomly.Value = true;
+
+      var tabuChecker = ts.TabuCheckerParameter.ValidValues
+        .OfType<TranslocationMoveSoftTabuCriterion>()
+        .Single();
+      tabuChecker.UseAspirationCriterion.Value = true;
+      ts.TabuChecker = tabuChecker;
+
+      var tabuMaker = ts.TabuMakerParameter.ValidValues
+        .OfType<TranslocationMoveTabuMaker>()
+        .Single();
+      ts.TabuMaker = tabuMaker;
+      ts.TabuTenure.Value = 60;
+
+      #endregion
+      ts.Engine = new ParallelEngine.ParallelEngine();
+      return ts;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Tests.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 14166)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 14167)
@@ -270,4 +270,9 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\bin\HeuristicLab.Problems.Binary-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.BinPacking-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\bin\HeuristicLab.Problems.BinPacking-3.3.dll</HintPath>
       <Private>False</Private>
     </Reference>
@@ -451,4 +456,5 @@
     <Compile Include="HeuristicLab-3.3\PluginLoader.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\AlpsSampleTest.cs" />
+    <Compile Include="HeuristicLab-3.3\Samples\TabuSearch3dBinPackingSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\GPRobocodeSampleTest.cs" />
     <Compile Include="HeuristicLab-3.3\Samples\OSESGriewankSampleTest.cs" />
