Index: branches/LearningClassifierSystems/HeuristicLab.Algorithms.GAssist/3.3/GAssist.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Algorithms.GAssist/3.3/GAssist.cs	(revision 9352)
+++ branches/LearningClassifierSystems/HeuristicLab.Algorithms.GAssist/3.3/GAssist.cs	(revision 9392)
@@ -65,4 +65,7 @@
       get { return (ValueParameter<IntValue>)Parameters["PopulationSize"]; }
     }
+    public ValueParameter<MDLIterationOperator> MDLIterationOperatorParameter {
+      get { return (ValueParameter<MDLIterationOperator>)Parameters["MDLIterationOperator"]; }
+    }
     public IConstrainedValueParameter<IDefaultRuleOperator> DefaultRuleParameter {
       get { return (IConstrainedValueParameter<IDefaultRuleOperator>)Parameters["DefaultRule"]; }
@@ -121,4 +124,19 @@
     private ValueParameter<ItemCollection<IDiscretizer>> DiscretizersParameter {
       get { return (ValueParameter<ItemCollection<IDiscretizer>>)Parameters["Discretizers"]; }
+    }
+    public ValueParameter<IntValue> MDLActivationIterationParameter {
+      get { return (ValueParameter<IntValue>)Parameters["MDLActivationIteration"]; }
+    }
+    public ValueParameter<DoubleValue> InitialTheoryLengthRatioParameter {
+      get { return (ValueParameter<DoubleValue>)Parameters["InitialTheoryLengthRatio"]; }
+    }
+    public ValueParameter<DoubleValue> WeightRelaxFactorParameter {
+      get { return (ValueParameter<DoubleValue>)Parameters["WeightRelaxFactor"]; }
+    }
+    public ValueParameter<IntValue> WeightAdaptionIterationsParameter {
+      get { return (ValueParameter<IntValue>)Parameters["WeightAdaptionIterations"]; }
+    }
+    public ValueParameter<IntValue> NumberOfStrataParameter {
+      get { return (ValueParameter<IntValue>)Parameters["NumberOfStrata"]; }
     }
     #endregion
@@ -180,6 +198,18 @@
       get { return (RandomCreator)OperatorGraph.InitialOperator; }
     }
+    private VariableCreator VariableCreator {
+      get { return (VariableCreator)RandomCreator.Successor; }
+    }
+    private Placeholder MDLIterationPlaceholder {
+      get { return (Placeholder)VariableCreator.Successor; }
+    }
+    private ILASOperator ILASOperator {
+      get { return (ILASOperator)MDLIterationPlaceholder.Successor; }
+    }
+    private InitializeDiscretizersOperator InitializeDiscretizers {
+      get { return (InitializeDiscretizersOperator)ILASOperator.Successor; }
+    }
     private SolutionsCreator SolutionsCreator {
-      get { return (SolutionsCreator)RandomCreator.Successor; }
+      get { return (SolutionsCreator)InitializeDiscretizers.Successor; }
     }
     private GAssistMainLoop GeneticAlgorithmMainLoop {
@@ -204,16 +234,28 @@
       Parameters.Add(new ValueParameter<GAssistSpecialStageMultiOperator>("SpecialStages", "", new GAssistSpecialStageMultiOperator()));
       Parameters.Add(new ValueParameter<IntValue>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntValue(1000)));
-      Parameters.Add(new FixedValueParameter<PercentValue>("SplitProbability", "", new PercentValue(0.05)));
-      Parameters.Add(new FixedValueParameter<PercentValue>("MergeProbability", "", new PercentValue(0.05)));
-      Parameters.Add(new FixedValueParameter<PercentValue>("StartReinitializeProbability", "", new PercentValue(0.05)));
-      Parameters.Add(new FixedValueParameter<PercentValue>("EndReinitializeProbability", "", new PercentValue(Double.Epsilon)));
-      Parameters.Add(new FixedValueParameter<PercentValue>("OneProbability", "", new PercentValue(0.75)));
-      Parameters.Add(new FixedValueParameter<IntValue>("MaximumNumberOfIntervals", "", new IntValue(5)));
-      Parameters.Add(new FixedValueParameter<IntValue>("InitialNumberOfRules", "", new IntValue(20)));
+      Parameters.Add(new ValueParameter<PercentValue>("SplitProbability", "", new PercentValue(0.05)));
+      Parameters.Add(new ValueParameter<PercentValue>("MergeProbability", "", new PercentValue(0.05)));
+      Parameters.Add(new ValueParameter<PercentValue>("StartReinitializeProbability", "", new PercentValue(0.05)));
+      Parameters.Add(new ValueParameter<PercentValue>("EndReinitializeProbability", "", new PercentValue(Double.Epsilon)));
+      Parameters.Add(new ValueParameter<PercentValue>("OneProbability", "", new PercentValue(0.75)));
+      Parameters.Add(new ValueParameter<IntValue>("MaximumNumberOfIntervals", "", new IntValue(5)));
+      Parameters.Add(new ValueParameter<IntValue>("InitialNumberOfRules", "", new IntValue(20)));
+      Parameters.Add(new ValueParameter<MDLIterationOperator>("MDLIterationOperator", "", new MDLIterationOperator()));
       Parameters.Add(new ConstrainedValueParameter<IDefaultRuleOperator>("DefaultRule", ""));
       Parameters.Add(new ConstrainedValueParameter<IDiscreteDoubleValueModifier>("ReinitializeCurveOperator", ""));
       Parameters.Add(new ValueParameter<ItemCollection<IDiscretizer>>("Discretizers", "", new ItemCollection<IDiscretizer>()));
 
+      Parameters.Add(new ValueParameter<IntValue>("MDLActivationIteration", "", new IntValue(25)));
+      Parameters.Add(new ValueParameter<DoubleValue>("InitialTheoryLengthRatio", "", new DoubleValue(0.075)));
+      Parameters.Add(new ValueParameter<DoubleValue>("WeightRelaxFactor", "", new DoubleValue(0.9)));
+      Parameters.Add(new ValueParameter<IntValue>("WeightAdaptionIterations", "", new IntValue(10)));
+
+      Parameters.Add(new ValueParameter<IntValue>("NumberOfStrata", "", new IntValue(2)));
+
       RandomCreator randomCreator = new RandomCreator();
+      VariableCreator variableCreator = new VariableCreator();
+      Placeholder mdlIterationPlaceholder = new Placeholder();
+      ILASOperator ilasOperator = new ILASOperator();
+      InitializeDiscretizersOperator initializeDiscretizers = new InitializeDiscretizersOperator();
       SolutionsCreator solutionsCreator = new SolutionsCreator();
       SubScopesCounter subScopesCounter = new SubScopesCounter();
@@ -227,5 +269,19 @@
       randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
       randomCreator.SetSeedRandomlyParameter.Value = null;
-      randomCreator.Successor = solutionsCreator;
+      randomCreator.Successor = variableCreator;
+
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0))); // Class GAssistMainLoop expects this to be called Generations
+      variableCreator.Successor = mdlIterationPlaceholder;
+
+      mdlIterationPlaceholder.Name = "MDL Iteration Operator";
+      mdlIterationPlaceholder.OperatorParameter.ActualName = MDLIterationOperatorParameter.Name;
+      mdlIterationPlaceholder.Successor = ilasOperator;
+
+      ilasOperator.RandomParameter.ActualName = randomCreator.RandomParameter.ActualName;
+      ilasOperator.NumberOfStrataParameter.ActualName = NumberOfStrataParameter.Name;
+      ilasOperator.Successor = initializeDiscretizers;
+
+      initializeDiscretizers.DiscretizersParameter.ActualName = DiscretizersParameter.Name;
+      initializeDiscretizers.Successor = solutionsCreator;
 
       solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
@@ -240,4 +296,5 @@
       resultsCollector.Successor = mainLoop;
 
+      mainLoop.MDLIterationParameter.ActualName = MDLIterationOperatorParameter.Name;
       mainLoop.DefaultRuleParameter.ActualName = DefaultRuleParameter.Name;
       mainLoop.SelectorParameter.ActualName = SelectorParameter.Name;
@@ -348,7 +405,12 @@
       ParameterizeStochasticOperator(Problem.SolutionCreator);
       ParameterizeStochasticOperator(Problem.Evaluator);
-      foreach (IOperator op in Problem.Operators.OfType<IOperator>()) ParameterizeStochasticOperator(op);
+      ParameterizeMDLOperator(Problem.Evaluator);
+      ParameterizeIterationBasedOperators(Problem.Evaluator);
+      foreach (IOperator op in Problem.Operators.OfType<IOperator>()) {
+        ParameterizeStochasticOperator(op);
+      }
       ParameterizeSolutionsCreator();
       ParameterizeGeneticAlgorithmMainLoop();
+      ParameterizeMDL();
       ParameterizeSelectors();
       ParameterizeAnalyzers();
@@ -359,5 +421,21 @@
       UpdateAnalyzers();
       Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
+      ILASOperator.ProblemDataParameter.ActualName = Problem.ProblemDataParameter.Name;
+      InitializeDiscretizers.ProblemDataParameter.ActualName = Problem.ProblemDataParameter.Name;
       base.OnProblemChanged();
+    }
+
+    private void ParameterizeMDL() {
+      MDLIterationOperatorParameter.Value.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
+      //change
+      MDLIterationOperatorParameter.Value.IndividualParameter.ActualName = "DecisionList";
+      MDLIterationOperatorParameter.Value.ProblemDataParameter.ActualName = Problem.ProblemDataParameter.Name;
+      MDLIterationOperatorParameter.Value.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
+
+      MDLIterationOperatorParameter.Value.InitialTheoryLengthRatioParameter.ActualName = InitialTheoryLengthRatioParameter.Name;
+      MDLIterationOperatorParameter.Value.MDLActivationIterationParameter.ActualName = MDLActivationIterationParameter.Name;
+      MDLIterationOperatorParameter.Value.WeightAdaptionIterationsParameter.ActualName = WeightAdaptionIterationsParameter.Name;
+      MDLIterationOperatorParameter.Value.WeightRelaxFactorParameter.ActualName = WeightRelaxFactorParameter.Name;
+      MDLIterationOperatorParameter.Value.IterationsParameter.ActualName = "Generations";
     }
 
@@ -374,4 +452,5 @@
       ParameterizeAnalyzers();
       Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
+      Problem.Evaluator.StrataParameter.ActualName = ILASOperator.StrataParameter.ActualName;
       base.Problem_EvaluatorChanged(sender, e);
     }
@@ -433,4 +512,10 @@
         stochasticOp.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
         stochasticOp.RandomParameter.Hidden = true;
+      }
+    }
+    private void ParameterizeMDLOperator(IOperator op) {
+      IMDLCalculatorBasedOperator stochasticOp = op as IMDLCalculatorBasedOperator;
+      if (stochasticOp != null) {
+        stochasticOp.MDLCalculatorParameter.ActualName = MDLIterationOperatorParameter.Value.MDLCalculatorParameter.ActualName;
       }
     }
@@ -469,11 +554,20 @@
       }
     }
+    private void ParameterizeIterationBasedOperators(IOperator op) {
+      IIterationBasedOperator iterationOp = op as IIterationBasedOperator;
+      if (iterationOp != null) {
+        ParameterizeIterationBasedOperators(iterationOp);
+      }
+    }
+    private void ParameterizeIterationBasedOperators(IIterationBasedOperator op) {
+      op.IterationsParameter.ActualName = "Generations";
+      op.IterationsParameter.Hidden = true;
+      op.MaximumIterationsParameter.ActualName = "MaximumGenerations";
+      op.MaximumIterationsParameter.Hidden = true;
+    }
     private void ParameterizeIterationBasedOperators() {
       if (Problem != null) {
         foreach (IIterationBasedOperator op in Problem.Operators.OfType<IIterationBasedOperator>()) {
-          op.IterationsParameter.ActualName = "Generations";
-          op.IterationsParameter.Hidden = true;
-          op.MaximumIterationsParameter.ActualName = "MaximumGenerations";
-          op.MaximumIterationsParameter.Hidden = true;
+          ParameterizeIterationBasedOperators(op);
         }
       }
Index: branches/LearningClassifierSystems/HeuristicLab.Algorithms.GAssist/3.3/GAssistMainLoop.cs
===================================================================
--- branches/LearningClassifierSystems/HeuristicLab.Algorithms.GAssist/3.3/GAssistMainLoop.cs	(revision 9352)
+++ branches/LearningClassifierSystems/HeuristicLab.Algorithms.GAssist/3.3/GAssistMainLoop.cs	(revision 9392)
@@ -61,4 +61,7 @@
     public ValueLookupParameter<IOperator> MutatorParameter {
       get { return (ValueLookupParameter<IOperator>)Parameters["Mutator"]; }
+    }
+    public ValueLookupParameter<IOperator> MDLIterationParameter {
+      get { return (ValueLookupParameter<IOperator>)Parameters["MDLIteration"]; }
     }
     public ValueLookupParameter<IOperator> DefaultRuleParameter {
@@ -134,13 +137,14 @@
       Parameters.Add(new ValueLookupParameter<IOperator>("ReinitializationProbabilityOperator", ""));
       Parameters.Add(new ValueLookupParameter<IOperator>("DefaultRule", ""));
+      Parameters.Add(new ValueLookupParameter<IOperator>("MDLIteration", ""));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope which represents a population of solutions on which the genetic algorithm should be applied."));
       #endregion
 
       #region Create operators
-      VariableCreator variableCreator = new VariableCreator();
       ResultsCollector resultsCollector1 = new ResultsCollector();
       Placeholder analyzer1 = new Placeholder();
+      Placeholder mdlIterationOperator = new Placeholder();
+      Placeholder defaultRuleOperator = new Placeholder();
       Placeholder reinitializationProbabilityOperator = new Placeholder();
-      Placeholder defaultRuleOperator = new Placeholder();
       Placeholder selector = new Placeholder();
       SubScopesProcessor subScopesProcessor1 = new SubScopesProcessor();
@@ -167,6 +171,4 @@
       ConditionalBranch conditionalBranch = new ConditionalBranch();
 
-      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.ResultsParameter.ActualName = "Results";
@@ -174,4 +176,7 @@
       analyzer1.Name = "Analyzer";
       analyzer1.OperatorParameter.ActualName = "Analyzer";
+
+      mdlIterationOperator.Name = "MDL Iteration Operator";
+      mdlIterationOperator.OperatorParameter.ActualName = MDLIterationParameter.Name;
 
       defaultRuleOperator.Name = "Default Rule Operator";
@@ -234,8 +239,8 @@
 
       #region Create operator graph
-      OperatorGraph.InitialOperator = variableCreator;
-      variableCreator.Successor = resultsCollector1;
+      OperatorGraph.InitialOperator = resultsCollector1;
       resultsCollector1.Successor = analyzer1;
-      analyzer1.Successor = defaultRuleOperator;
+      analyzer1.Successor = mdlIterationOperator;
+      mdlIterationOperator.Successor = defaultRuleOperator;
       defaultRuleOperator.Successor = reinitializationProbabilityOperator;
       reinitializationProbabilityOperator.Successor = selector;
@@ -272,5 +277,5 @@
       comparator.Successor = analyzer2;
       analyzer2.Successor = conditionalBranch;
-      conditionalBranch.FalseBranch = defaultRuleOperator;
+      conditionalBranch.FalseBranch = mdlIterationOperator;
       conditionalBranch.TrueBranch = null;
       conditionalBranch.Successor = null;
