Index: /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LCSAdaptedGeneticAlgorithm.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LCSAdaptedGeneticAlgorithm.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LCSAdaptedGeneticAlgorithm.cs	(revision 9226)
@@ -95,4 +95,6 @@
     }
     #endregion
+
+    private CheckGASubsumptionOperator checkGASubsumptionOperator;
 
     [StorableConstructor]
@@ -155,5 +157,5 @@
       Assigner setSubsumpByAssigner = new Assigner();
       Assigner setSubsumptionFalseAssigner = new Assigner();
-      CheckGASubsumptionOperator checkGASubsumptionOperator = new CheckGASubsumptionOperator();
+      checkGASubsumptionOperator = new CheckGASubsumptionOperator();
       ConditionalBranch doGASubsumptionBranch2 = new ConditionalBranch();
       ExecuteGASubsumptionOperator executeGAsubsumptionOperator = new ExecuteGASubsumptionOperator();
@@ -199,6 +201,4 @@
       doGASubsumptionBranch1.ConditionParameter.ActualName = DoGASubsumptionParameter.ActualName;
 
-      checkGASubsumptionOperator.ChildClassifiersParameter.ActualName = "CombinedIntegerVector";
-      checkGASubsumptionOperator.ParentsClassifiersParameter.ActualName = "CombinedIntegerVector";
       checkGASubsumptionOperator.NumerositiesParameter.ActualName = "Numerosity";
       checkGASubsumptionOperator.ExperiencesParameter.ActualName = "Experience";
@@ -283,4 +283,9 @@
       return base.Apply();
     }
+
+    public void SetChildName(string childName) {
+      checkGASubsumptionOperator.ChildClassifiersParameter.ActualName = childName;
+      checkGASubsumptionOperator.ParentsClassifiersParameter.ActualName = childName;
+    }
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystemMainLoop.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystemMainLoop.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystemMainLoop.cs	(revision 9226)
@@ -79,4 +79,6 @@
     private CoveringOperator covering;
     private CountNumberOfUniqueActions countNumberOfUniqueActions;
+    private MatchActionOperator matchActionOperator;
+    private InsertInPopulationOperator insertInPopulation;
 
     private LCSAdaptedGeneticAlgorithm adaptedGeneticAlgorithmMainLoop;
@@ -130,5 +132,5 @@
       actionSelector = new ActionSelector();
       UniformSubScopesProcessor matchActionSubScopesProcessor = new UniformSubScopesProcessor();
-      MatchActionOperator matchActionOperator = new MatchActionOperator();
+      matchActionOperator = new MatchActionOperator();
       ConditionalSelector conditionMatchSelector = new ConditionalSelector();
       ConditionalSelector actionMatchSelector = new ConditionalSelector();
@@ -165,5 +167,5 @@
       UniformSubScopesProcessor setDeletionFalseSubScopeProcessor2 = new UniformSubScopesProcessor();
       Assigner setDeletionFalseAssigner = new Assigner();
-      InsertInPopulationOperator insertInPopulation = new InsertInPopulationOperator();
+      insertInPopulation = new InsertInPopulationOperator();
       XCSDeletionOperator deletionOperatorAfterGA = new XCSDeletionOperator();
       ConditionalSelector deletionSelectorAfterGA = new ConditionalSelector();
@@ -205,12 +207,7 @@
       iterationCounter.IncrementParameter.ActualName = "OneIntValue";
 
-      matchConditionOperator.MatchParameter.ActualName = "CombinedIntegerVector";
-
       conditionMatchSelector.CopySelected = new BoolValue(false);
       conditionMatchSelector.ConditionParameter.ActualName = matchConditionOperator.MatchConditionParameter.ActualName;
 
-      countNumberOfUniqueActions.ClassifiersParameter.ActualName = "CombinedIntegerVector";
-
-      doDeletionBeforeCovering.ClassifiersParameter.ActualName = "CombinedIntegerVector";
       doDeletionBeforeCovering.MatchConditionParameter.ActualName = matchConditionOperator.MatchConditionParameter.ActualName;
       doDeletionBeforeCovering.CurrentPopulationSizeParameter.ActualName = "CurrentPopulationSize";
@@ -242,8 +239,5 @@
       matchActionSubScopesProcessor.Operator = matchActionOperator;
 
-      matchActionOperator.MatchParameter.ActualName = "CombinedIntegerVector";
       matchActionOperator.TargetMatchParameter.ActualName = actionSelector.SelectedActionParameter.ActualName;
-
-      predictionArrayCalculator.MatchParameter.ActualName = "CombinedIntegerVector";
 
       actionSelector.PredictionArrayParameter.ActualName = predictionArrayCalculator.PredictionArrayParameter.Name;
@@ -321,5 +315,4 @@
       currentPopulationSizeCounter.Increment = new IntValue(2);
 
-      insertInPopulation.ClassifiersParameter.ActualName = "CombinedIntegerVector";
       insertInPopulation.NumerositiesParameter.ActualName = "Numerosity";
       insertInPopulation.HasToBeDeletedParameter.ActualName = HASTOBEDELETED;
@@ -462,4 +455,13 @@
 
       countNumberOfUniqueActions.ClassifierComparerParameter.ActualName = problem.ClassifierComparerParameter.Name;
+
+      matchConditionOperator.MatchParameter.ActualName = problem.ChildName;
+      countNumberOfUniqueActions.ClassifiersParameter.ActualName = problem.ChildName;
+      doDeletionBeforeCovering.ClassifiersParameter.ActualName = problem.ChildName;
+      matchActionOperator.MatchParameter.ActualName = problem.ChildName;
+      predictionArrayCalculator.MatchParameter.ActualName = problem.ChildName;
+      insertInPopulation.ClassifiersParameter.ActualName = problem.ChildName;
+
+      adaptedGeneticAlgorithmMainLoop.SetChildName(problem.ChildName);
     }
     //private void ParameterizeSelectors() {
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVector.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVector.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVector.cs	(revision 9226)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -264,55 +263,4 @@
       return true;
     }
-
-    public override bool Equals(object obj) {
-      return base.Equals(obj);
-    }
-
-    public override int GetHashCode() {
-      return base.GetHashCode();
-    }
-
-    [StorableClass]
-    [Item("CombinedIntegerVectorComparer", "")]
-    public class CombinedIntegerVectorComparer : Item, IEqualityComparer<CombinedIntegerVector>, IClassifierComparer {
-
-      [StorableConstructor]
-      protected CombinedIntegerVectorComparer(bool deserializing) : base(deserializing) { }
-      protected CombinedIntegerVectorComparer(CombinedIntegerVectorComparer original, Cloner cloner)
-        : base(original, cloner) {
-      }
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new CombinedIntegerVectorComparer(this, cloner);
-      }
-      public CombinedIntegerVectorComparer() : base() { }
-
-      public bool Equals(CombinedIntegerVector x, CombinedIntegerVector y) {
-        for (int i = 0; i < x.array.Length; i++) {
-          if (!x.array[i].Equals(y.array[i])) {
-            return false;
-          }
-        }
-        return true;
-      }
-
-      public int GetHashCode(CombinedIntegerVector obj) {
-        int result = obj.actionLength;
-        for (int i = 0; i < obj.array.Length; i++) {
-          result ^= obj.array[i];
-        }
-        return result.GetHashCode();
-      }
-
-      public bool Equals(IAction x, IAction y) {
-        var xCast = x as CombinedIntegerVector;
-        var yCast = y as CombinedIntegerVector;
-        return x != null && y != null && Equals(xCast, yCast);
-      }
-
-      public int GetHashCode(IAction obj) {
-        var objCast = obj as CombinedIntegerVector;
-        return objCast != null ? GetHashCode(objCast) : obj.GetHashCode();
-      }
-    }
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVectorComparer.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVectorComparer.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVectorComparer.cs	(revision 9226)
@@ -0,0 +1,75 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.CombinedIntegerVectorEncoding {
+  [StorableClass]
+  [Item("CombinedIntegerVectorComparer", "")]
+  public class CombinedIntegerVectorComparer : Item, IEqualityComparer<CombinedIntegerVector>, IClassifierComparer {
+
+    [StorableConstructor]
+    protected CombinedIntegerVectorComparer(bool deserializing) : base(deserializing) { }
+    protected CombinedIntegerVectorComparer(CombinedIntegerVectorComparer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CombinedIntegerVectorComparer(this, cloner);
+    }
+    public CombinedIntegerVectorComparer() : base() { }
+
+    public bool Equals(CombinedIntegerVector x, CombinedIntegerVector y) {
+      var xEnumerator = x.GetEnumerator();
+      var yEnumerator = y.GetEnumerator();
+      //xMove and yMove are used to check if both enumerators moved
+      bool xMove = xEnumerator.MoveNext();
+      bool yMove = yEnumerator.MoveNext();
+      while (xMove && yMove && xEnumerator.Current == yEnumerator.Current) {
+        xMove = xEnumerator.MoveNext();
+        yMove = yEnumerator.MoveNext();
+      }
+      return !xMove && !yMove;
+    }
+
+    public int GetHashCode(CombinedIntegerVector obj) {
+      int result = obj.ActionLength;
+      foreach (var value in obj) {
+        result ^= value;
+      }
+      return result.GetHashCode();
+    }
+
+    public bool Equals(IAction x, IAction y) {
+      var xCast = x as CombinedIntegerVector;
+      var yCast = y as CombinedIntegerVector;
+      return x != null && y != null && Equals(xCast, yCast);
+    }
+
+    public int GetHashCode(IAction obj) {
+      var objCast = obj as CombinedIntegerVector;
+      return objCast != null ? GetHashCode(objCast) : obj.GetHashCode();
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/HeuristicLab.Encodings.CombinedIntegerVectorEncoding-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/HeuristicLab.Encodings.CombinedIntegerVectorEncoding-3.3.csproj	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/HeuristicLab.Encodings.CombinedIntegerVectorEncoding-3.3.csproj	(revision 9226)
@@ -121,4 +121,5 @@
   <ItemGroup>
     <Compile Include="CombinedIntegerVector.cs" />
+    <Compile Include="CombinedIntegerVectorComparer.cs" />
     <Compile Include="CombinedIntegerVectorCreator.cs" />
     <Compile Include="CombinedIntegerVectorCrossover.cs" />
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionProblem.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionProblem.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionProblem.cs	(revision 9226)
@@ -25,4 +25,6 @@
 namespace HeuristicLab.Encodings.ConditionActionEncoding {
   public interface IConditionActionProblem : IHeuristicOptimizationProblem {
+    string ChildName { get; }
+
     IParameter ProblemDataParameter { get; }
     IConditionActionProblemData ProblemData { get; }
@@ -33,5 +35,4 @@
     IParameter ThetaMinimalNumberOfActionsParameter { get; }
 
-    IParameter PossibleActionsConcreteClassParameter { get; }
     IParameter PossibleActionsParameter { get; }
 
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Covering/VariableVectorCoveringCreator.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Covering/VariableVectorCoveringCreator.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Covering/VariableVectorCoveringCreator.cs	(revision 9226)
@@ -29,5 +29,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-namespace HeuristicLab.Encodings.VariableVector.Covering {
+namespace HeuristicLab.Encodings.VariableVector {
   [Item("VariableVectorCoveringCreator", "Description missing")]
   [StorableClass]
@@ -63,10 +63,10 @@
     private IEnumerable<IVariable> CoverInput(VariableVectorInput input, VariableVectorCondition sample, IRandom random, double changeSymbolProbability) {
       var conditionVariables = new List<IVariable>();
-      if (!input.Order.SequenceEqual(sample.Order)) {
-        throw new ArgumentException("Sample and input do not contain the same variable names");
+      if (!sample.Keys.All(x => input.ContainsKey(x))) {
+        throw new ArgumentException("Input does not contain all variable names from sample");
       }
       foreach (var keyValuePair in sample) {
         IVariable variable = keyValuePair.Value.GetEmptyCopy();
-        variable.Cover(random, input[keyValuePair.Key].Value, changeSymbolProbability);
+        variable.Cover(random, input[keyValuePair.Key], changeSymbolProbability);
         conditionVariables.Add(variable);
       }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Creators/UniformRandomVariableVectorCreator.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Creators/UniformRandomVariableVectorCreator.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Creators/UniformRandomVariableVectorCreator.cs	(revision 9226)
@@ -20,10 +20,9 @@
 #endregion
 
-using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-namespace HeuristicLab.Encodings.VariableVector.Creators {
+namespace HeuristicLab.Encodings.VariableVector {
   [Item("UniformRandomVariableVectorCreator", "Description missing")]
   [StorableClass]
@@ -46,5 +45,5 @@
 
     protected override VariableVector Create(IRandom random, VariableVector sampleVariableVector, double spreadPercentage) {
-      var result = new VariableVector(sampleVariableVector.Condition.Values.Select(x => x.GetEmptyCopy()), sampleVariableVector.Action.Values.Select(x => x.GetEmptyCopy()));
+      var result = sampleVariableVector.GetEmptyCopy();
       result.Randomize(random, spreadPercentage);
       return result;
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Crossover/SinglePointCrossover.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Crossover/SinglePointCrossover.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Crossover/SinglePointCrossover.cs	(revision 9226)
@@ -27,5 +27,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-namespace HeuristicLab.Encodings.VariableVector.Crossover {
+namespace HeuristicLab.Encodings.VariableVector {
   [Item("SinglePointCrossover", "Description missing")]
   [StorableClass]
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/HeuristicLab.Encodings.VariableVector-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/HeuristicLab.Encodings.VariableVector-3.3.csproj	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/HeuristicLab.Encodings.VariableVector-3.3.csproj	(revision 9226)
@@ -44,4 +44,5 @@
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="HeuristicLab.Data-3.3">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
@@ -64,4 +65,5 @@
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
@@ -79,4 +81,5 @@
     <Compile Include="Manipulator\UniformOnePositionInConditionManipulator.cs" />
     <Compile Include="Manipulator\UniformSomePositionManipulator.cs" />
+    <Compile Include="VariableVectorActionComparer.cs" />
     <Compile Include="VariableVectorCrossover.cs" />
     <Compile Include="VariableVectorManipulator.cs" />
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Manipulator/UniformOnePositionInConditionManipulator.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Manipulator/UniformOnePositionInConditionManipulator.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Manipulator/UniformOnePositionInConditionManipulator.cs	(revision 9226)
@@ -56,9 +56,10 @@
       var keyEnumerator = condition.Order.GetEnumerator();
       int count = 0;
-      while (keyEnumerator.MoveNext() && count < condition.VirtualLength
-        && count < index && count + condition[keyEnumerator.Current].VirtualLength < index) {
+      keyEnumerator.MoveNext();
+      while (count < condition.VirtualLength && count < index && count + condition[keyEnumerator.Current].VirtualLength <= index) {
         count += condition[keyEnumerator.Current].VirtualLength;
+        keyEnumerator.MoveNext();
       }
-      condition[keyEnumerator.Current].Manipulate(random, input[keyEnumerator.Current].Value, index - count - 1);
+      condition[keyEnumerator.Current].Manipulate(random, input[keyEnumerator.Current], index - count);
       return child;
     }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Plugin.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Plugin.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Plugin.cs	(revision 9226)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Encodings.VariableVector {
-  [Plugin("HeuristicLab.Encodings.VariableVector", "3.3.7.9194")]
+  [Plugin("HeuristicLab.Encodings.VariableVector", "3.3.7.9204")]
   [PluginFile("HeuristicLab.Encodings.VariableVector-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Properties/AssemblyInfo.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Properties/AssemblyInfo.cs	(revision 9226)
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.7.9194")]
+[assembly: AssemblyFileVersion("3.3.7.9204")]
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/DoubleVariable.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/DoubleVariable.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/DoubleVariable.cs	(revision 9226)
@@ -100,9 +100,9 @@
     }
 
-    public new DoubleVariable GetEmptyCopy() {
+    public override IVariable GetEmptyCopy() {
       return new DoubleVariable(variableName, min, max);
     }
-    public new DoubleVariable GetSetCopy() {
-      DoubleVariable copy = GetEmptyCopy();
+    public override IVariable GetSetCopy() {
+      DoubleVariable copy = (DoubleVariable)GetEmptyCopy();
       copy.CurrentCenter = this.CurrentCenter;
       copy.CurrentSpread = this.CurrentSpread;
@@ -153,5 +153,5 @@
       if (parent2Cast == null) { throw new ArgumentException("Argument is not of the correct type."); }
       if (pos > 1 || pos < 0) { throw new ArgumentOutOfRangeException(); }
-      DoubleVariable crossed = this.GetSetCopy();
+      DoubleVariable crossed = (DoubleVariable)this.GetSetCopy();
       if (pos == 0) {
         crossed.CurrentSpread = parent2Cast.CurrentSpread;
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IActionVariable.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IActionVariable.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IActionVariable.cs	(revision 9226)
@@ -20,8 +20,14 @@
 #endregion
 
+using System.Collections.Generic;
 
 namespace HeuristicLab.Encodings.VariableVector {
   // variables which can be used in the action
   public interface IActionVariable : IVariable {
+    new IActionVariable GetEmptyCopy();
+    new IActionVariable GetSetCopy();
+
+    void SetTo(string value);
+    IEnumerable<string> GetAllPossibleActions();
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IVariable.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IVariable.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IVariable.cs	(revision 9226)
@@ -31,4 +31,5 @@
     IVariable GetEmptyCopy();
     IVariable GetSetCopy();
+
     void Randomize(IRandom random);
     bool MatchInput(string target);
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IntVariable.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IntVariable.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IntVariable.cs	(revision 9226)
@@ -63,4 +63,5 @@
       this.possibleFeatures = new List<int>(original.possibleFeatures);
       this.Wildcard = original.Wildcard;
+      this.currentValue = original.currentValue;
     }
     public IntVariable()
@@ -70,9 +71,10 @@
     public IntVariable(string variableName, IEnumerable<int> variableValues)
       : base(variableName) {
-      if (variableValues.Count() != variableValues.Distinct().Count()) {
-        throw new ArgumentException("variableValues have to be distinct.");
+      if (variableValues.Count() > 0 && variableValues.Count() != variableValues.Distinct().Count()) {
+        throw new ArgumentException("variableValues have to be distinct and there has to be at least one value.");
       }
       possibleFeatures = variableValues;
       Wildcard = false;
+      currentValue = possibleFeatures.First();
     }
     public IntVariable(string variableName, IEnumerable<int> variableValues, int currentValue)
@@ -102,12 +104,20 @@
     }
 
-    public new IntVariable GetEmptyCopy() {
+    public override IVariable GetEmptyCopy() {
       return new IntVariable(variableName, possibleFeatures);
     }
-    public new IntVariable GetSetCopy() {
-      IntVariable copy = GetEmptyCopy();
+
+    public override IVariable GetSetCopy() {
+      IntVariable copy = (IntVariable)GetEmptyCopy();
       copy.Wildcard = this.Wildcard;
       copy.CurrentValue = this.CurrentValue;
       return copy;
+    }
+
+    IActionVariable IActionVariable.GetEmptyCopy() {
+      return (IntVariable)GetEmptyCopy();
+    }
+    IActionVariable IActionVariable.GetSetCopy() {
+      return (IntVariable)GetSetCopy();
     }
 
@@ -143,5 +153,5 @@
       if (parent2Cast == null) { throw new ArgumentException("Argument is not of the correct type."); }
       if (pos != 0) { throw new ArgumentOutOfRangeException(); }
-      return this.GetSetCopy();
+      return (IntVariable)this.GetSetCopy();
     }
 
@@ -160,4 +170,25 @@
       }
     }
+
+    public override int GetHashCode() {
+      int result = 1;
+      int wildcardInt = Wildcard ? 1 : 0;
+      result = 37 * result + wildcardInt;
+      result = 37 * result + currentValue;
+      foreach (var feature in possibleFeatures) {
+        result = 37 * result + feature;
+      }
+      return result;
+    }
+
+    #region IActionVariable Members
+    public void SetTo(string value) {
+      currentValue = int.Parse(value);
+    }
+
+    public IEnumerable<string> GetAllPossibleActions() {
+      return possibleFeatures.Select(x => x.ToString());
+    }
+    #endregion
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/StringVariable.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/StringVariable.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/StringVariable.cs	(revision 9226)
@@ -74,4 +74,5 @@
       this.featureMapping = new Dictionary<int, string>(original.featureMapping);
       this.Wildcard = original.Wildcard;
+      this.currentValue = original.currentValue;
     }
     public StringVariable()
@@ -150,12 +151,18 @@
     }
 
-    public new StringVariable GetEmptyCopy() {
+    public override IVariable GetEmptyCopy() {
       return new StringVariable(variableName, featureMapping);
     }
-    public new StringVariable GetSetCopy() {
-      StringVariable copy = GetEmptyCopy();
+    public override IVariable GetSetCopy() {
+      StringVariable copy = (StringVariable)GetEmptyCopy();
       copy.Wildcard = this.Wildcard;
       copy.CurrentValue = this.CurrentValue;
       return copy;
+    }
+    IActionVariable IActionVariable.GetEmptyCopy() {
+      return (StringVariable)GetEmptyCopy();
+    }
+    IActionVariable IActionVariable.GetSetCopy() {
+      return (StringVariable)GetSetCopy();
     }
 
@@ -195,5 +202,5 @@
       if (parent2Cast == null) { throw new ArgumentException("Argument is not of the correct type."); }
       if (pos != 0) { throw new ArgumentOutOfRangeException(); }
-      return this.GetSetCopy();
+      return (StringVariable)this.GetSetCopy();
     }
 
@@ -202,6 +209,5 @@
       Wildcard = !Wildcard;
       if (!Wildcard) {
-        int newValue = featureMapping.First(x => x.Value.Equals(stringValue)).Key;
-        currentValue = newValue;
+        currentValue = featureMapping.First(x => x.Value.Equals(stringValue)).Key;
       }
     }
@@ -210,8 +216,29 @@
       Wildcard = random.NextDouble() < changeSymbolProbability;
       if (!Wildcard) {
-        int newValue = featureMapping.First(x => x.Value.Equals(stringValue)).Key;
-        currentValue = newValue;
-      }
-    }
+        currentValue = featureMapping.First(x => x.Value.Equals(stringValue)).Key;
+      }
+    }
+
+    public override int GetHashCode() {
+      int result = 1;
+      int wildcardInt = Wildcard ? 1 : 0;
+      result = 37 * result + wildcardInt;
+      result = 37 * result + currentValue;
+      foreach (var feature in featureMapping) {
+        result = 37 * result + feature.Key;
+        result = 37 * result + feature.Value.GetHashCode();
+      }
+      return result;
+    }
+
+    #region IActionVariable Members
+    public void SetTo(string value) {
+      currentValue = featureMapping.First(x => x.Value.Equals(value)).Key;
+    }
+
+    public IEnumerable<string> GetAllPossibleActions() {
+      return featureMapping.Values;
+    }
+    #endregion
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/Variable.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/Variable.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/Variable.cs	(revision 9226)
@@ -52,6 +52,6 @@
     }
 
-    public virtual IVariable GetEmptyCopy() { throw new NotSupportedException("This method is not supported. It should be implemented by every non abstract class."); }
-    public virtual IVariable GetSetCopy() { throw new NotSupportedException("This method is not supported. It should be implemented by every non abstract class."); }
+    public abstract IVariable GetEmptyCopy();
+    public abstract IVariable GetSetCopy();
 
     public abstract void Randomize(IRandom random);
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVector.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVector.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVector.cs	(revision 9226)
@@ -54,6 +54,6 @@
     protected VariableVector(VariableVector original, Cloner cloner)
       : base(original, cloner) {
-      condition = new VariableVectorCondition(original.condition);
-      action = new VariableVectorAction(original.action);
+      condition = (VariableVectorCondition)original.condition.Clone();
+      action = (VariableVectorAction)original.action;
     }
     public VariableVector() {
@@ -64,5 +64,5 @@
       : this() {
       if (condition == null || action == null) { throw new ArgumentNullException(); }
-      if (action.All(x => x is IActionVariable)) { throw new ArgumentException("Action can only use IActionVariable"); }
+      if (!action.All(x => x is IActionVariable)) { throw new ArgumentException("Action can only use IActionVariable"); }
       this.Condition.Add(condition);
       this.Action.Add(action.Cast<IActionVariable>());
@@ -70,4 +70,8 @@
     public override IDeepCloneable Clone(Cloner cloner) {
       return new VariableVector(this, cloner);
+    }
+
+    public VariableVector GetEmptyCopy() {
+      return new VariableVector(Condition.Values.Select(x => x.GetEmptyCopy()), Action.Values.Select(x => x.GetEmptyCopy()));
     }
 
@@ -128,41 +132,7 @@
       var targetCast = target as VariableVector;
       if (targetCast == null) { return false; }
-      if (!condition.Identical(targetCast.condition)) { return false; }
-      if (!action.Identical(targetCast.condition)) { return false; }
+      if (!condition.Identical(targetCast.Condition)) { return false; }
+      if (!action.Identical(targetCast.Action)) { return false; }
       return true;
-    }
-
-    [StorableClass]
-    [Item("VariableVectorActionComparer", "")]
-    public class VariableVectorActionComparer : Item, IEqualityComparer<VariableVectorAction>, IClassifierComparer {
-
-      [StorableConstructor]
-      protected VariableVectorActionComparer(bool deserializing) : base(deserializing) { }
-      protected VariableVectorActionComparer(VariableVectorActionComparer original, Cloner cloner)
-        : base(original, cloner) {
-      }
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new VariableVectorActionComparer(this, cloner);
-      }
-      public VariableVectorActionComparer() : base() { }
-
-      public bool Equals(VariableVectorAction x, VariableVectorAction y) {
-        throw new NotImplementedException();
-      }
-
-      public int GetHashCode(VariableVectorAction obj) {
-        throw new NotImplementedException();
-      }
-
-      public bool Equals(IAction x, IAction y) {
-        var xCast = x as VariableVectorAction;
-        var yCast = y as VariableVectorAction;
-        return x != null && y != null && Equals(xCast, yCast);
-      }
-
-      public int GetHashCode(IAction obj) {
-        var objCast = obj as VariableVectorAction;
-        return objCast != null ? GetHashCode(objCast) : obj.GetHashCode();
-      }
     }
   }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorAction.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorAction.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorAction.cs	(revision 9226)
@@ -22,9 +22,9 @@
 using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using System.Text;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Encodings.ConditionActionEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -33,29 +33,43 @@
   [StorableClass]
   [Item("VariableVectorAction", "")]
-  public class VariableVectorAction : ItemDictionary<StringValue, IActionVariable>, IAction {
+  public class VariableVectorAction : Dictionary<string, IActionVariable>, IAction {
 
-    public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } }
+    public IOrderedEnumerable<string> Order { get { return this.Keys.OrderBy(x => x); } }
 
     public int VirtualLength { get { return this.Values.Sum(x => x.VirtualLength); } }
 
     [StorableConstructor]
-    protected VariableVectorAction(bool deserializing) : base(deserializing) { }
-    protected VariableVectorAction(VariableVectorAction original, Cloner cloner)
-      : base(original, cloner) {
+    protected VariableVectorAction(bool deserializing) { }
+    protected VariableVectorAction(VariableVectorAction original, Cloner cloner) {
+      foreach (var item in original) {
+        Add((string)item.Key.Clone(), (IActionVariable)item.Value.Clone());
+      }
     }
     public VariableVectorAction() : base() { }
     public VariableVectorAction(int capacity) : base(capacity) { }
-    public VariableVectorAction(IDictionary<StringValue, IActionVariable> dictionary) : base(dictionary) { }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new VariableVectorAction(this, cloner);
+    public VariableVectorAction(IDictionary<string, IActionVariable> dictionary) : base(dictionary) { }
+
+    //protected override void OnItemsAdded(IEnumerable<KeyValuePair<string, IActionVariable>> items) {
+    //  foreach (var item in items) {
+    //    if (!(item.Value is StringVariable || item.Value is IntVariable)) {
+    //      throw new ArgumentException("Value has to be of type 'StringVariable' or 'IntVariable'");
+    //    }
+    //  }
+    //}
+
+    public VariableVectorAction GetEmptyCopy() {
+      VariableVectorAction emptyCopy = new VariableVectorAction(this.Count);
+      foreach (var keyValuePair in this) {
+        emptyCopy.Add(keyValuePair.Key, keyValuePair.Value.GetEmptyCopy());
+      }
+      return emptyCopy;
     }
 
-    protected override void OnItemsAdded(IEnumerable<KeyValuePair<StringValue, IActionVariable>> items) {
-      foreach (var item in items) {
-        if (!(item.Value is StringVariable || item.Value is IntVariable)) {
-          throw new ArgumentException("Value has to be of type 'StringVariable' or 'IntVariable'");
-        }
+    public VariableVectorAction GetSetCopy() {
+      VariableVectorAction setCopy = new VariableVectorAction(this.Count);
+      foreach (var keyValuePair in this) {
+        setCopy.Add(keyValuePair.Key, keyValuePair.Value.GetSetCopy());
       }
-      base.OnItemsAdded(items);
+      return setCopy;
     }
 
@@ -63,5 +77,5 @@
       var targetCast = target as VariableVectorAction;
       if (targetCast == null) { return false; }
-      if (this.Order.SequenceEqual(targetCast.Order)) { return false; }
+      if (!this.Order.SequenceEqual(targetCast.Order)) { return false; }
       foreach (var keyValuePair in targetCast) {
         if (!this[keyValuePair.Key].MatchVariable(keyValuePair.Value)) {
@@ -74,5 +88,5 @@
     public void Add(IEnumerable<IActionVariable> action) {
       foreach (var variable in action) {
-        this.Add(new StringValue(variable.VariableName), variable);
+        this.Add(variable.VariableName, variable);
       }
     }
@@ -82,5 +96,5 @@
       bool first = true;
       foreach (var variable in this.Values) {
-        if (!first) {
+        if (first) {
           first = false;
         } else {
@@ -98,5 +112,5 @@
     }
 
-    public bool Identical(VariableVectorCondition target) {
+    public bool Identical(VariableVectorAction target) {
       if (this.Order.SequenceEqual(target.Order)) { return false; }
       foreach (var keyValuePair in target) {
@@ -107,4 +121,39 @@
       return true;
     }
+
+    public virtual string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+    public virtual string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+    public static Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
+    }
+    public virtual Image ItemImage {
+      get { return ItemAttribute.GetImage(this.GetType()); }
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new VariableVectorAction(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorActionComparer.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorActionComparer.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorActionComparer.cs	(revision 9226)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.VariableVector {
+  [StorableClass]
+  [Item("VariableVectorActionComparer", "")]
+  public class VariableVectorActionComparer : Item, IEqualityComparer<VariableVectorAction>, IClassifierComparer {
+
+    [StorableConstructor]
+    protected VariableVectorActionComparer(bool deserializing) : base(deserializing) { }
+    protected VariableVectorActionComparer(VariableVectorActionComparer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new VariableVectorActionComparer(this, cloner);
+    }
+    public VariableVectorActionComparer() : base() { }
+
+    public bool Equals(VariableVectorAction x, VariableVectorAction y) {
+      if (!x.Order.SequenceEqual(y.Order)) return false;
+      foreach (var key in x.Keys) {
+        if (!x[key].Identical(y[key])) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    public int GetHashCode(VariableVectorAction obj) {
+      int result = 1;
+      foreach (var key in obj.Keys) {
+        result = 37 * result + key.GetHashCode();
+      }
+
+      foreach (var val in obj.Values) {
+        result = 37 * result + val.GetHashCode();
+      }
+      return result;
+    }
+
+    public bool Equals(IAction x, IAction y) {
+      var xCast = x as VariableVectorAction;
+      var yCast = y as VariableVectorAction;
+      return x != null && y != null && Equals(xCast, yCast);
+    }
+
+    public int GetHashCode(IAction obj) {
+      var objCast = obj as VariableVectorAction;
+      return objCast != null ? GetHashCode(objCast) : obj.GetHashCode();
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorCondition.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorCondition.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorCondition.cs	(revision 9226)
@@ -20,10 +20,11 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using System.Text;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Encodings.ConditionActionEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -32,28 +33,27 @@
   [StorableClass]
   [Item("VariableVectorCondition", "")]
-  public class VariableVectorCondition : ItemDictionary<StringValue, IVariable>, ICondition {
+  public class VariableVectorCondition : Dictionary<string, IVariable>, ICondition {
 
-    public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } }
+    public IOrderedEnumerable<string> Order { get { return this.Keys.OrderBy(x => x); } }
 
     public int VirtualLength { get { return this.Values.Sum(x => x.VirtualLength); } }
 
     [StorableConstructor]
-    protected VariableVectorCondition(bool deserializing) : base(deserializing) { }
-    protected VariableVectorCondition(VariableVectorCondition original, Cloner cloner)
-      : base(original, cloner) {
+    protected VariableVectorCondition(bool deserializing) { }
+    protected VariableVectorCondition(VariableVectorCondition original, Cloner cloner) {
+      foreach (var item in original) {
+        Add((string)item.Key.Clone(), (IVariable)item.Value.Clone());
+      }
     }
     public VariableVectorCondition() : base() { }
     public VariableVectorCondition(int capacity) : base(capacity) { }
-    public VariableVectorCondition(IDictionary<StringValue, IVariable> dictionary) : base(dictionary) { }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new VariableVectorCondition(this, cloner);
-    }
+    public VariableVectorCondition(IDictionary<string, IVariable> dictionary) : base(dictionary) { }
 
     public bool Match(IInput target) {
       var targetCast = target as VariableVectorInput;
       if (targetCast == null) { return false; }
-      if (this.Order.SequenceEqual(targetCast.Order)) { return false; }
-      foreach (var keyValuePair in targetCast) {
-        if (!this[keyValuePair.Key].MatchInput(keyValuePair.Value.Value)) {
+      if (!this.Keys.All(x => targetCast.Keys.Contains(x))) { return false; }
+      foreach (var key in this.Keys) {
+        if (!this[key].MatchInput(targetCast[key])) {
           return false;
         }
@@ -64,5 +64,5 @@
     public void Add(IEnumerable<IVariable> condition) {
       foreach (var variable in condition) {
-        this.Add(new StringValue(variable.VariableName), variable);
+        this.Add(variable.VariableName, variable);
       }
     }
@@ -72,5 +72,5 @@
       bool first = true;
       foreach (var variable in this.Values) {
-        if (!first) {
+        if (first) {
           first = false;
         } else {
@@ -93,5 +93,5 @@
 
     public bool Identical(VariableVectorCondition target) {
-      if (this.Order.SequenceEqual(target.Order)) { return false; }
+      if (!this.Order.SequenceEqual(target.Order)) { return false; }
       foreach (var keyValuePair in target) {
         if (!this[keyValuePair.Key].Identical(keyValuePair.Value)) {
@@ -101,4 +101,39 @@
       return true;
     }
+
+    public virtual string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+    public virtual string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+    public static Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
+    }
+    public virtual Image ItemImage {
+      get { return ItemAttribute.GetImage(this.GetType()); }
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      return new VariableVectorCondition(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorInput.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorInput.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorInput.cs	(revision 9226)
@@ -20,9 +20,11 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
+using System.Text;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Encodings.ConditionActionEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -31,18 +33,66 @@
   [StorableClass]
   [Item("VariableVectorInput", "")]
-  public class VariableVectorInput : ItemDictionary<StringValue, StringValue>, IInput {
+  public class VariableVectorInput : Dictionary<string, string>, IInput {
 
-    public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } }
+    public IOrderedEnumerable<string> Order { get { return this.Keys.OrderBy(x => x); } }
 
     [StorableConstructor]
-    protected VariableVectorInput(bool deserializing) : base(deserializing) { }
-    protected VariableVectorInput(VariableVectorInput original, Cloner cloner)
-      : base(original, cloner) {
+    protected VariableVectorInput(bool deserializing) { }
+    protected VariableVectorInput(VariableVectorInput original, Cloner cloner) {
+      foreach (var item in original) {
+        Add((string)item.Key.Clone(), (string)item.Value.Clone());
+      }
     }
     public VariableVectorInput() : base() { }
     public VariableVectorInput(int capacity) : base(capacity) { }
-    public VariableVectorInput(IDictionary<StringValue, StringValue> dictionary) : base(dictionary) { }
-    public override IDeepCloneable Clone(Cloner cloner) {
+    public VariableVectorInput(IDictionary<string, string> dictionary) : base(dictionary) { }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      bool first = true;
+      foreach (var item in this) {
+        if (first) {
+          first = false;
+        } else {
+          sb.Append("; ");
+        }
+        sb.Append(String.Format("{0}: {1}", item.Key, item.Value));
+      }
+      return sb.ToString();
+    }
+
+    public virtual string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+    public virtual string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+    public Version ItemVersion {
+      get { return ItemAttribute.GetVersion(this.GetType()); }
+    }
+    public static Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
+    }
+    public virtual Image ItemImage {
+      get { return ItemAttribute.GetImage(this.GetType()); }
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
       return new VariableVectorInput(this, cloner);
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      EventHandler handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      EventHandler handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
     }
   }
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/CombinedIntegerVectorClassificationProblem.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/CombinedIntegerVectorClassificationProblem.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/CombinedIntegerVectorClassificationProblem.cs	(revision 9226)
@@ -0,0 +1,176 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.CombinedIntegerVectorEncoding;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.ConditionActionClassification;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.CombinedIntegerVectorClassification {
+  [StorableClass]
+  public class CombinedIntegerVectorClassificationProblem : ConditionActionClassificationProblem<UniformRandomCombinedIntegerVectorCreator,
+                                                            CombinedIntegerVectorComparer,
+                                                            CombinedIntegerVectorClassificationProblemData> {
+    public override string ChildName {
+      get { return "CombinedIntegerVector"; }
+    }
+
+    #region parameter properties
+    private IFixedValueParameter<ItemSet<CombinedIntegerVector>> PossibleActionsConcreteClassParameter {
+      get { return (IFixedValueParameter<ItemSet<CombinedIntegerVector>>)Parameters["PossibleActionsConcreteClass"]; }
+    }
+    public override IFixedValueParameter<CombinedIntegerVectorComparer> ClassifierComparerParameter {
+      get { return (IFixedValueParameter<CombinedIntegerVectorComparer>)Parameters["ClassifierComparer"]; }
+    }
+    #endregion
+
+    #region properties
+    public new CombinedIntegerVectorClassificationProblemData ProblemData {
+      get { return ProblemDataParameter.Value; }
+      protected set {
+        ProblemDataParameter.Value = value;
+        if (value != null) {
+          SetProblemDataSpecificParameters();
+        }
+      }
+    }
+
+    public ItemSet<CombinedIntegerVector> PossibleActionsConcreteClass {
+      get { return PossibleActionsConcreteClassParameter.Value; }
+    }
+    public IClassifierComparer ClassifierComparer {
+      get { return ClassifierComparerParameter.Value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected CombinedIntegerVectorClassificationProblem(bool deserializing) : base(deserializing) { }
+    protected CombinedIntegerVectorClassificationProblem(CombinedIntegerVectorClassificationProblem original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CombinedIntegerVectorClassificationProblem(this, cloner);
+    }
+
+    public CombinedIntegerVectorClassificationProblem() :
+      this(new CombinedIntegerVectorClassificationProblemData(new Dataset(ConditionActionClassificationProblemData.defaultVariableNames, ConditionActionClassificationProblemData.defaultData),
+        ConditionActionClassificationProblemData.defaultVariableNames.Take(ConditionActionClassificationProblemData.defaultVariableNames.Length - 1), ConditionActionClassificationProblemData.defaultVariableNames.Last().ToEnumerable()),
+        new XCSEvaluator(), new UniformRandomCombinedIntegerVectorCreator(), new CombinedIntegerVectorCoveringCreator()) {
+    }
+
+    public CombinedIntegerVectorClassificationProblem(CombinedIntegerVectorClassificationProblemData problemData, XCSEvaluator evaluator, UniformRandomCombinedIntegerVectorCreator solutionCreator, ICoveringSolutionCreator coveringSolutionCreator)
+      : base(problemData, evaluator, solutionCreator, coveringSolutionCreator) {
+      Parameters.Add(new FixedValueParameter<CombinedIntegerVectorComparer>("ClassifierComparer", new CombinedIntegerVectorComparer()));
+      Parameters.Add(new FixedValueParameter<ItemSet<IAction>>("PossibleActions", new ItemSet<IAction>(ClassifierComparer)));
+      Parameters.Add(new FixedValueParameter<ItemSet<CombinedIntegerVector>>("PossibleActionsConcreteClass", new ItemSet<CombinedIntegerVector>(ClassifierComparer)));
+
+      SetProblemDataSpecificParameters();
+
+      InitializeOperators();
+
+      problemData.Changed += new System.EventHandler(problemData_Changed);
+    }
+
+    private void problemData_Changed(object sender, System.EventArgs e) {
+      SetProblemDataSpecificParameters();
+    }
+
+    private void SetProblemDataSpecificParameters() {
+      SolutionCreator.ActionPartLengthParameter.Value = ProblemData.ActionLengthParameter.Value;
+      SolutionCreator.LengthParameter.Value = ProblemData.LengthParameter.Value;
+      SolutionCreator.BoundsParameter.Value = ProblemData.BoundsParameter.Value;
+
+      SetPossibleActions();
+    }
+
+    private void InitializeOperators() {
+      Operators.AddRange(ApplicationManager.Manager.GetInstances<ICombinedIntegerVectorCrossover>());
+      Operators.AddRange(AddManipulators());
+
+      ParameterizeOperators();
+    }
+
+    private IEnumerable<ICombinedIntegerVectorManipulator> AddManipulators() {
+      var manipulator = new UniformSomePositionManipulator();
+      manipulator.ChildParameter.ActualName = ChildName;
+      manipulator.FetchedInputParameter.ActualName = ClassifierFetcher.CurrentInputToMatchParameter.ActualName;
+      manipulator.PossibleActionsParameter.ActualName = PossibleActionsConcreteClassParameter.Name;
+      return new List<ICombinedIntegerVectorManipulator>() { manipulator };
+    }
+
+    protected override void SetPossibleActions() {
+      //get bounds of action
+      IntMatrix actionBounds = GetElementsOfBoundsForAction(ProblemData.Bounds, ProblemData.Length.Value, ProblemData.ActionLength.Value);
+      int actionLength = ProblemData.ActionLength.Value;
+      int start = ProblemData.Length.Value - actionLength;
+      int[] elements = new int[actionLength];
+      int[] curPos = new int[actionLength];
+      bool done = false;
+      //initialize curPos
+      for (int i = 0; i < actionBounds.Rows; i++) {
+        curPos[i] = actionBounds[i, 0];
+      }
+      PossibleActions.Clear();
+      PossibleActionsConcreteClass.Clear();
+      while (!done) {
+        PossibleActions.Add(new CombinedIntegerVector(curPos, actionLength, actionBounds));
+        PossibleActionsConcreteClass.Add(new CombinedIntegerVector(curPos, actionLength, actionBounds));
+        curPos = GetNextAction(curPos, actionBounds, out done);
+      }
+      ThetaMinimalNumberOfActions.Value = PossibleActions.Count;
+    }
+
+    private int[] GetNextAction(int[] curPos, IntMatrix actionBounds, out bool done) {
+      int cur = 0;
+      while (cur < curPos.Length) {
+        curPos[cur] += actionBounds.Columns < 3 ? 1 : actionBounds[cur, 2];
+        if (curPos[cur] >= actionBounds[cur, 1]) {
+          curPos[cur] = actionBounds[cur, 0];
+          cur++;
+        } else {
+          break;
+        }
+      }
+      done = cur >= curPos.Length;
+      return curPos;
+    }
+
+    private IntMatrix GetElementsOfBoundsForAction(IntMatrix bounds, int length, int actionPartLength) {
+      IntMatrix actionBounds = new IntMatrix(actionPartLength, bounds.Columns);
+      int start = length - actionPartLength;
+      for (int i = start; i < length; i++) {
+        int pos = i % bounds.Rows;
+        for (int j = 0; j < bounds.Columns; j++) {
+          actionBounds[i - start, j] = bounds[pos, j];
+        }
+      }
+      return actionBounds;
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/CombinedIntegerVectorClassificationProblemData.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/CombinedIntegerVectorClassificationProblemData.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/CombinedIntegerVectorClassificationProblemData.cs	(revision 9226)
@@ -0,0 +1,129 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.CombinedIntegerVectorEncoding;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.ConditionActionClassification;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.CombinedIntegerVectorClassification {
+  [StorableClass]
+  [Item("CombinedIntegerVectorClassificationProblemData", "A problem data for LCS.")]
+  public class CombinedIntegerVectorClassificationProblemData : ConditionActionClassificationProblemData {
+
+    #region parameter properites
+    public IFixedValueParameter<IntValue> LengthParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters["Length"]; }
+    }
+    public IFixedValueParameter<IntValue> ActionLengthParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters["ActionLength"]; }
+    }
+    public IFixedValueParameter<IntMatrix> BoundsParameter {
+      get { return (IFixedValueParameter<IntMatrix>)Parameters["Bounds"]; }
+    }
+    #endregion
+
+    #region properties
+    public IntValue Length {
+      get { return LengthParameter.Value; }
+    }
+
+    public IntValue ActionLength {
+      get { return ActionLengthParameter.Value; }
+    }
+
+    public IntMatrix Bounds {
+      get { return BoundsParameter.Value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected CombinedIntegerVectorClassificationProblemData(bool deserializing) : base(deserializing) { }
+    protected CombinedIntegerVectorClassificationProblemData(CombinedIntegerVectorClassificationProblemData original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CombinedIntegerVectorClassificationProblemData(this, cloner);
+    }
+
+    public CombinedIntegerVectorClassificationProblemData(Dataset dataset, IEnumerable<string> allowedConditionVariables, IEnumerable<string> allowedActionVariables) :
+      base(dataset, allowedConditionVariables, allowedActionVariables) {
+      Parameters.Add(new FixedValueParameter<IntValue>("Length", "", new IntValue(allowedConditionVariables.Count() + allowedActionVariables.Count())));
+      Parameters.Add(new FixedValueParameter<IntValue>("ActionLength", "", new IntValue(allowedActionVariables.Count())));
+      Parameters.Add(new FixedValueParameter<IntMatrix>("Bounds", "", GetBoundsMatrix(dataset, allowedConditionVariables, allowedActionVariables)));
+    }
+
+    private IntMatrix GetBoundsMatrix(Dataset dataset, IEnumerable<string> conditionVariables, IEnumerable<string> actionVariables) {
+      IntMatrix bounds = new IntMatrix(conditionVariables.Count() + actionVariables.Count(), 2);
+      int index = 0;
+      foreach (var variable in conditionVariables) {
+        var values = dataset.GetDoubleValues(variable);
+        bounds[index, 0] = (int)values.Min();
+        bounds[index, 1] = (int)values.Max() + 2;
+        index++;
+      }
+      foreach (var variable in actionVariables) {
+        var values = dataset.GetDoubleValues(variable);
+        bounds[index, 0] = (int)values.Min();
+        bounds[index, 1] = (int)values.Max() + 1;
+        index++;
+      }
+      return bounds;
+    }
+
+    public override IInput FetchInput(int rowNumber) {
+      if (!fetchInputCache.ContainsKey(rowNumber)) {
+        int[] elements = new int[Length.Value];
+        var variableNamesList = Dataset.VariableNames.ToList();
+        int elementIndex = 0;
+        for (int i = 0; i < variableNamesList.Count; i++) {
+          if (AllowedConditionVariables.Contains(variableNamesList[i])) {
+            elements[elementIndex] = int.Parse(Dataset.GetValue(rowNumber, i));
+            elementIndex++;
+          }
+        }
+        for (int i = 0; i < variableNamesList.Count; i++) {
+          if (AllowedActionVariables.Contains(variableNamesList[i])) {
+            elements[elementIndex] = int.Parse(Dataset.GetValue(rowNumber, i));
+            elementIndex++;
+          }
+        }
+        if (elementIndex != Length.Value) {
+          throw new ArgumentException("Length of classifier is not equal to the number of allowed condition + action variables.");
+        }
+        fetchInputCache.Add(rowNumber, new CombinedIntegerVector(elements, ActionLengthParameter.Value.Value, BoundsParameter.Value));
+      }
+      return fetchInputCache[rowNumber];
+    }
+
+    public override IAction FetchAction(int rowNumber) {
+      return (FetchInput(rowNumber) as IClassifier).Action;
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3.csproj	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3.csproj	(revision 9226)
@@ -0,0 +1,130 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.CombinedIntegerVectorClassification</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.IntegerVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CombinedIntegerVectorClassificationProblem.cs" />
+    <Compile Include="CombinedIntegerVectorClassificationProblemData.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Plugin.cs" />
+    <None Include="Plugin.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.CombinedIntegerVectorEncoding\3.3\HeuristicLab.Encodings.CombinedIntegerVectorEncoding-3.3.csproj">
+      <Project>{CE7163C5-BFFE-45F0-9BD0-E10EF24E8BD2}</Project>
+      <Name>HeuristicLab.Encodings.CombinedIntegerVectorEncoding-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.ConditionActionEncoding\3.3\HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj">
+      <Project>{422FB262-0845-4969-8D16-12F057AA90B1}</Project>
+      <Name>HeuristicLab.Encodings.ConditionActionEncoding-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.ConditionActionClassification\3.3\HeuristicLab.Problems.ConditionActionClassification-3.3.csproj">
+      <Project>{EA51D441-F6A3-41E1-9993-A2488E93C222}</Project>
+      <Name>HeuristicLab.Problems.ConditionActionClassification-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj">
+      <Project>{DF87C13E-A889-46FF-8153-66DCAA8C5674}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis-3.4</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/Plugin.cs.frame
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/Plugin.cs.frame	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/Plugin.cs.frame	(revision 9226)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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 HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.CombinedIntegerVectorClassification {
+  [Plugin("HeuristicLab.Problems.CombinedIntegerVectorClassification", "3.3.7.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  public class HeuristicLabProblemsCombinedIntegerVectorClassificationPlugin : PluginBase {
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/Properties/AssemblyInfo.cs.frame	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.CombinedIntegerVectorClassification/3.3/Properties/AssemblyInfo.cs.frame	(revision 9226)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2012 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("fcebabec-8ed5-42ed-839c-b72bf399f4ed")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.7.9194")]
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/ConditionActionClassificationProblem.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/ConditionActionClassificationProblem.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/ConditionActionClassificationProblem.cs	(revision 9226)
@@ -0,0 +1,222 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Instances;
+
+namespace HeuristicLab.Problems.ConditionActionClassification {
+  [StorableClass]
+  public abstract class ConditionActionClassificationProblem<T, U, V> : HeuristicOptimizationProblem<XCSEvaluator, T>, IConditionActionProblem,
+  IProblemInstanceConsumer<V>
+    where T : class, ISolutionCreator
+    where U : class, IClassifierComparer
+    where V : class, IConditionActionProblemData {
+    private const string ClassifierFetcherParameterName = "ClassifierFetcher";
+    private const string ActionExecuterParameterName = "ActionExecuter";
+    private const string ActionSetSubsumptionOperatorParameterName = "ActionSetSubsumption";
+
+    public abstract string ChildName { get; }
+
+    IXCSEvaluator IConditionActionProblem.Evaluator {
+      get { return Evaluator; }
+    }
+
+    #region parameter properties
+    public IValueParameter<V> ProblemDataParameter {
+      get { return (IValueParameter<V>)Parameters["ProblemData"]; }
+    }
+    public IValueParameter<ICoveringSolutionCreator> CoveringSolutionCreatorParameter {
+      get { return (IValueParameter<ICoveringSolutionCreator>)Parameters["CoveringSolutionCreator"]; }
+    }
+    public IFixedValueParameter<PercentValue> ChangeSymbolProbabilityInCoveringParameter {
+      get { return (IFixedValueParameter<PercentValue>)Parameters["ChangeSymbolProbabilityInCovering"]; }
+    }
+    public IFixedValueParameter<DoubleValue> PositiveRewardParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters["PositiveReward"]; }
+    }
+    public IFixedValueParameter<DoubleValue> NegativeRewardParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters["NegativeReward"]; }
+    }
+    public IFixedValueParameter<DoubleValue> InitialPredictionParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters["InitialPrediction"]; }
+    }
+    public IFixedValueParameter<DoubleValue> InitialErrorParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters["InitialError"]; }
+    }
+    public IFixedValueParameter<DoubleValue> InitialFitnessParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters["InitialFitness"]; }
+    }
+    public IFixedValueParameter<ItemSet<IAction>> PossibleActionsParameter {
+      get { return (IFixedValueParameter<ItemSet<IAction>>)Parameters["PossibleActions"]; }
+    }
+    public IFixedValueParameter<IntValue> ThetaMinimalNumberOfActionsParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters["ThetaMinimalNumberOfActions"]; }
+    }
+    #endregion
+
+    #region properties
+    IParameter IConditionActionProblem.ProblemDataParameter {
+      get { return ProblemDataParameter; }
+    }
+    IConditionActionProblemData IConditionActionProblem.ProblemData {
+      get { return ProblemData; }
+    }
+    public virtual V ProblemData {
+      get { return ProblemDataParameter.Value; }
+      protected set {
+        ProblemDataParameter.Value = value;
+      }
+    }
+    IParameter IConditionActionProblem.PossibleActionsParameter {
+      get { return PossibleActionsParameter; }
+    }
+    public ItemSet<IAction> PossibleActions {
+      get { return PossibleActionsParameter.Value; }
+    }
+    public IActionExecuter ActionExecuter {
+      get { return ActionExecuterParameter.Value; }
+    }
+    public ValueParameter<IActionExecuter> ActionExecuterParameter {
+      get { return (ValueParameter<IActionExecuter>)Parameters[ActionExecuterParameterName]; }
+    }
+    IParameter IConditionActionProblem.ActionExecuterParameter { get { return ActionExecuterParameter; } }
+    public ClassifierFetcher ClassifierFetcher {
+      get { return ClassifierFetcherParameter.Value; }
+    }
+    public ValueParameter<ClassifierFetcher> ClassifierFetcherParameter {
+      get { return (ValueParameter<ClassifierFetcher>)Parameters[ClassifierFetcherParameterName]; }
+    }
+    IClassifierFetcher IConditionActionProblem.ClassifierFetcher { get { return ClassifierFetcher; } }
+    IParameter IConditionActionProblem.ClassifierFetcherParameter { get { return ClassifierFetcherParameter; } }
+    public ActionSetSubsumptionOperator ActionSetSubsumptionOperator {
+      get { return ActionSetSubsumptionOperatorParameter.Value; }
+    }
+    public ValueParameter<ActionSetSubsumptionOperator> ActionSetSubsumptionOperatorParameter {
+      get { return (ValueParameter<ActionSetSubsumptionOperator>)Parameters[ActionSetSubsumptionOperatorParameterName]; }
+    }
+    IActionSetSubsumption IConditionActionProblem.ActionSetSubsumptionOperator { get { return ActionSetSubsumptionOperator; } }
+    IParameter IConditionActionProblem.ActionSetSubsumptionOperatorParameter { get { return ActionSetSubsumptionOperatorParameter; } }
+
+    protected IntValue ThetaMinimalNumberOfActions {
+      get { return ThetaMinimalNumberOfActionsParameter.Value; }
+    }
+    IParameter IConditionActionProblem.ThetaMinimalNumberOfActionsParameter {
+      get { return ThetaMinimalNumberOfActionsParameter; }
+    }
+    public ICoveringSolutionCreator CoveringSolutionCreator {
+      get { return CoveringSolutionCreatorParameter.Value; }
+    }
+    IParameter IConditionActionProblem.CoveringSolutionCreatorParameter {
+      get { return CoveringSolutionCreatorParameter; }
+    }
+    IParameter IConditionActionProblem.ClassifierComparerParameter {
+      get { return ClassifierComparerParameter; }
+    }
+
+    public abstract IFixedValueParameter<U> ClassifierComparerParameter { get; }
+    #endregion
+
+    [StorableConstructor]
+    protected ConditionActionClassificationProblem(bool deserializing) : base(deserializing) { }
+    protected ConditionActionClassificationProblem(ConditionActionClassificationProblem<T, U, V> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public ConditionActionClassificationProblem(V problemData, XCSEvaluator evaluator, T solutionCreator, ICoveringSolutionCreator coveringSolutionCreator)
+      : base(evaluator, solutionCreator) {
+      Parameters.Add(new ValueParameter<V>("ProblemData", "", problemData));
+      Parameters.Add(new FixedValueParameter<DoubleValue>("PositiveReward", "", new DoubleValue(1000)));
+      Parameters.Add(new FixedValueParameter<DoubleValue>("NegativeReward", "", new DoubleValue(0)));
+      Parameters.Add(new FixedValueParameter<DoubleValue>("InitialPrediction", "Initial Presiction", new DoubleValue(0)));
+      Parameters.Add(new FixedValueParameter<DoubleValue>("InitialError", "Initial Error", new DoubleValue(0)));
+      Parameters.Add(new FixedValueParameter<DoubleValue>("InitialFitness", "Initial Fitness", new DoubleValue(0)));
+
+      Parameters.Add(new ValueParameter<IActionExecuter>(ActionExecuterParameterName, "", new ActionExecuter()));
+      Parameters.Add(new ValueParameter<ClassifierFetcher>(ClassifierFetcherParameterName, "", new ClassifierFetcher()));
+      Parameters.Add(new FixedValueParameter<IntValue>("ThetaMinimalNumberOfActions", "Minimal number of actions, which have to be present in the match set, or else covering will occure.", new IntValue(1)));
+
+      Parameters.Add(new ValueParameter<ICoveringSolutionCreator>("CoveringSolutionCreator", "", coveringSolutionCreator));
+      Parameters.Add(new FixedValueParameter<PercentValue>("ChangeSymbolProbabilityInCovering", "", new PercentValue(0.33)));
+
+      Parameters.Add(new ValueParameter<ActionSetSubsumptionOperator>(ActionSetSubsumptionOperatorParameterName, "", new ActionSetSubsumptionOperator()));
+
+      Evaluator.InitialErrorParameter.ActualName = "InitialError";
+      Evaluator.InitialFitnessParameter.ActualName = "InitialFitness";
+      Evaluator.InitialPredictionParameter.ActualName = "InitialPrediction";
+
+      coveringSolutionCreator.ChangeSymbolProbabilityParameter.ActualName = ChangeSymbolProbabilityInCoveringParameter.Name;
+      coveringSolutionCreator.CoverInputParameter.ActualName = ClassifierFetcher.CurrentInputToMatchParameter.ActualName;
+      coveringSolutionCreator.CreatedClassifierParameter.ActualName = ChildName;
+
+      ClassifierFetcher.ProblemDataParameter.ActualName = ProblemDataParameter.Name;
+
+      ActionExecuter.CurrentActionToMatchParameter.ActualName = ClassifierFetcher.CurrentActionToMatchParameter.ActualName;
+      ActionExecuter.NegativeRewardParameter.ActualName = NegativeRewardParameter.Name;
+      ActionExecuter.PositiveRewardParameter.ActualName = PositiveRewardParameter.Name;
+
+      ActionSetSubsumptionOperator.ClassifiersParameter.ActualName = ChildName;
+
+      InitializeOperators();
+
+      problemData.Changed += new System.EventHandler(problemData_Changed);
+    }
+
+    private void problemData_Changed(object sender, System.EventArgs e) {
+      SetPossibleActions();
+    }
+
+    private void InitializeOperators() {
+      Operators.Add(new BestTrainingXCSSolutionAnalyzer());
+      Operators.Add(new CurrentXCSSolutionAnalyzer());
+    }
+
+    protected void ParameterizeOperators() {
+      foreach (XCSSolutionAnalyzer xcsAnalyzer in Operators.OfType<XCSSolutionAnalyzer>()) {
+        xcsAnalyzer.ClassifierParameter.ActualName = ChildName;
+        xcsAnalyzer.PredictionParameter.ActualName = Evaluator.PredictionParameter.ActualName;
+        xcsAnalyzer.ErrorParameter.ActualName = Evaluator.ErrorParameter.ActualName;
+        xcsAnalyzer.FitnessParameter.ActualName = Evaluator.FitnessParameter.ActualName;
+        xcsAnalyzer.ExperienceParameter.ActualName = Evaluator.ExperienceParameter.ActualName;
+        xcsAnalyzer.AverageActionSetSizeParameter.ActualName = Evaluator.AverageActionSetSizeParameter.ActualName;
+        xcsAnalyzer.NumerosityParameter.ActualName = Evaluator.NumerosityParameter.ActualName;
+        xcsAnalyzer.TimestampParameter.ActualName = Evaluator.TimestampParameter.ActualName;
+        xcsAnalyzer.ProblemDataParameter.ActualName = ProblemDataParameter.Name;
+        xcsAnalyzer.ResultsParameter.ActualName = "Results";
+        xcsAnalyzer.ClassifierComparerParameter.ActualName = ClassifierComparerParameter.Name;
+      }
+    }
+
+    protected abstract void SetPossibleActions();
+
+    public void Load(V data) {
+      Name = data.Name;
+      Description = data.Description;
+      ProblemData = data;
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/ConditionActionClassificationProblemData.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/ConditionActionClassificationProblemData.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/ConditionActionClassificationProblemData.cs	(revision 9226)
@@ -0,0 +1,170 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.ConditionActionClassification {
+  [StorableClass]
+  [Item("ConditionActionClassificationProblemData", "A problem data for LCS.")]
+  public abstract class ConditionActionClassificationProblemData : ParameterizedNamedItem, IConditionActionProblemData {
+
+    #region default data
+    public static string[] defaultVariableNames = new string[] { "a", "b", "c", "d", "e", "f", "g" };
+    public static double[,] defaultData = new double[,]{
+      {0,0,1,1,0,0,0},
+      {0,1,1,1,0,0,0},
+      {0,0,1,0,0,0,1},
+      {1,0,1,0,1,1,0}
+    };
+    #endregion
+
+    #region parameter properites
+    public IFixedValueParameter<Dataset> DatasetParameter {
+      get { return (IFixedValueParameter<Dataset>)Parameters["Dataset"]; }
+    }
+    public IFixedValueParameter<ReadOnlyCheckedItemList<StringValue>> ConditionVariablesParameter {
+      get { return (IFixedValueParameter<ReadOnlyCheckedItemList<StringValue>>)Parameters["ConditionVariables"]; }
+    }
+    public IFixedValueParameter<ReadOnlyCheckedItemList<StringValue>> ActionVariablesParameter {
+      get { return (IFixedValueParameter<ReadOnlyCheckedItemList<StringValue>>)Parameters["ActionVariables"]; }
+    }
+    public IFixedValueParameter<IntRange> TrainingPartitionParameter {
+      get { return (IFixedValueParameter<IntRange>)Parameters["TrainingPartition"]; }
+    }
+    public IFixedValueParameter<IntRange> TestPartitionParameter {
+      get { return (IFixedValueParameter<IntRange>)Parameters["TestPartition"]; }
+    }
+    #endregion
+
+    #region properties
+    public Dataset Dataset {
+      get { return DatasetParameter.Value; }
+    }
+    public ICheckedItemList<StringValue> ConditionVariables {
+      get { return ConditionVariablesParameter.Value; }
+    }
+    public ICheckedItemList<StringValue> ActionVariables {
+      get { return ActionVariablesParameter.Value; }
+    }
+    public IEnumerable<string> AllowedConditionVariables {
+      get { return ConditionVariables.CheckedItems.Select(x => x.Value.Value); }
+    }
+    public IEnumerable<string> AllowedActionVariables {
+      get { return ActionVariables.CheckedItems.Select(x => x.Value.Value); }
+    }
+    public IntRange TrainingPartition {
+      get { return TrainingPartitionParameter.Value; }
+    }
+    public IntRange TestPartition {
+      get { return TestPartitionParameter.Value; }
+    }
+    public IEnumerable<int> TrainingIndices {
+      get {
+        return Enumerable.Range(TrainingPartition.Start, Math.Max(0, TrainingPartition.End - TrainingPartition.Start))
+                         .Where(IsTrainingSample);
+      }
+    }
+    public IEnumerable<int> TestIndices {
+      get {
+        return Enumerable.Range(TestPartition.Start, Math.Max(0, TestPartition.End - TestPartition.Start))
+           .Where(IsTestSample);
+      }
+    }
+    public bool IsTrainingSample(int index) {
+      return index >= 0 && index < Dataset.Rows &&
+        TrainingPartition.Start <= index && index < TrainingPartition.End &&
+        (index < TestPartition.Start || TestPartition.End <= index);
+    }
+    public bool IsTestSample(int index) {
+      return index >= 0 && index < Dataset.Rows &&
+             TestPartition.Start <= index && index < TestPartition.End;
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected ConditionActionClassificationProblemData(bool deserializing) : base(deserializing) { }
+    protected ConditionActionClassificationProblemData(ConditionActionClassificationProblemData original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public ConditionActionClassificationProblemData(Dataset dataset, IEnumerable<string> allowedConditionVariables, IEnumerable<string> allowedActionVariables) {
+      if (dataset == null) throw new ArgumentNullException("The dataset must not be null.");
+      if (allowedActionVariables == null) throw new ArgumentNullException("The allowedActionVariables must not be null.");
+      if (allowedConditionVariables == null) throw new ArgumentNullException("The allowedActionVariables must not be null.");
+
+      if (allowedActionVariables.Except(dataset.DoubleVariables).Any())
+        throw new ArgumentException("All allowed action variables must be present in the dataset and of type double.");
+      if (allowedConditionVariables.Except(dataset.DoubleVariables).Any())
+        throw new ArgumentException("All allowed condition variables must be present in the dataset and of type double.");
+
+      var actionVariables = new CheckedItemList<StringValue>(dataset.DoubleVariables.Select(x => new StringValue(x)));
+      var conditionVariables = new CheckedItemList<StringValue>(actionVariables);
+      foreach (StringValue x in actionVariables) {
+        actionVariables.SetItemCheckedState(x, allowedActionVariables.Contains(x.Value));
+        conditionVariables.SetItemCheckedState(x, allowedConditionVariables.Contains(x.Value));
+      }
+
+      int trainingPartitionStart = 0;
+      int trainingPartitionEnd = dataset.Rows / 2;
+      int testPartitionStart = dataset.Rows / 2;
+      int testPartitionEnd = dataset.Rows;
+
+      Parameters.Add(new FixedValueParameter<Dataset>("Dataset", "", dataset));
+      Parameters.Add(new FixedValueParameter<ReadOnlyCheckedItemList<StringValue>>("ActionVariables", "", actionVariables.AsReadOnly()));
+      Parameters.Add(new FixedValueParameter<ReadOnlyCheckedItemList<StringValue>>("ConditionVariables", "", conditionVariables.AsReadOnly()));
+      Parameters.Add(new FixedValueParameter<IntRange>("TrainingPartition", "", new IntRange(trainingPartitionStart, trainingPartitionEnd)));
+      Parameters.Add(new FixedValueParameter<IntRange>("TestPartition", "", new IntRange(testPartitionStart, testPartitionEnd)));
+
+      ((ValueParameter<Dataset>)DatasetParameter).ReactOnValueToStringChangedAndValueItemImageChanged = false;
+    }
+
+    public event EventHandler Changed;
+    protected virtual void OnChanged() {
+      var listeners = Changed;
+      if (listeners != null) listeners(this, EventArgs.Empty);
+    }
+
+    public IEnumerable<IInput> FetchInput(IEnumerable<int> rows) {
+      foreach (var row in rows) {
+        yield return FetchInput(row);
+      }
+    }
+    public abstract IInput FetchInput(int rowNumber);
+
+    public IEnumerable<IAction> FetchAction(IEnumerable<int> rows) {
+      foreach (var row in rows) {
+        yield return FetchAction(row);
+      }
+    }
+    public abstract IAction FetchAction(int rowNumber);
+
+    protected IDictionary<int, IInput> fetchInputCache = new Dictionary<int, IInput>();
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/HeuristicLab.Problems.ConditionActionClassification-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/HeuristicLab.Problems.ConditionActionClassification-3.3.csproj	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/HeuristicLab.Problems.ConditionActionClassification-3.3.csproj	(revision 9226)
@@ -71,8 +71,7 @@
       <Private>False</Private>
     </Reference>
-    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+    <Reference Include="HeuristicLab.Problems.Instances-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <Private>False</Private>
     </Reference>
-    <Reference Include="HeuristicLab.Problems.Instances-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -85,6 +84,6 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Implementation\ConditionActionClassificationProblem.cs" />
-    <Compile Include="Implementation\ConditionActionClassificationProblemData.cs" />
+    <Compile Include="ConditionActionClassificationProblem.cs" />
+    <Compile Include="ConditionActionClassificationProblemData.cs" />
     <Compile Include="Plugin.cs" />
     <None Include="HeuristicLab.snk" />
@@ -99,4 +98,5 @@
       <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
       <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Encodings.CombinedIntegerVectorEncoding\3.3\HeuristicLab.Encodings.CombinedIntegerVectorEncoding-3.3.csproj">
@@ -109,4 +109,8 @@
       <Name>HeuristicLab.Encodings.ConditionActionEncoding-3.3</Name>
       <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj">
+      <Project>{DF87C13E-A889-46FF-8153-66DCAA8C5674}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis-3.4</Name>
     </ProjectReference>
   </ItemGroup>
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 9226)
@@ -159,4 +159,11 @@
     }
 
+    public IList GetValues(string variableName) {
+      IList list;
+      if (!variableValues.TryGetValue(variableName, out list))
+        throw new ArgumentException("The variable " + variableName + " does not exist in the dataset.");
+      return list;
+    }
+
     public IEnumerable<double> GetDoubleValues(string variableName) {
       IList list;
@@ -227,4 +234,10 @@
     public string GetValue(int rowIndex, int columnIndex) {
       return variableValues[variableNames[columnIndex]][rowIndex].ToString();
+    }
+    public string GetValue(int rowIndex, string variableName) {
+      if (!variableValues.Keys.Contains(variableName)) {
+        throw new ArgumentException("The variable " + variableName + " does not exist in the dataset.");
+      }
+      return variableValues[variableName][rowIndex].ToString();
     }
     public bool SetValue(string value, int rowIndex, int columnIndex) {
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 9225)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 9226)
@@ -41,5 +41,5 @@
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
@@ -50,5 +50,5 @@
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
@@ -58,5 +58,5 @@
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
@@ -66,5 +66,5 @@
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <Optimize>true</Optimize>
@@ -76,5 +76,5 @@
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
@@ -84,5 +84,5 @@
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
-    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <Optimize>true</Optimize>
@@ -93,11 +93,36 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="ALGLIB-3.6.0, Version=3.6.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <HintPath>..\..\bin\ALGLIB-3.6.0.dll</HintPath>
-      <Private>False</Private>
-    </Reference>
-    <Reference Include="HeuristicLab.ALGLIB-3.6.0, Version=3.6.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <HintPath>..\..\bin\HeuristicLab.ALGLIB-3.6.0.dll</HintPath>
-      <Private>False</Private>
+    <Reference Include="ALGLIB-3.6.0">
+      <HintPath>..\..\..\..\trunk\sources\bin\ALGLIB-3.6.0.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.ALGLIB-3.6.0">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.ALGLIB-3.6.0.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
     </Reference>
     <Reference Include="System" />
@@ -239,52 +264,7 @@
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
-      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
-      <Name>HeuristicLab.Collections-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
-      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
-      <Name>HeuristicLab.Common.Resources-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
-      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
-      <Name>HeuristicLab.Common-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
       <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
       <Name>HeuristicLab.Core-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
-      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
-      <Name>HeuristicLab.Data-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
-      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
-      <Name>HeuristicLab.Optimization-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
-      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
-      <Name>HeuristicLab.Parameters-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
-      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
-      <Name>HeuristicLab.Persistence-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
-      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
-      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Problems.Instances\3.3\HeuristicLab.Problems.Instances-3.3.csproj">
-      <Project>{3540E29E-4793-49E7-8EE2-FEA7F61C3994}</Project>
-      <Name>HeuristicLab.Problems.Instances-3.3</Name>
       <Private>False</Private>
     </ProjectReference>
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.Instances.ConditionActionClassification/3.3/CombinedIntegerVectorCVSInstanceProvider.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.Instances.ConditionActionClassification/3.3/CombinedIntegerVectorCVSInstanceProvider.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.Instances.ConditionActionClassification/3.3/CombinedIntegerVectorCVSInstanceProvider.cs	(revision 9226)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Problems.CombinedIntegerVectorClassification;
+using HeuristicLab.Problems.DataAnalysis;
+using HeuristicLab.Problems.Instances.DataAnalysis;
+
+namespace HeuristicLab.Problems.Instances.ConditionActionClassification {
+  public class CombinedIntegerVectorCVSInstanceProvider : ConditionActionInstanceProvider<CombinedIntegerVectorClassificationProblemData> {
+    public override string Description { get { return ""; } }
+
+    public override string Name {
+      get { return "CSV File"; }
+    }
+
+    public override string ReferencePublication {
+      get { return ""; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri("http://dev.heuristiclab.com/trac/hl/core/wiki/UsersFAQ#DataAnalysisImportFileFormat"); }
+    }
+
+    public override bool CanImportData {
+      get { return true; }
+    }
+
+    public override CombinedIntegerVectorClassificationProblemData ImportData(string path) {
+      TableFileParser csvParser = new TableFileParser();
+      csvParser.Parse(path);
+      Dataset dataset = new Dataset(csvParser.VariableNames, csvParser.Values);
+
+      CombinedIntegerVectorClassificationProblemData problemData = new CombinedIntegerVectorClassificationProblemData(dataset,
+        csvParser.VariableNames.Take(csvParser.VariableNames.Count() - 1), new List<string>() { csvParser.VariableNames.Last() });
+
+      return problemData;
+    }
+  }
+}
Index: anches/LearningClassifierSystems/HeuristicLab.Problems.Instances.ConditionActionClassification/3.3/ConditionActionCVSInstanceProvider.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.Instances.ConditionActionClassification/3.3/ConditionActionCVSInstanceProvider.cs	(revision 9225)
+++ 	(revision )
@@ -1,60 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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;
-using System.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Problems.ConditionActionClassification;
-using HeuristicLab.Problems.DataAnalysis;
-using HeuristicLab.Problems.Instances.DataAnalysis;
-
-namespace HeuristicLab.Problems.Instances.ConditionActionClassification {
-  public class ConditionActionCVSInstanceProvider : ConditionActionInstanceProvider<ConditionActionClassificationProblemData> {
-    public override string Description { get { return ""; } }
-
-    public override string Name {
-      get { return "CSV File"; }
-    }
-
-    public override string ReferencePublication {
-      get { return ""; }
-    }
-
-    public override Uri WebLink {
-      get { return new Uri("http://dev.heuristiclab.com/trac/hl/core/wiki/UsersFAQ#DataAnalysisImportFileFormat"); }
-    }
-
-    public override bool CanImportData {
-      get { return true; }
-    }
-
-    public override ConditionActionClassificationProblemData ImportData(string path) {
-      TableFileParser csvParser = new TableFileParser();
-      csvParser.Parse(path);
-      Dataset dataset = new Dataset(csvParser.VariableNames, csvParser.Values);
-
-      ConditionActionClassificationProblemData problemData = new ConditionActionClassificationProblemData(dataset,
-        csvParser.VariableNames.Take(csvParser.VariableNames.Count() - 1), new List<string>() { csvParser.VariableNames.Last() });
-
-      return problemData;
-    }
-  }
-}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.Instances.ConditionActionClassification/3.3/HeuristicLab.Problems.Instances.ConditionActionClassification-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.Instances.ConditionActionClassification/3.3/HeuristicLab.Problems.Instances.ConditionActionClassification-3.3.csproj	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.Instances.ConditionActionClassification/3.3/HeuristicLab.Problems.Instances.ConditionActionClassification-3.3.csproj	(revision 9226)
@@ -0,0 +1,104 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{1CC7585E-DD22-41FA-869B-93DE41EA8936}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.Instances.ConditionActionClassification</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.Instances.ConditionActionClassification-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3">
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances.DataAnalysis-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="CombinedIntegerVectorCVSInstanceProvider.cs" />
+    <Compile Include="ConditionActionInstanceProvider.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.ConditionActionEncoding\3.3\HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj">
+      <Project>{422FB262-0845-4969-8D16-12F057AA90B1}</Project>
+      <Name>HeuristicLab.Encodings.ConditionActionEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.CombinedIntegerVectorClassification\3.3\HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3.csproj">
+      <Project>{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}</Project>
+      <Name>HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.ConditionActionClassification\3.3\HeuristicLab.Problems.ConditionActionClassification-3.3.csproj">
+      <Project>{EA51D441-F6A3-41E1-9993-A2488E93C222}</Project>
+      <Name>HeuristicLab.Problems.ConditionActionClassification-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj">
+      <Project>{DF87C13E-A889-46FF-8153-66DCAA8C5674}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis-3.4</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/HeuristicLab.Problems.VariableVectorClassification-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/HeuristicLab.Problems.VariableVectorClassification-3.3.csproj	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/HeuristicLab.Problems.VariableVectorClassification-3.3.csproj	(revision 9226)
@@ -0,0 +1,116 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.VariableVectorClassification</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.VariableVectorClassification-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="VariableVectorClassificationProblem.cs" />
+    <Compile Include="VariableVectorClassificationProblemData.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Plugin.cs" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.ConditionActionEncoding\3.3\HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj">
+      <Project>{422FB262-0845-4969-8D16-12F057AA90B1}</Project>
+      <Name>HeuristicLab.Encodings.ConditionActionEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.VariableVector\3.3\HeuristicLab.Encodings.VariableVector-3.3.csproj">
+      <Project>{7C116F48-7218-4105-BD6E-EE868E2D4823}</Project>
+      <Name>HeuristicLab.Encodings.VariableVector-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.ConditionActionClassification\3.3\HeuristicLab.Problems.ConditionActionClassification-3.3.csproj">
+      <Project>{EA51D441-F6A3-41E1-9993-A2488E93C222}</Project>
+      <Name>HeuristicLab.Problems.ConditionActionClassification-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj">
+      <Project>{DF87C13E-A889-46FF-8153-66DCAA8C5674}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis-3.4</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/Plugin.cs.frame
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/Plugin.cs.frame	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/Plugin.cs.frame	(revision 9226)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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 HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.VariableVectorClassification {
+  [Plugin("HeuristicLab.Problems.ConditionActionClassification", "3.3.7.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.VariableVectorClassification-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  public class HeuristicLabProblemsVariableVectorClassificationPlugin : PluginBase {
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/Properties/AssemblyInfo.cs.frame	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/Properties/AssemblyInfo.cs.frame	(revision 9226)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.VariableVectorClassification-3.3")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2012 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("15696931-c308-48bc-864e-08c7e5c90bfc")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.7.9194")]
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/VariableVectorClassificationProblem.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/VariableVectorClassificationProblem.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/VariableVectorClassificationProblem.cs	(revision 9226)
@@ -0,0 +1,173 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Encodings.VariableVector;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.ConditionActionClassification;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.CombinedIntegerVectorClassification {
+  [StorableClass]
+  public class VariableVectorClassificationProblem : ConditionActionClassificationProblem<UniformRandomVariableVectorCreator,
+                                                            VariableVectorActionComparer,
+                                                            VariableVectorClassificationProblemData> {
+    public override string ChildName {
+      get { return "VariableVector"; }
+    }
+
+    #region parameter properties
+    private IFixedValueParameter<ItemSet<VariableVectorAction>> PossibleActionsConcreteClassParameter {
+      get { return (IFixedValueParameter<ItemSet<VariableVectorAction>>)Parameters["PossibleActionsConcreteClass"]; }
+    }
+    public override IFixedValueParameter<VariableVectorActionComparer> ClassifierComparerParameter {
+      get { return (IFixedValueParameter<VariableVectorActionComparer>)Parameters["ClassifierComparer"]; }
+    }
+    #endregion
+
+    #region properties
+    public new VariableVectorClassificationProblemData ProblemData {
+      get { return ProblemDataParameter.Value; }
+      protected set {
+        ProblemDataParameter.Value = value;
+        if (value != null) {
+          SetProblemDataSpecificParameters();
+        }
+      }
+    }
+
+    public ItemSet<VariableVectorAction> PossibleActionsConcreteClass {
+      get { return PossibleActionsConcreteClassParameter.Value; }
+    }
+    public IClassifierComparer ClassifierComparer {
+      get { return ClassifierComparerParameter.Value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected VariableVectorClassificationProblem(bool deserializing) : base(deserializing) { }
+    protected VariableVectorClassificationProblem(VariableVectorClassificationProblem original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new VariableVectorClassificationProblem(this, cloner);
+    }
+
+    public VariableVectorClassificationProblem() :
+      this(new VariableVectorClassificationProblemData(new Dataset(ConditionActionClassificationProblemData.defaultVariableNames, ConditionActionClassificationProblemData.defaultData),
+        ConditionActionClassificationProblemData.defaultVariableNames.Take(ConditionActionClassificationProblemData.defaultVariableNames.Length - 1), ConditionActionClassificationProblemData.defaultVariableNames.Last().ToEnumerable()),
+        new XCSEvaluator(), new UniformRandomVariableVectorCreator(), new VariableVectorCoveringCreator()) {
+    }
+
+    public VariableVectorClassificationProblem(VariableVectorClassificationProblemData problemData, XCSEvaluator evaluator, UniformRandomVariableVectorCreator solutionCreator, IVariableVectorCoveringCreator coveringSolutionCreator)
+      : base(problemData, evaluator, solutionCreator, coveringSolutionCreator) {
+      Parameters.Add(new FixedValueParameter<VariableVectorActionComparer>("ClassifierComparer", new VariableVectorActionComparer()));
+      Parameters.Add(new FixedValueParameter<ItemSet<IAction>>("PossibleActions", new ItemSet<IAction>(ClassifierComparer)));
+      Parameters.Add(new FixedValueParameter<ItemSet<VariableVectorAction>>("PossibleActionsConcreteClass", new ItemSet<VariableVectorAction>(ClassifierComparer)));
+
+      coveringSolutionCreator.SampleVariableVectorParameter.Value = problemData.SampleVariableVectorParameter.Value;
+
+      SetProblemDataSpecificParameters();
+
+      InitializeOperators();
+
+      problemData.Changed += new System.EventHandler(problemData_Changed);
+    }
+
+    private void problemData_Changed(object sender, System.EventArgs e) {
+      SetProblemDataSpecificParameters();
+    }
+
+    private void SetProblemDataSpecificParameters() {
+      SolutionCreator.SampleVariableVectorParameter.Value = ProblemData.SampleVariableVectorParameter.Value;
+      SolutionCreator.VariableVectorParameter.ActualName = ChildName;
+      SolutionCreator.SpreadPercentageParameter.Value = ProblemData.SpreadPercentageParameter.Value;
+
+      SetPossibleActions();
+    }
+
+    private void InitializeOperators() {
+      Operators.AddRange(ApplicationManager.Manager.GetInstances<IVariableVectorCrossover>());
+      Operators.AddRange(AddManipulators());
+
+      ParameterizeOperators();
+    }
+
+    private IEnumerable<IManipulator> AddManipulators() {
+      var manipulator = new UniformSomePositionManipulator();
+      manipulator.ChildParameter.ActualName = ChildName;
+      manipulator.FetchedInputParameter.ActualName = ClassifierFetcher.CurrentInputToMatchParameter.ActualName;
+      manipulator.PossibleActionsParameter.ActualName = PossibleActionsConcreteClassParameter.Name;
+      return new List<IManipulator>() { manipulator };
+    }
+
+    protected override void SetPossibleActions() {
+      var sampleAction = ProblemData.SampleVariableVector.Action;
+      var actionKeys = sampleAction.Order;
+      var actionsEnumeratorList = sampleAction.ToDictionary(x => x.Key, y => y.Value.GetAllPossibleActions().ToList());
+      int[] curPos = new int[actionsEnumeratorList.Count];
+      //initialize curPos
+      for (int i = 0; i < curPos.Length; i++) {
+        curPos[i] = 0;
+      }
+      bool done = false;
+      PossibleActions.Clear();
+      PossibleActionsConcreteClass.Clear();
+      VariableVectorAction curAction;
+      int cur;
+      while (!done) {
+        curAction = sampleAction.GetEmptyCopy();
+        cur = 0;
+        foreach (var key in actionKeys) {
+          curAction[key].SetTo(actionsEnumeratorList[key][curPos[cur]]);
+          cur++;
+        }
+        PossibleActions.Add(curAction);
+        PossibleActionsConcreteClass.Add(curAction);
+        done = MoveNext(actionsEnumeratorList, curPos, actionKeys);
+      }
+      ThetaMinimalNumberOfActions.Value = PossibleActions.Count;
+    }
+
+    private bool MoveNext(Dictionary<string, List<string>> actionsEnumeratorList, int[] curPos, IEnumerable<string> order) {
+      int cur = 0;
+      bool done = true;
+      foreach (var key in order) {
+        if (curPos[cur] + 1 < actionsEnumeratorList[key].Count) {
+          curPos[cur]++;
+          done = false;
+          break;
+        } else {
+          curPos[cur] = 0;
+        }
+        cur++;
+      }
+      return done;
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/VariableVectorClassificationProblemData.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/VariableVectorClassificationProblemData.cs	(revision 9226)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.VariableVectorClassification/3.3/VariableVectorClassificationProblemData.cs	(revision 9226)
@@ -0,0 +1,130 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Encodings.VariableVector;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.ConditionActionClassification;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Problems.CombinedIntegerVectorClassification {
+  [StorableClass]
+  [Item("CombinedIntegerVectorClassificationProblemData", "A problem data for LCS.")]
+  public class VariableVectorClassificationProblemData : ConditionActionClassificationProblemData {
+
+    #region parameter properites
+    public IFixedValueParameter<VariableVector> SampleVariableVectorParameter {
+      get { return (IFixedValueParameter<VariableVector>)Parameters["SampleVariableVector"]; }
+    }
+    public IFixedValueParameter<PercentValue> SpreadPercentageParameter {
+      get { return (IFixedValueParameter<PercentValue>)Parameters["SpreadPercentage"]; }
+    }
+    #endregion
+
+    #region properties
+    public VariableVector SampleVariableVector {
+      get { return SampleVariableVectorParameter.Value; }
+    }
+    public PercentValue SpreadPercentage {
+      get { return SpreadPercentageParameter.Value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected VariableVectorClassificationProblemData(bool deserializing) : base(deserializing) { }
+    protected VariableVectorClassificationProblemData(VariableVectorClassificationProblemData original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new VariableVectorClassificationProblemData(this, cloner);
+    }
+
+    public VariableVectorClassificationProblemData(Dataset dataset, IEnumerable<string> allowedConditionVariables, IEnumerable<string> allowedActionVariables) :
+      base(dataset, allowedConditionVariables, allowedActionVariables) {
+
+
+      Parameters.Add(new FixedValueParameter<VariableVector>("SampleVariableVector", "", GenerateSampleVariableVector(dataset, allowedConditionVariables, allowedActionVariables)));
+      Parameters.Add(new FixedValueParameter<PercentValue>("SpreadPercentage", "", new PercentValue(0.5)));
+    }
+
+    private VariableVector GenerateSampleVariableVector(Dataset dataset, IEnumerable<string> allowedConditionVariables, IEnumerable<string> allowedActionVariables) {
+      var conditionVariables = GetVariablesOfDataSet(dataset, allowedConditionVariables);
+      var actionVariables = GetVariablesOfDataSet(dataset, allowedActionVariables);
+      if (actionVariables.Count() == 0 || !actionVariables.All(x => x is IActionVariable)) {
+        throw new ArgumentException("Action variable can not be empty and all action variables have to be of type int or string.");
+      }
+      return new VariableVector(conditionVariables, actionVariables);
+    }
+
+    private IEnumerable<Encodings.VariableVector.IVariable> GetVariablesOfDataSet(DataAnalysis.Dataset dataset, IEnumerable<string> allowedVariables) {
+      var variables = new List<HeuristicLab.Encodings.VariableVector.IVariable>();
+      foreach (var variableName in allowedVariables) {
+        var variableValues = dataset.GetValues(variableName);
+        HeuristicLab.Encodings.VariableVector.IVariable variable;
+        if (variableValues is List<string>) {
+          variable = new StringVariable(variableName, (variableValues as List<string>).Distinct());
+        } else if (variableValues is List<double>) {
+          var doubleValues = (variableValues as List<double>).Distinct();
+          if (doubleValues.All(x => x % 1 == 0)) {
+            variable = new IntVariable(variableName, doubleValues.Select(x => Convert.ToInt32(x)));
+          } else {
+            variable = new DoubleVariable(variableName, doubleValues);
+          }
+        } else {
+          throw new ArgumentException("There is no matching variable type for the values in the dataset");
+        }
+        variables.Add(variable);
+      }
+      return variables;
+    }
+
+    public override IInput FetchInput(int rowNumber) {
+      if (!fetchInputCache.ContainsKey(rowNumber)) {
+        VariableVectorInput input = new VariableVectorInput();
+        IEnumerable<string> variableNames = SampleVariableVector.Condition.Keys.Union(SampleVariableVector.Action.Keys);
+        foreach (var variableName in variableNames) {
+          input.Add(variableName, Dataset.GetValue(rowNumber, variableName));
+        }
+        fetchInputCache.Add(rowNumber, input);
+      }
+      return fetchInputCache[rowNumber];
+    }
+
+    protected IDictionary<int, IAction> fetchActionCache = new Dictionary<int, IAction>();
+    public override IAction FetchAction(int rowNumber) {
+      if (!fetchActionCache.ContainsKey(rowNumber)) {
+        var action = SampleVariableVector.Action.GetEmptyCopy();
+        foreach (var variableName in action.Keys) {
+          action[variableName].SetTo(Dataset.GetValue(rowNumber, variableName));
+        }
+        fetchActionCache.Add(rowNumber, action);
+      }
+      return fetchActionCache[rowNumber];
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/LearningClassifierSystem.sln
===================================================================
--- /branches/LearningClassifierSystems/LearningClassifierSystem.sln	(revision 9225)
+++ /branches/LearningClassifierSystems/LearningClassifierSystem.sln	(revision 9226)
@@ -18,9 +18,15 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.XCS.Views-3.3", "HeuristicLab.Problems.XCS.Views\3.3\HeuristicLab.Problems.XCS.Views-3.3.csproj", "{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Instances.ConditionActionClassification", "HeuristicLab.Problems.Instances.ConditionActionClassification\3.3\HeuristicLab.Problems.Instances.ConditionActionClassification.csproj", "{1CC7585E-DD22-41FA-869B-93DE41EA8936}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Instances.ConditionActionClassification-3.3", "HeuristicLab.Problems.Instances.ConditionActionClassification\3.3\HeuristicLab.Problems.Instances.ConditionActionClassification-3.3.csproj", "{1CC7585E-DD22-41FA-869B-93DE41EA8936}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Core-3.3", "HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj", "{C36BD924-A541-4A00-AFA8-41701378DDC5}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.VariableVector-3.3", "HeuristicLab.Encodings.VariableVector\3.3\HeuristicLab.Encodings.VariableVector-3.3.csproj", "{7C116F48-7218-4105-BD6E-EE868E2D4823}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3", "HeuristicLab.Problems.CombinedIntegerVectorClassification\3.3\HeuristicLab.Problems.CombinedIntegerVectorClassification-3.3.csproj", "{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.VariableVectorClassification-3.3", "HeuristicLab.Problems.VariableVectorClassification\3.3\HeuristicLab.Problems.VariableVectorClassification-3.3.csproj", "{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.DataAnalysis-3.4", "HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj", "{DF87C13E-A889-46FF-8153-66DCAA8C5674}"
 EndProject
 Global
@@ -106,4 +112,32 @@
 		{7C116F48-7218-4105-BD6E-EE868E2D4823}.Release|x64.ActiveCfg = Release|Any CPU
 		{7C116F48-7218-4105-BD6E-EE868E2D4823}.Release|x86.ActiveCfg = Release|Any CPU
+		{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}.Release|x64.ActiveCfg = Release|Any CPU
+		{E8D42226-3FAF-49AD-91E9-D48A422A1BD0}.Release|x86.ActiveCfg = Release|Any CPU
+		{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}.Release|x64.ActiveCfg = Release|Any CPU
+		{4833BCCD-C7FB-40AB-ABE6-31A8A1FAA3CC}.Release|x86.ActiveCfg = Release|Any CPU
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Debug|x64.ActiveCfg = Debug|x64
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Debug|x64.Build.0 = Debug|x64
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Debug|x86.ActiveCfg = Debug|x86
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Debug|x86.Build.0 = Debug|x86
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Release|x64.ActiveCfg = Release|x64
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Release|x64.Build.0 = Release|x64
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Release|x86.ActiveCfg = Release|x86
+		{DF87C13E-A889-46FF-8153-66DCAA8C5674}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
