Index: /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/HeuristicLab.Algorithms.LearningClassifierSystems-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/HeuristicLab.Algorithms.LearningClassifierSystems-3.3.csproj	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/HeuristicLab.Algorithms.LearningClassifierSystems-3.3.csproj	(revision 9154)
@@ -41,4 +41,7 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="HeuristicLab.Analysis-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Collections-3.3">
       <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
@@ -57,5 +60,7 @@
       <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.Encodings.IntegerVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Operators-3.3">
       <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
@@ -86,5 +91,7 @@
       <Private>False</Private>
     </Reference>
-    <Reference Include="HeuristicLab.Selection-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Selection-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -111,12 +118,15 @@
       <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>
   </ItemGroup>
Index: /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LCSAdaptedGeneticAlgorithm.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LCSAdaptedGeneticAlgorithm.cs	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LCSAdaptedGeneticAlgorithm.cs	(revision 9154)
@@ -72,7 +72,4 @@
       get { return (ValueLookupParameter<VariableCollection>)Parameters["Results"]; }
     }
-    public ValueLookupParameter<IOperator> AnalyzerParameter {
-      get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
-    }
     public ValueLookupParameter<IntValue> EvaluatedSolutionsParameter {
       get { return (ValueLookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
@@ -118,5 +115,4 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed."));
       Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
-      Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation."));
       Parameters.Add(new ValueLookupParameter<IntValue>("EvaluatedSolutions", "The number of times solutions have been evaluated."));
       Parameters.Add(new ValueLookupParameter<IntValue>("PopulationSize", "The size of the population."));
@@ -128,5 +124,4 @@
       VariableCreator variableCreator = new VariableCreator();
       ResultsCollector resultsCollector1 = new ResultsCollector();
-      Placeholder analyzer1 = new Placeholder();
       Placeholder selector = new Placeholder();
       SubScopesProcessor subScopesProcessor1 = new SubScopesProcessor();
@@ -141,5 +136,4 @@
       IntCounter intCounter = new IntCounter();
       Comparator comparator = new Comparator();
-      Placeholder analyzer2 = new Placeholder();
       ConditionalBranch conditionalBranch = new ConditionalBranch();
 
@@ -157,9 +151,6 @@
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0))); // Class GeneticAlgorithm expects this to be called Generations
 
-      resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
+      //resultsCollector1.CollectedValues.Add(new LookupParameter<IntValue>("Iterations"));
       resultsCollector1.ResultsParameter.ActualName = "Results";
-
-      analyzer1.Name = "Analyzer";
-      analyzer1.OperatorParameter.ActualName = "Analyzer";
 
       tempIdAssigner.LeftSideParameter.ActualName = TEMPID;
@@ -220,7 +211,4 @@
       comparator.RightSideParameter.ActualName = "MaximumGenerations";
 
-      analyzer2.Name = "Analyzer";
-      analyzer2.OperatorParameter.ActualName = "Analyzer";
-
       conditionalBranch.ConditionParameter.ActualName = "Terminate";
       #endregion
@@ -229,6 +217,5 @@
       OperatorGraph.InitialOperator = variableCreator;
       variableCreator.Successor = resultsCollector1;
-      resultsCollector1.Successor = analyzer1;
-      analyzer1.Successor = tempIdAssigner;
+      resultsCollector1.Successor = tempIdAssigner;
       tempIdAssigner.Successor = setSubsumptionFalseSubScopesProcessor;
       setSubsumptionFalseSubScopesProcessor.Operator = setSubsumpByAssigner;
@@ -259,6 +246,5 @@
       doGASubsumptionBranch2.Successor = intCounter;
       intCounter.Successor = comparator;
-      comparator.Successor = analyzer2;
-      analyzer2.Successor = conditionalBranch;
+      comparator.Successor = conditionalBranch;
       conditionalBranch.FalseBranch = selector;
       conditionalBranch.TrueBranch = null;
Index: /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystem.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystem.cs	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystem.cs	(revision 9154)
@@ -21,9 +21,13 @@
 
 using System;
+using System.Linq;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Operators;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -105,4 +109,10 @@
       get { return (ValueParameter<BoolValue>)Parameters["DoActionSetSubsumption"]; }
     }
+    private ValueParameter<MultiAnalyzer> AnalyzerParameter {
+      get { return (ValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
+    }
+    private ValueParameter<IntValue> MaxIterationsParameter {
+      get { return (ValueParameter<IntValue>)Parameters["MaxIterations"]; }
+    }
     #endregion
 
@@ -180,9 +190,17 @@
       set { DoActionSetSubsumptionParameter.Value = value; }
     }
+    public IntValue MaxIterations {
+      get { return MaxIterationsParameter.Value; }
+      set { MaxIterationsParameter.Value = value; }
+    }
+    public MultiAnalyzer Analyzer {
+      get { return AnalyzerParameter.Value; }
+      set { AnalyzerParameter.Value = value; }
+    }
     private RandomCreator RandomCreator {
       get { return (RandomCreator)OperatorGraph.InitialOperator; }
     }
     public LearningClassifierSystemMainLoop MainLoop {
-      get { return (LearningClassifierSystemMainLoop)RandomCreator.Successor; }
+      get { return FindMainLoop(RandomCreator.Successor); }
     }
     #endregion
@@ -209,4 +227,6 @@
       Parameters.Add(new ValueParameter<BoolValue>("DoGASubsumption", "Specifies if offsprings are tested for possible logical subsumption by parents.", new BoolValue(true)));
       Parameters.Add(new ValueParameter<BoolValue>("DoActionSetSubsumption", "Specifies if action set is tested for subsuming classifiers.", new BoolValue(true)));
+      Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze each generation.", new MultiAnalyzer()));
+      Parameters.Add(new ValueParameter<IntValue>("MaxIterations", "The maximum number of iterations.", new IntValue(1000)));
       #endregion
 
@@ -214,5 +234,5 @@
       RandomCreator randomCreator = new RandomCreator();
 
-      //ResultsCollector resultsCollector = new ResultsCollector();
+      ResultsCollector resultsCollector = new ResultsCollector();
       LearningClassifierSystemMainLoop mainLoop = new LearningClassifierSystemMainLoop();
 
@@ -222,10 +242,18 @@
       randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
       randomCreator.SetSeedRandomlyParameter.Value = null;
+
+      resultsCollector.ResultsParameter.ActualName = "Results";
+
+      mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
+      mainLoop.MaxIterationsParameter.ActualName = MaxIterationsParameter.Name;
       #endregion
 
       #region Create operator graph
       OperatorGraph.InitialOperator = randomCreator;
-      randomCreator.Successor = mainLoop;
+      randomCreator.Successor = resultsCollector;
+      resultsCollector.Successor = mainLoop;
       #endregion
+
+      UpdateAnalyzers();
     }
     private LearningClassifierSystem(LearningClassifierSystem original, Cloner cloner)
@@ -242,4 +270,5 @@
         ParameterizeEvaluator(Problem.Evaluator);
         MainLoop.SetCurrentProblem(Problem);
+        UpdateAnalyzers();
       }
       base.OnProblemChanged();
@@ -253,4 +282,8 @@
       MainLoop.SetCurrentProblem(Problem);
       base.Problem_SolutionCreatorChanged(sender, e);
+    }
+    protected override void Problem_OperatorsChanged(object sender, EventArgs e) {
+      UpdateAnalyzers();
+      base.Problem_OperatorsChanged(sender, e);
     }
 
@@ -262,4 +295,21 @@
       evaluator.ErrorZeroParameter.ActualName = ErrorZeroParameter.Name;
     }
+
+    private void UpdateAnalyzers() {
+      Analyzer.Operators.Clear();
+      if (Problem != null) {
+        foreach (IAnalyzer analyzer in Problem.Operators.OfType<IAnalyzer>()) {
+          Analyzer.Operators.Add(analyzer, analyzer.EnabledByDefault);
+        }
+      }
+    }
+
+    private LearningClassifierSystemMainLoop FindMainLoop(IOperator start) {
+      IOperator mainLoop = start;
+      while (mainLoop != null && !(mainLoop is LearningClassifierSystemMainLoop))
+        mainLoop = ((SingleSuccessorOperator)mainLoop).Successor;
+      if (mainLoop == null) return null;
+      else return (LearningClassifierSystemMainLoop)mainLoop;
+    }
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystemMainLoop.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystemMainLoop.cs	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystemMainLoop.cs	(revision 9154)
@@ -55,4 +55,10 @@
       get { return (IConstrainedValueParameter<IOperator>)Parameters["AfterCrossover"]; }
     }
+    public LookupParameter<IntValue> MaxIterationsParameter {
+      get { return (LookupParameter<IntValue>)Parameters["MaxIterations"]; }
+    }
+    public ValueLookupParameter<IOperator> AnalyzerParameter {
+      get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
+    }
     #endregion
 
@@ -97,11 +103,25 @@
       XCSAfterCrossoverOperator afterCrossover = new XCSAfterCrossoverOperator();
       Parameters.Add(new ConstrainedValueParameter<IOperator>("AfterCrossover", "The operator used to select solutions for reproduction.", new ItemSet<IOperator>() { new XCSAfterCrossoverOperator() }, afterCrossover));
+      Parameters.Add(new LookupParameter<IntValue>("MaxIterations", "The maximum number of iterations the algorithm will do."));
+      Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation."));
       #endregion
+
+
+      //test
+      DataReducer testReducer = new DataReducer();
+      testReducer.TargetParameter.ActualName = "TestCurrentPopulation";
+      testReducer.ParameterToReduce.ActualName = "Numerosity";
+      testReducer.ReductionOperation.Value = new ReductionOperation(ReductionOperations.Sum);
+      testReducer.TargetOperation.Value = new ReductionOperation(ReductionOperations.Assign);
 
       #region Create operators
       VariableCreator variableCreator = new VariableCreator();
+      ResultsCollector resultsCollector = new ResultsCollector();
+      Placeholder finalAnalyzer = new Placeholder();
       ConditionalBranch initialPopulationConditionalBranch = new ConditionalBranch();
       initialSolutionsCreator = new SolutionsCreator();
       Assigner initialPopulationSizeAssigner = new Assigner();
+      Comparator maxIterationsComparator = new Comparator();
+      ConditionalBranch terminationConditionalBranch1 = new ConditionalBranch();
       IntCounter iterationCounter = new IntCounter();
       UniformSubScopesProcessor matchCondtionSubScopesProcessor = new UniformSubScopesProcessor();
@@ -159,4 +179,10 @@
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("CurrentPopulationSize", new IntValue(0)));
 
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Iteration"));
+      resultsCollector.ResultsParameter.ActualName = "Results";
+
+      finalAnalyzer.Name = "Analyzer";
+      finalAnalyzer.OperatorParameter.ActualName = "Analyzer";
+
       initialPopulationConditionalBranch.ConditionParameter.ActualName = "CreateInitialPopulation";
 
@@ -165,4 +191,11 @@
       initialPopulationSizeAssigner.LeftSideParameter.ActualName = "CurrentPopulationSize";
       initialPopulationSizeAssigner.RightSideParameter.ActualName = "N";
+
+      maxIterationsComparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
+      maxIterationsComparator.LeftSideParameter.ActualName = "Iteration";
+      maxIterationsComparator.RightSideParameter.ActualName = MaxIterationsParameter.ActualName;
+      maxIterationsComparator.ResultParameter.ActualName = "TerminateMaxIterations";
+
+      terminationConditionalBranch1.ConditionParameter.ActualName = "TerminateMaxIterations";
 
       iterationCounter.ValueParameter.ActualName = "Iteration";
@@ -311,9 +344,13 @@
       OperatorGraph.InitialOperator = variableCreator;
 
-      variableCreator.Successor = initialPopulationConditionalBranch;
+      variableCreator.Successor = resultsCollector;
+      resultsCollector.Successor = initialPopulationConditionalBranch;
       initialPopulationConditionalBranch.TrueBranch = initialSolutionsCreator;
       initialSolutionsCreator.Successor = initialPopulationSizeAssigner;
       initialPopulationConditionalBranch.FalseBranch = new EmptyOperator();
-      initialPopulationConditionalBranch.Successor = classifierFetcher;
+      initialPopulationConditionalBranch.Successor = maxIterationsComparator;
+      maxIterationsComparator.Successor = terminationConditionalBranch1;
+      terminationConditionalBranch1.TrueBranch = finalAnalyzer;
+      terminationConditionalBranch1.FalseBranch = classifierFetcher;
       classifierFetcher.Successor = matchCondtionSubScopesProcessor;
       matchCondtionSubScopesProcessor.Operator = matchConditionOperator;
@@ -371,5 +408,8 @@
       deletionSelectorAfterGA.Successor = leftReducerAfterGA;
       leftReducerAfterGA.Successor = iterationCounter;
-      iterationCounter.Successor = classifierFetcher;
+      //iterationCounter.Successor = maxIterationsComparator;
+
+      iterationCounter.Successor = testReducer;
+      testReducer.Successor = maxIterationsComparator;
       #endregion
     }
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 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/HeuristicLab.Encodings.CombinedIntegerVectorEncoding-3.3.csproj	(revision 9154)
@@ -83,14 +83,34 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Core-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.Encodings.IntegerVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Collections-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.IntegerVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -132,4 +152,5 @@
       <Project>{422FB262-0845-4969-8D16-12F057AA90B1}</Project>
       <Name>HeuristicLab.Encodings.ConditionActionEncoding-3.3</Name>
+      <Private>False</Private>
     </ProjectReference>
   </ItemGroup>
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Manipulator/UniformSomePositionManipulator.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Manipulator/UniformSomePositionManipulator.cs	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Manipulator/UniformSomePositionManipulator.cs	(revision 9154)
@@ -46,5 +46,5 @@
     public UniformSomePositionManipulator()
       : base() {
-      Parameters.Add(new ValueLookupParameter<PercentValue>("Probability", "The probability for each dimension to be manipulated.", new PercentValue(0.5)));
+      Parameters.Add(new ValueLookupParameter<PercentValue>("Probability", "The probability for each dimension to be manipulated."));
       Parameters.Add(new LookupParameter<IItemSet<CombinedIntegerVector>>("PossibleActions"));
     }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Analyzer/XCSSolutionAnalyzer.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Analyzer/XCSSolutionAnalyzer.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Analyzer/XCSSolutionAnalyzer.cs	(revision 9154)
@@ -0,0 +1,118 @@
+﻿#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.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  [Item("ConditionActionSolutionAnalyzer", "")]
+  [StorableClass]
+  public sealed class XCSSolutionAnalyzer : SingleSuccessorOperator, IAnalyzer {
+    public bool EnabledByDefault {
+      get { return true; }
+    }
+
+    public ScopeTreeLookupParameter<IClassifier> ClassifierParameter {
+      get { return (ScopeTreeLookupParameter<IClassifier>)Parameters["Classifier"]; }
+    }
+    public ScopeTreeLookupParameter<DoubleValue> PredictionParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Prediction"]; }
+    }
+    public ScopeTreeLookupParameter<DoubleValue> ErrorParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Error"]; }
+    }
+    public ScopeTreeLookupParameter<DoubleValue> FitnessParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Fitness"]; }
+    }
+    public ScopeTreeLookupParameter<IntValue> ExperienceParameter {
+      get { return (ScopeTreeLookupParameter<IntValue>)Parameters["Experience"]; }
+    }
+    public ScopeTreeLookupParameter<IntValue> TimestampParameter {
+      get { return (ScopeTreeLookupParameter<IntValue>)Parameters["Timestamp"]; }
+    }
+    public ScopeTreeLookupParameter<DoubleValue> AverageActionSetSizeParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["AverageActionSetSize"]; }
+    }
+    public ScopeTreeLookupParameter<IntValue> NumerosityParameter {
+      get { return (ScopeTreeLookupParameter<IntValue>)Parameters["Numerosity"]; }
+    }
+    public LookupParameter<IConditionActionProblemData> ProblemDataParameter {
+      get { return (LookupParameter<IConditionActionProblemData>)Parameters["ProblemData"]; }
+    }
+    public ValueLookupParameter<ResultCollection> ResultsParameter {
+      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
+    }
+
+    [StorableConstructor]
+    private XCSSolutionAnalyzer(bool deserializing) : base(deserializing) { }
+    private XCSSolutionAnalyzer(XCSSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new XCSSolutionAnalyzer(this, cloner);
+    }
+    public XCSSolutionAnalyzer()
+      : base() {
+      Parameters.Add(new ScopeTreeLookupParameter<IClassifier>("Classifier", ""));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Prediction", ""));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Error", ""));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Fitness", ""));
+      Parameters.Add(new ScopeTreeLookupParameter<IntValue>("Experience", ""));
+      Parameters.Add(new ScopeTreeLookupParameter<IntValue>("Timestamp", ""));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("AverageActionSetSize", ""));
+      Parameters.Add(new ScopeTreeLookupParameter<IntValue>("Numerosity", ""));
+      Parameters.Add(new LookupParameter<IConditionActionProblemData>("ProblemData", ""));
+      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the solution should be stored."));
+    }
+
+    public override IOperation Apply() {
+      ItemArray<IClassifier> classifiers = ClassifierParameter.ActualValue;
+      ItemArray<DoubleValue> predictions = PredictionParameter.ActualValue;
+      ItemArray<DoubleValue> errors = ErrorParameter.ActualValue;
+      ItemArray<DoubleValue> fitnesses = FitnessParameter.ActualValue;
+      ItemArray<IntValue> experiences = ExperienceParameter.ActualValue;
+      ItemArray<IntValue> timestamps = TimestampParameter.ActualValue;
+      ItemArray<DoubleValue> averageActionSetSizes = AverageActionSetSizeParameter.ActualValue;
+      ItemArray<IntValue> numerosities = NumerosityParameter.ActualValue;
+      ResultCollection results = ResultsParameter.ActualValue;
+      IConditionActionProblemData problemData = ProblemDataParameter.ActualValue;
+
+      ItemCollection<XCSClassifier> xcsClassifiers = new ItemCollection<XCSClassifier>();
+
+      for (int i = 0; i < classifiers.Length; i++) {
+        xcsClassifiers.Add(new XCSClassifier(classifiers[i], predictions[i], errors[i],
+          fitnesses[i], experiences[i], timestamps[i], averageActionSetSizes[i], numerosities[i]));
+      }
+
+      XCSModel xcsModel = new XCSModel(xcsClassifiers);
+
+      if (results.ContainsKey("XCSSolution")) {
+        results.Remove("XCSSolution");
+      }
+      results.Add(new Result("XCSSolution", xcsModel.CreateConditionActionSolution(problemData)));
+
+      return base.Apply();
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Deletion/XCSDeletionOperator.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Deletion/XCSDeletionOperator.cs	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Deletion/XCSDeletionOperator.cs	(revision 9154)
@@ -112,5 +112,5 @@
         double averageFitnessInPopulation = fitnessSum / numerositySum;
         for (int cl = 0; cl < fitnesses.Length; cl++) {
-          if (numerosities[cl].Value > 0) {
+          if (numerosities[cl].Value > 0 && !hasToBeDeleted[cl].Value) {
             voteSum += DeletionVote(averageFitnessInPopulation, averageActionSetSizes[cl].Value, numerosities[cl].Value, fitnesses[cl].Value, experiences[cl].Value);
           }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj	(revision 9154)
@@ -65,5 +65,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.DataAnalysis-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Selection-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <Private>False</Private>
@@ -83,4 +85,5 @@
     <Compile Include="ActionSelection\MaxValueActionSelector.cs" />
     <Compile Include="ActionSelection\RandomActionSelector.cs" />
+    <Compile Include="Analyzer\XCSSolutionAnalyzer.cs" />
     <Compile Include="Covering\CoveringOperator.cs" />
     <Compile Include="Covering\DoDeletionBeforeCovering.cs" />
@@ -95,6 +98,10 @@
     <Compile Include="GA\XCSAfterCrossoverOperator.cs" />
     <Compile Include="IClassifier.cs" />
+    <Compile Include="Interfaces\IConditionActionModel.cs" />
     <Compile Include="Interfaces\IConditionActionProblem.cs" />
     <Compile Include="Interfaces\IConditionActionProblemData.cs" />
+    <Compile Include="Interfaces\IConditionActionSolution.cs" />
+    <Compile Include="Interfaces\IXCSModel.cs" />
+    <Compile Include="Interfaces\IXCSSolution.cs" />
     <Compile Include="Operator\CalculateAccuracy.cs" />
     <Compile Include="GA\XCSCheckIfGAShouldBeApplied.cs" />
@@ -108,4 +115,5 @@
     <Compile Include="Plugin.cs" />
     <Compile Include="Reinforcement\ActionExecuter.cs" />
+    <Compile Include="Reinforcement\ClassifierFetcher.cs" />
     <Compile Include="Reinforcement\IActionExecuter.cs" />
     <Compile Include="Reinforcement\IClassifierFetcher.cs" />
@@ -116,4 +124,7 @@
     <Compile Include="Subsumption\ExecuteGASubsumptionOperator.cs" />
     <Compile Include="Subsumption\IActionSetSubsumption.cs" />
+    <Compile Include="XCSClassifier.cs" />
+    <Compile Include="XCSModel.cs" />
+    <Compile Include="XCSSolution.cs" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
   </ItemGroup>
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionModel.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionModel.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionModel.cs	(revision 9154)
@@ -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.Core;
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  public interface IConditionActionModel : INamedItem {
+    IConditionActionSolution CreateConditionActionSolution(IConditionActionProblemData problemData);
+
+    int ClassifierCount { get; }
+    IClassifier GetAction(IClassifier classifier);
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionProblemData.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionProblemData.cs	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionProblemData.cs	(revision 9154)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using HeuristicLab.Core;
@@ -32,4 +33,12 @@
     IEnumerable<string> AllowedConditionVariables { get; }
     IEnumerable<string> AllowedActionVariables { get; }
+
+    IntValue Length { get; }
+    IntValue ActionLength { get; }
+    IntMatrix Bounds { get; }
+
+    IClassifier FetchClassifier(int rowNumber);
+
+    event EventHandler Changed;
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionSolution.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionSolution.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionSolution.cs	(revision 9154)
@@ -0,0 +1,34 @@
+﻿#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 HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  public interface IConditionActionSolution : INamedItem, IStorableContent {
+    IConditionActionModel Model { get; }
+    IConditionActionProblemData ProblemData { get; set; }
+
+    event EventHandler ModelChanged;
+    event EventHandler ProblemDataChanged;
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IXCSModel.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IXCSModel.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IXCSModel.cs	(revision 9154)
@@ -0,0 +1,26 @@
+﻿#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
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  public interface IXCSModel : IConditionActionModel {
+    new IXCSSolution CreateConditionActionSolution(IConditionActionProblemData problemData);
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IXCSSolution.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IXCSSolution.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IXCSSolution.cs	(revision 9154)
@@ -0,0 +1,26 @@
+﻿#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
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  public interface IXCSSolution : IConditionActionSolution {
+    new IXCSModel Model { get; }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Reinforcement/ClassifierFetcher.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Reinforcement/ClassifierFetcher.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Reinforcement/ClassifierFetcher.cs	(revision 9154)
@@ -0,0 +1,68 @@
+﻿#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.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis;
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  [Item("ClassifierFetcher", "")]
+  [StorableClass]
+  public class ClassifierFetcher : SingleSuccessorOperator, IClassifierFetcher {
+    #region parameters
+    public IValueLookupParameter<IClassifier> CurrentClassifierToMatchParameter {
+      get { return (IValueLookupParameter<IClassifier>)Parameters["CurrentClassifierToMatch"]; }
+    }
+    public ILookupParameter<IConditionActionProblemData> ProblemDataParameter {
+      get { return (ILookupParameter<IConditionActionProblemData>)Parameters["ProblemData"]; }
+    }
+    public ILookupParameter<IntValue> IterationParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["Iteration"]; }
+    }
+    #endregion
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ClassifierFetcher(this, cloner);
+    }
+    protected ClassifierFetcher(ClassifierFetcher original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    [StorableConstructor]
+    protected ClassifierFetcher(bool deserializing) : base(deserializing) { }
+    public ClassifierFetcher()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<IClassifier>("CurrentClassifierToMatch"));
+      Parameters.Add(new LookupParameter<IConditionActionProblemData>("ProblemData"));
+      Parameters.Add(new LookupParameter<IntValue>("Iteration"));
+    }
+
+    public override IOperation Apply() {
+      Dataset dataset = ProblemDataParameter.ActualValue.Dataset;
+      int row = IterationParameter.ActualValue.Value % dataset.Rows;
+      CurrentClassifierToMatchParameter.ActualValue = ProblemDataParameter.ActualValue.FetchClassifier(row);
+      return base.Apply();
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSClassifier.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSClassifier.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSClassifier.cs	(revision 9154)
@@ -0,0 +1,116 @@
+﻿#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.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  [Item("XCSClassifier", "Represents a single XCS classifier")]
+  [StorableClass]
+  public class XCSClassifier : Item {
+
+    #region private variables
+    [Storable]
+    private IClassifier classifier;
+    [Storable]
+    private DoubleValue prediction;
+    [Storable]
+    private DoubleValue predictionError;
+    [Storable]
+    private DoubleValue fitness;
+    [Storable]
+    private IntValue experience;
+    [Storable]
+    private IntValue timestamp;
+    [Storable]
+    private DoubleValue averageActionSetSize;
+    [Storable]
+    private IntValue numerosity;
+    #endregion
+
+    #region properties
+    public IClassifier Classifier {
+      get { return classifier; }
+      set { classifier = value; }
+    }
+    public DoubleValue Prediction {
+      get { return prediction; }
+      set { prediction = value; }
+    }
+    public DoubleValue PredictionError {
+      get { return predictionError; }
+      set { predictionError = value; }
+    }
+    public DoubleValue Fitness {
+      get { return fitness; }
+      set { fitness = value; }
+    }
+    public IntValue Experience {
+      get { return experience; }
+      set { experience = value; }
+    }
+    public IntValue Timestamp {
+      get { return timestamp; }
+      set { timestamp = value; }
+    }
+    public DoubleValue AverageActionSetSize {
+      get { return averageActionSetSize; }
+      set { averageActionSetSize = value; }
+    }
+    public IntValue Numerosity {
+      get { return numerosity; }
+      set { numerosity = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected XCSClassifier(bool deserializing) : base(deserializing) { }
+    protected XCSClassifier(XCSClassifier original, Cloner cloner)
+      : base(original, cloner) {
+      classifier = cloner.Clone(original.classifier);
+      prediction = cloner.Clone(original.prediction);
+      predictionError = cloner.Clone(original.predictionError);
+      fitness = cloner.Clone(original.fitness);
+      experience = cloner.Clone(original.experience);
+      timestamp = cloner.Clone(original.timestamp);
+      averageActionSetSize = cloner.Clone(original.averageActionSetSize);
+      numerosity = cloner.Clone(original.numerosity);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new XCSClassifier(this, cloner);
+    }
+    public XCSClassifier() : base() { }
+    public XCSClassifier(IClassifier classifier, DoubleValue prediction, DoubleValue predictionError,
+      DoubleValue fitness, IntValue experience, IntValue timestamp, DoubleValue averageActionSetSize, IntValue numerosity) {
+
+      this.classifier = classifier;
+      this.prediction = prediction;
+      this.predictionError = predictionError;
+      this.fitness = fitness;
+      this.experience = experience;
+      this.timestamp = timestamp;
+      this.averageActionSetSize = averageActionSetSize;
+      this.numerosity = numerosity;
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSModel.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSModel.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSModel.cs	(revision 9154)
@@ -0,0 +1,159 @@
+﻿#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.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  [Item("XCSModel", "Represents a model of XCS")]
+  [StorableClass]
+  public class XCSModel : ReadOnlyItemCollection<XCSClassifier>, IXCSModel {
+
+    public int ClassifierCount { get { return Count; } }
+
+    [StorableConstructor]
+    protected XCSModel(bool deserializing) : base(deserializing) { }
+    protected XCSModel(XCSModel original, Cloner cloner)
+      : base(original, cloner) {
+      name = (string)original.name.Clone();
+      description = (string)original.description.Clone();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new XCSModel(this, cloner);
+    }
+    public XCSModel() : base(new ItemCollection<XCSClassifier>()) { }
+    public XCSModel(IItemCollection<XCSClassifier> collection)
+      : base(collection) {
+      this.name = ItemName;
+      this.description = ItemDescription;
+    }
+
+    public IClassifier GetAction(IClassifier classifier) {
+      var matchedClassifiers = new ItemCollection<XCSClassifier>();
+      foreach (var xcsClassifier in this) {
+        if (xcsClassifier.Classifier.MatchCondition(classifier)) {
+          matchedClassifiers.Add(xcsClassifier);
+        }
+      }
+
+      if (matchedClassifiers.Count == 0) { return null; }
+
+      IDictionary<IClassifier, double> predictionArray = CreatePredictionArray(matchedClassifiers);
+      return predictionArray.OrderByDescending(x => x.Value).First().Key;
+    }
+
+    private IDictionary<IClassifier, double> CreatePredictionArray(ItemCollection<XCSClassifier> matchedClassifiers) {
+      var predictionArray = new Dictionary<IClassifier, double>();
+      var fitnessSumPerAction = new Dictionary<IClassifier, double>();
+
+      foreach (var xcsClassifier in matchedClassifiers) {
+        var action = xcsClassifier.Classifier.Action;
+        if (predictionArray.ContainsKey(action)) {
+          predictionArray[action] += xcsClassifier.Prediction.Value * xcsClassifier.Fitness.Value;
+          fitnessSumPerAction[action] += xcsClassifier.Fitness.Value;
+        } else {
+          predictionArray[action] = xcsClassifier.Prediction.Value * xcsClassifier.Fitness.Value;
+          fitnessSumPerAction[action] = xcsClassifier.Fitness.Value;
+        }
+      }
+
+      var actions = new List<IClassifier>(predictionArray.Keys);
+      foreach (var action in actions) {
+        if (fitnessSumPerAction[action] != 0) {
+          predictionArray[action] = predictionArray[action] / fitnessSumPerAction[action];
+        }
+      }
+      return predictionArray;
+    }
+
+    public IXCSSolution CreateConditionActionSolution(IConditionActionProblemData problemData) {
+      return new XCSSolution(this, problemData);
+    }
+
+    IConditionActionSolution IConditionActionModel.CreateConditionActionSolution(IConditionActionProblemData problemData) {
+      return CreateConditionActionSolution(problemData);
+    }
+
+    #region INamedItem Members
+    [Storable]
+    protected string name;
+    public string Name {
+      get { return name; }
+      set {
+        if (!CanChangeName) throw new NotSupportedException("Name cannot be changed.");
+        if (!(name.Equals(value) || (value == null) && (name == string.Empty))) {
+          CancelEventArgs<string> e = value == null ? new CancelEventArgs<string>(string.Empty) : new CancelEventArgs<string>(value);
+          OnNameChanging(e);
+          if (!e.Cancel) {
+            name = value == null ? string.Empty : value;
+            OnNameChanged();
+          }
+        }
+      }
+    }
+    public virtual bool CanChangeName {
+      get { return true; }
+    }
+    [Storable]
+    protected string description;
+    public string Description {
+      get { return description; }
+      set {
+        if (!CanChangeDescription) throw new NotSupportedException("Description cannot be changed.");
+        if (!(description.Equals(value) || (value == null) && (description == string.Empty))) {
+          description = value == null ? string.Empty : value;
+          OnDescriptionChanged();
+        }
+      }
+    }
+    public virtual bool CanChangeDescription {
+      get { return true; }
+    }
+
+    public override string ToString() {
+      return Name;
+    }
+
+    public event EventHandler<CancelEventArgs<string>> NameChanging;
+    protected virtual void OnNameChanging(CancelEventArgs<string> e) {
+      var handler = NameChanging;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler NameChanged;
+    protected virtual void OnNameChanged() {
+      var handler = NameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+      OnToStringChanged();
+    }
+
+    public event EventHandler DescriptionChanged;
+    protected virtual void OnDescriptionChanged() {
+      var handler = DescriptionChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSSolution.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSSolution.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/XCSSolution.cs	(revision 9154)
@@ -0,0 +1,198 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ConditionActionEncoding {
+  [StorableClass]
+  [Item("XCSSolution", "Represents a XCS solution.")]
+  public class XCSSolution : ResultCollection, IXCSSolution {
+    private const string ModelResultName = "Model";
+    private const string ProblemDataResultName = "ProblemData";
+    private const string AccuracyResultName = "Accuracy";
+
+    public string Filename { get; set; }
+
+    public double Accuracy {
+      get { return ((DoubleValue)this[AccuracyResultName].Value).Value; }
+      private set { ((DoubleValue)this[AccuracyResultName].Value).Value = value; }
+    }
+
+    IConditionActionModel IConditionActionSolution.Model {
+      get { return Model; }
+    }
+
+    public IXCSModel Model {
+      get { return (IXCSModel)this[ModelResultName].Value; ; }
+      protected set {
+        if (this[ModelResultName].Value != value) {
+          if (value != null) {
+            this[ModelResultName].Value = value;
+            OnModelChanged();
+          }
+        }
+      }
+    }
+
+    public IConditionActionProblemData ProblemData {
+      get { return (IConditionActionProblemData)this[ProblemDataResultName].Value; }
+      set {
+        if (this[ProblemDataResultName].Value != value) {
+          if (value != null) {
+            ProblemData.Changed -= new EventHandler(ProblemData_Changed);
+            this[ProblemDataResultName].Value = value;
+            ProblemData.Changed += new EventHandler(ProblemData_Changed);
+            OnProblemDataChanged();
+          }
+        }
+      }
+    }
+
+    [StorableConstructor]
+    protected XCSSolution(bool deserializing) : base(deserializing) { }
+    protected XCSSolution(XCSSolution original, Cloner cloner)
+      : base(original, cloner) {
+      name = original.Name;
+      description = original.Description;
+    }
+    public XCSSolution(IConditionActionModel model, IConditionActionProblemData problemData)
+      : base() {
+      name = ItemName;
+      description = ItemDescription;
+      Add(new Result(ModelResultName, "The xcs model.", model));
+      Add(new Result(ProblemDataResultName, "The condition-action problem data.", problemData));
+      Add(new Result(AccuracyResultName, "Accuracy of the model (percentage of correctly classified instances).", new PercentValue()));
+
+      problemData.Changed += new EventHandler(ProblemData_Changed);
+
+      RecalculateResults();
+    }
+
+    private void RecalculateResults() {
+      var originalClassifiers = new List<IClassifier>();
+      for (int i = 0; i < ProblemData.Dataset.Rows; i++) {
+        originalClassifiers.Add(ProblemData.FetchClassifier(i));
+      }
+
+      var estimatedAction = new List<IClassifier>();
+      foreach (var original in originalClassifiers) {
+        estimatedAction.Add(Model.GetAction(original));
+      }
+
+      double correctClassified = 0;
+      double rows = ProblemData.Dataset.Rows;
+      var originalEnumerator = originalClassifiers.GetEnumerator();
+      var estimatedActionEnumerator = estimatedAction.GetEnumerator();
+
+      while (originalEnumerator.MoveNext() && estimatedActionEnumerator.MoveNext()) {
+        if (originalEnumerator.Current.Action.Equals(estimatedActionEnumerator.Current)) {
+          correctClassified++;
+        }
+      }
+
+      Accuracy = correctClassified / rows;
+    }
+
+    private void ProblemData_Changed(object sender, EventArgs e) {
+      OnProblemDataChanged();
+    }
+
+    public event EventHandler ModelChanged;
+    protected virtual void OnModelChanged() {
+      RecalculateResults();
+      var listeners = ModelChanged;
+      if (listeners != null) listeners(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ProblemDataChanged;
+    protected virtual void OnProblemDataChanged() {
+      RecalculateResults();
+      var listeners = ProblemDataChanged;
+      if (listeners != null) listeners(this, EventArgs.Empty);
+    }
+
+    #region INamedItem Members
+    [Storable]
+    protected string name;
+    public string Name {
+      get { return name; }
+      set {
+        if (!CanChangeName) throw new NotSupportedException("Name cannot be changed.");
+        if (!(name.Equals(value) || (value == null) && (name == string.Empty))) {
+          CancelEventArgs<string> e = value == null ? new CancelEventArgs<string>(string.Empty) : new CancelEventArgs<string>(value);
+          OnNameChanging(e);
+          if (!e.Cancel) {
+            name = value == null ? string.Empty : value;
+            OnNameChanged();
+          }
+        }
+      }
+    }
+    public virtual bool CanChangeName {
+      get { return true; }
+    }
+    [Storable]
+    protected string description;
+    public string Description {
+      get { return description; }
+      set {
+        if (!CanChangeDescription) throw new NotSupportedException("Description cannot be changed.");
+        if (!(description.Equals(value) || (value == null) && (description == string.Empty))) {
+          description = value == null ? string.Empty : value;
+          OnDescriptionChanged();
+        }
+      }
+    }
+    public virtual bool CanChangeDescription {
+      get { return true; }
+    }
+
+    public override string ToString() {
+      return Name;
+    }
+
+    public event EventHandler<CancelEventArgs<string>> NameChanging;
+    protected virtual void OnNameChanging(CancelEventArgs<string> e) {
+      var handler = NameChanging;
+      if (handler != null) handler(this, e);
+    }
+
+    public event EventHandler NameChanged;
+    protected virtual void OnNameChanged() {
+      var handler = NameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+      OnToStringChanged();
+    }
+
+    public event EventHandler DescriptionChanged;
+    protected virtual void OnDescriptionChanged() {
+      var handler = DescriptionChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+  }
+}
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 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/HeuristicLab.Problems.ConditionActionClassification-3.3.csproj	(revision 9154)
@@ -40,27 +40,42 @@
     <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.Core-3.3">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Core-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, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
-    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Encodings.IntegerVectorEncoding-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <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.DataAnalysis-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.4, Version=3.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -76,5 +91,4 @@
     <Compile Include="Implementation\ConditionActionClassificationProblemData.cs" />
     <Compile Include="Plugin.cs" />
-    <Compile Include="Reinforcement\CombinedIntegerVectorClassifierFetcher.cs" />
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.cs.frame" />
@@ -88,8 +102,10 @@
       <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>
   </ItemGroup>
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/Implementation/ConditionActionClassificationProblem.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/Implementation/ConditionActionClassificationProblem.cs	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/Implementation/ConditionActionClassificationProblem.cs	(revision 9154)
@@ -76,14 +76,4 @@
       get { return (IFixedValueParameter<IntValue>)Parameters["ThetaMinimalNumberOfActions"]; }
     }
-    //for test purposes
-    public IFixedValueParameter<IntValue> LengthParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters["Length"]; }
-    }
-    public IFixedValueParameter<IntValue> ActionPartLengthParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters["ActionPartLength"]; }
-    }
-    public IFixedValueParameter<IntMatrix> BoundsParameter {
-      get { return (IFixedValueParameter<IntMatrix>)Parameters["Bounds"]; }
-    }
     #endregion
 
@@ -120,9 +110,9 @@
     }
     IParameter IConditionActionProblem.ActionExecuterParameter { get { return ActionExecuterParameter; } }
-    public CombinedIntegerVectorClassifierFetcher ClassifierFetcher {
+    public ClassifierFetcher ClassifierFetcher {
       get { return ClassifierFetcherParameter.Value; }
     }
-    public ValueParameter<CombinedIntegerVectorClassifierFetcher> ClassifierFetcherParameter {
-      get { return (ValueParameter<CombinedIntegerVectorClassifierFetcher>)Parameters[ClassifierFetcherParameterName]; }
+    public ValueParameter<ClassifierFetcher> ClassifierFetcherParameter {
+      get { return (ValueParameter<ClassifierFetcher>)Parameters[ClassifierFetcherParameterName]; }
     }
     IClassifierFetcher IConditionActionProblem.ClassifierFetcher { get { return ClassifierFetcher; } }
@@ -150,4 +140,7 @@
     IParameter IConditionActionProblem.CoveringSolutionCreatorParameter {
       get { return CoveringSolutionCreatorParameter; }
+    }
+    private XCSSolutionAnalyzer XCSSolutionAnalyzer {
+      get { return Operators.OfType<XCSSolutionAnalyzer>().FirstOrDefault(); }
     }
     #endregion
@@ -170,8 +163,4 @@
     public ConditionActionClassificationProblem(ConditionActionClassificationProblemData problemData, XCSEvaluator evaluator, UniformRandomCombinedIntegerVectorCreator solutionCreator, ICoveringSolutionCreator coveringSolutionCreator)
       : base(evaluator, solutionCreator) {
-      Parameters.Add(new FixedValueParameter<IntValue>("Length", "The operator to create a solution.", new IntValue(7)));
-      Parameters.Add(new FixedValueParameter<IntValue>("ActionPartLength", "The operator to create a solution.", new IntValue(1)));
-      int[,] elements = new int[,] { { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 2 } };
-      Parameters.Add(new FixedValueParameter<IntMatrix>("Bounds", "The operator to create a solution.", new IntMatrix(elements)));
       Parameters.Add(new ValueParameter<ConditionActionClassificationProblemData>("ProblemData", "", problemData));
       Parameters.Add(new FixedValueParameter<DoubleValue>("PositiveReward", "", new DoubleValue(1000)));
@@ -182,5 +171,5 @@
 
       Parameters.Add(new ValueParameter<IActionExecuter>(ActionExecuterParameterName, "", new ActionExecuter()));
-      Parameters.Add(new ValueParameter<CombinedIntegerVectorClassifierFetcher>(ClassifierFetcherParameterName, "", new CombinedIntegerVectorClassifierFetcher()));
+      Parameters.Add(new ValueParameter<ClassifierFetcher>(ClassifierFetcherParameterName, "", new ClassifierFetcher()));
       Parameters.Add(new FixedValueParameter<ItemSet<IClassifier>>("PossibleActions"));
       Parameters.Add(new FixedValueParameter<ItemSet<CombinedIntegerVector>>("PossibleActionsConcreteClass"));
@@ -196,7 +185,7 @@
       Evaluator.InitialPredictionParameter.ActualName = "InitialPrediction";
 
-      SolutionCreator.ActionPartLengthParameter.ActualName = ActionPartLengthParameter.Name;
-      SolutionCreator.LengthParameter.ActualName = LengthParameter.Name;
-      SolutionCreator.BoundsParameter.ActualName = BoundsParameter.Name;
+      SolutionCreator.ActionPartLengthParameter.ActualName = ProblemData.ActionLengthParameter.Name;
+      SolutionCreator.LengthParameter.ActualName = ProblemData.LengthParameter.Name;
+      SolutionCreator.BoundsParameter.ActualName = ProblemData.BoundsParameter.Name;
 
       coveringSolutionCreator.ChangeSymbolProbabilityParameter.ActualName = ChangeSymbolProbabilityInCoveringParameter.Name;
@@ -204,6 +193,4 @@
       coveringSolutionCreator.CreatedClassifierParameter.ActualName = "CombinedIntegerVector";
 
-      ClassifierFetcher.ActionPartLengthParameter.ActualName = ActionPartLengthParameter.Name;
-      ClassifierFetcher.BoundsParameter.ActualName = BoundsParameter.Name;
       ClassifierFetcher.ProblemDataParameter.ActualName = ProblemDataParameter.Name;
 
@@ -217,26 +204,39 @@
       ThetaMinimalNumberOfActions.Value = PossibleActions.Count;
 
-      BoundsParameter.ValueChanged += new System.EventHandler(BoundsParameter_ValueChanged);
-      LengthParameter.ValueChanged += new System.EventHandler(LengthParameter_ValueChanged);
-      ActionPartLengthParameter.ValueChanged += new System.EventHandler(ActionPartLengthParameter_ValueChanged);
-    }
-
-    #region event handler
-    private void ActionPartLengthParameter_ValueChanged(object sender, System.EventArgs e) {
+      InitializeOperators();
+
+      problemData.Changed += new System.EventHandler(problemData_Changed);
+    }
+
+    private void problemData_Changed(object sender, System.EventArgs e) {
       SetPossibleActions();
     }
-    private void LengthParameter_ValueChanged(object sender, System.EventArgs e) {
-      SetPossibleActions();
-    }
-    private void BoundsParameter_ValueChanged(object sender, System.EventArgs e) {
-      SetPossibleActions();
-    }
-    #endregion
+
+    private void InitializeOperators() {
+      Operators.Add(new XCSSolutionAnalyzer());
+
+      ParameterizeAnalyzers();
+    }
+
+    private void ParameterizeAnalyzers() {
+      if (XCSSolutionAnalyzer != null) {
+        XCSSolutionAnalyzer.ClassifierParameter.ActualName = SolutionCreator.CombinedIntegerVectorParameter.ActualName;
+        XCSSolutionAnalyzer.PredictionParameter.ActualName = Evaluator.PredictionParameter.ActualName;
+        XCSSolutionAnalyzer.ErrorParameter.ActualName = Evaluator.ErrorParameter.ActualName;
+        XCSSolutionAnalyzer.FitnessParameter.ActualName = Evaluator.FitnessParameter.ActualName;
+        XCSSolutionAnalyzer.ExperienceParameter.ActualName = Evaluator.ExperienceParameter.ActualName;
+        XCSSolutionAnalyzer.AverageActionSetSizeParameter.ActualName = Evaluator.AverageActionSetSizeParameter.ActualName;
+        XCSSolutionAnalyzer.NumerosityParameter.ActualName = Evaluator.NumerosityParameter.ActualName;
+        XCSSolutionAnalyzer.TimestampParameter.ActualName = Evaluator.TimestampParameter.ActualName;
+        XCSSolutionAnalyzer.ProblemDataParameter.ActualName = ProblemDataParameter.Name;
+        XCSSolutionAnalyzer.ResultsParameter.ActualName = "Results";
+      }
+    }
 
     private void SetPossibleActions() {
       //get bounds of action
-      IntMatrix actionBounds = GetElementsOfBoundsForAction(BoundsParameter.Value, LengthParameter.Value.Value, ActionPartLengthParameter.Value.Value);
-      int actionLength = ActionPartLengthParameter.Value.Value;
-      int start = LengthParameter.Value.Value - actionLength;
+      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];
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/Implementation/ConditionActionClassificationProblemData.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/Implementation/ConditionActionClassificationProblemData.cs	(revision 9153)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/Implementation/ConditionActionClassificationProblemData.cs	(revision 9154)
@@ -26,4 +26,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Encodings.CombinedIntegerVectorEncoding;
 using HeuristicLab.Encodings.ConditionActionEncoding;
 using HeuristicLab.Parameters;
@@ -54,4 +55,13 @@
       get { return (IFixedValueParameter<ReadOnlyCheckedItemList<StringValue>>)Parameters["ActionVariables"]; }
     }
+    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
 
@@ -74,4 +84,6 @@
       get { return ActionVariables.CheckedItems.Select(x => x.Value.Value); }
     }
+
+    private IDictionary<int, IClassifier> fetchClassifiersCache = new Dictionary<int, IClassifier>();
 
 
@@ -105,7 +117,54 @@
       Parameters.Add(new FixedValueParameter<ReadOnlyCheckedItemList<StringValue>>("ActionVariables", "", actionVariables.AsReadOnly()));
       Parameters.Add(new FixedValueParameter<ReadOnlyCheckedItemList<StringValue>>("ConditionVariables", "", conditionVariables.AsReadOnly()));
+      Parameters.Add(new FixedValueParameter<IntValue>("Length", "", new IntValue(7)));
+      Parameters.Add(new FixedValueParameter<IntValue>("ActionLength", "", new IntValue(1)));
+      int[,] elements = new int[,] { { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 3 }, { 0, 2 } };
+      Parameters.Add(new FixedValueParameter<IntMatrix>("Bounds", "", new IntMatrix(elements)));
 
       ((ValueParameter<Dataset>)DatasetParameter).ReactOnValueToStringChangedAndValueItemImageChanged = false;
     }
+
+    public event EventHandler Changed;
+    protected virtual void OnChanged() {
+      var listeners = Changed;
+      if (listeners != null) listeners(this, EventArgs.Empty);
+    }
+
+    public IntValue Length {
+      get { return LengthParameter.Value; }
+    }
+
+    public IntValue ActionLength {
+      get { return ActionLengthParameter.Value; }
+    }
+
+    public IntMatrix Bounds {
+      get { return BoundsParameter.Value; }
+    }
+
+    public IClassifier FetchClassifier(int rowNumber) {
+      if (!fetchClassifiersCache.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.");
+        }
+        fetchClassifiersCache.Add(rowNumber, new CombinedIntegerVector(elements, ActionLengthParameter.Value.Value, BoundsParameter.Value));
+      }
+      return fetchClassifiersCache[rowNumber];
+    }
   }
 }
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/HeuristicLab.Problems.XCS.Views-3.3.csproj
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/HeuristicLab.Problems.XCS.Views-3.3.csproj	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/HeuristicLab.Problems.XCS.Views-3.3.csproj	(revision 9154)
@@ -0,0 +1,101 @@
+﻿<?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>{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.XCS.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.XCS.Views-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, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Core-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.MainForm-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <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="XCSModelView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="XCSModelView.Designer.cs">
+      <DependentUpon>XCSModelView.cs</DependentUpon>
+    </Compile>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <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>
+  </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.XCS.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/Plugin.cs.frame	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/Plugin.cs.frame	(revision 9154)
@@ -0,0 +1,37 @@
+﻿#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.ConditionActionClassification {
+  [Plugin("HeuristicLab.Problems.XCS.Views", "3.3.7.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.XCS.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.ConditionActionEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  public class HeuristicLabProblemsXCSViewsPlugin : PluginBase {
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 9154)
@@ -0,0 +1,56 @@
+﻿#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.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.XCS.Views-3.3")]
+[assembly: AssemblyDescription("Views for XCS problems")]
+[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("0eb420bb-7c27-4e3e-84c5-af07da9d5bb3")]
+
+// 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.$WCREV$")]
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/XCSModelView.Designer.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/XCSModelView.Designer.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/XCSModelView.Designer.cs	(revision 9154)
@@ -0,0 +1,131 @@
+﻿namespace HeuristicLab.Problems.XCS.Views {
+  partial class XCSModelView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      this.Classifier = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.Prediction = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.Error = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.Fitness = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.Numerosity = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.Timestamp = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.Experience = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      this.AverageActionSetSize = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = false;
+      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.Classifier,
+            this.Prediction,
+            this.Error,
+            this.Fitness,
+            this.Numerosity,
+            this.Timestamp,
+            this.Experience,
+            this.AverageActionSetSize});
+      this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataGridView.Location = new System.Drawing.Point(0, 0);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.ReadOnly = true;
+      this.dataGridView.Size = new System.Drawing.Size(344, 240);
+      this.dataGridView.TabIndex = 0;
+      // 
+      // Classifier
+      // 
+      this.Classifier.HeaderText = "Classifier";
+      this.Classifier.Name = "Classifier";
+      this.Classifier.ReadOnly = true;
+      // 
+      // Prediction
+      // 
+      this.Prediction.HeaderText = "Prediction";
+      this.Prediction.Name = "Prediction";
+      this.Prediction.ReadOnly = true;
+      // 
+      // Error
+      // 
+      this.Error.HeaderText = "Error";
+      this.Error.Name = "Error";
+      this.Error.ReadOnly = true;
+      // 
+      // Fitness
+      // 
+      this.Fitness.HeaderText = "Fitness";
+      this.Fitness.Name = "Fitness";
+      this.Fitness.ReadOnly = true;
+      // 
+      // Numerosity
+      // 
+      this.Numerosity.HeaderText = "Numerosity";
+      this.Numerosity.Name = "Numerosity";
+      this.Numerosity.ReadOnly = true;
+      // 
+      // Timestamp
+      // 
+      this.Timestamp.HeaderText = "Timestamp";
+      this.Timestamp.Name = "Timestamp";
+      this.Timestamp.ReadOnly = true;
+      // 
+      // Experience
+      // 
+      this.Experience.HeaderText = "Experience";
+      this.Experience.Name = "Experience";
+      this.Experience.ReadOnly = true;
+      // 
+      // AverageActionSetSize
+      // 
+      this.AverageActionSetSize.HeaderText = "AverageActionSetSize";
+      this.AverageActionSetSize.Name = "AverageActionSetSize";
+      this.AverageActionSetSize.ReadOnly = true;
+      // 
+      // XCSModelView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataGridView);
+      this.Name = "XCSModelView";
+      this.Size = new System.Drawing.Size(344, 240);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.DataGridView dataGridView;
+    private System.Windows.Forms.DataGridViewTextBoxColumn Classifier;
+    private System.Windows.Forms.DataGridViewTextBoxColumn Prediction;
+    private System.Windows.Forms.DataGridViewTextBoxColumn Error;
+    private System.Windows.Forms.DataGridViewTextBoxColumn Fitness;
+    private System.Windows.Forms.DataGridViewTextBoxColumn Numerosity;
+    private System.Windows.Forms.DataGridViewTextBoxColumn Timestamp;
+    private System.Windows.Forms.DataGridViewTextBoxColumn Experience;
+    private System.Windows.Forms.DataGridViewTextBoxColumn AverageActionSetSize;
+  }
+}
Index: /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/XCSModelView.cs
===================================================================
--- /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/XCSModelView.cs	(revision 9154)
+++ /branches/LearningClassifierSystems/HeuristicLab.Problems.XCS.Views/3.3/XCSModelView.cs	(revision 9154)
@@ -0,0 +1,76 @@
+﻿#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.Windows.Forms;
+using HeuristicLab.Encodings.ConditionActionEncoding;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Problems.XCS.Views {
+  [View("XCS Model")]
+  [Content(typeof(XCSModel), true)]
+  public partial class XCSModelView : AsynchronousContentView {
+
+    public new XCSModel Content {
+      get { return (XCSModel)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public XCSModelView() {
+      InitializeComponent();
+    }
+
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      UpdateDataGridView();
+    }
+
+    private void UpdateDataGridView() {
+      if (InvokeRequired) {
+        Invoke((Action)UpdateDataGridView);
+      } else {
+        if (Content == null) {
+          dataGridView.Rows.Clear();
+        }
+
+        dataGridView.RowCount = Content.Count;
+
+        int row = 0;
+        foreach (var xcsClassifier in Content) {
+          dataGridView[0, row].Value = xcsClassifier.Classifier.ToString();
+          dataGridView[1, row].Value = xcsClassifier.Prediction.ToString();
+          dataGridView[2, row].Value = xcsClassifier.PredictionError.ToString();
+          dataGridView[3, row].Value = xcsClassifier.Fitness.ToString();
+          dataGridView[4, row].Value = xcsClassifier.Numerosity.ToString();
+          dataGridView[5, row].Value = xcsClassifier.Timestamp.ToString();
+          dataGridView[6, row].Value = xcsClassifier.Experience.ToString();
+          dataGridView[7, row].Value = xcsClassifier.AverageActionSetSize.ToString();
+          row++;
+        }
+
+        dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.ColumnHeader);
+        dataGridView.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
+      }
+    }
+  }
+}
Index: /branches/LearningClassifierSystems/LearningClassifierSystem.sln
===================================================================
--- /branches/LearningClassifierSystems/LearningClassifierSystem.sln	(revision 9153)
+++ /branches/LearningClassifierSystems/LearningClassifierSystem.sln	(revision 9154)
@@ -15,4 +15,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.ConditionActionClassification-3.3", "HeuristicLab.Problems.ConditionActionClassification\3.3\HeuristicLab.Problems.ConditionActionClassification-3.3.csproj", "{EA51D441-F6A3-41E1-9993-A2488E93C222}"
+EndProject
+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
 Global
@@ -62,4 +64,12 @@
 		{EA51D441-F6A3-41E1-9993-A2488E93C222}.Release|x64.ActiveCfg = Release|Any CPU
 		{EA51D441-F6A3-41E1-9993-A2488E93C222}.Release|x86.ActiveCfg = Release|Any CPU
+		{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}.Release|x64.ActiveCfg = Release|Any CPU
+		{8FFB8E0F-BC17-4D72-AF0F-E67A22F8EDE5}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
