Free cookie consent management tool by TermsFeed Policy Generator

source: branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystemMainLoop.cs @ 9226

Last change on this file since 9226 was 9226, checked in by sforsten, 11 years ago

#1980:

  • made classes in Problems.ConditionActionClassification abstract
  • added Problems.VariableVectorClassification and Problems.CombinedIntegerVectorClassification
  • LCS works now with arbitrary problems, which implement ConditionActionClassificationProblem
File size: 28.2 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using HeuristicLab.Common;
23using HeuristicLab.Core;
24using HeuristicLab.Data;
25using HeuristicLab.Encodings.ConditionActionEncoding;
26using HeuristicLab.Operators;
27using HeuristicLab.Optimization;
28using HeuristicLab.Optimization.Operators;
29using HeuristicLab.Parameters;
30using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
31using HeuristicLab.Selection;
32
33namespace HeuristicLab.Algorithms.LearningClassifierSystems {
34  /// <summary>
35  /// An operator which represents the main loop of a learning classifier system.
36  /// </summary>
37  [Item("LearningClassifierSystemMainLoop", "An operator which represents the main loop of a learning classifier system.")]
38  [StorableClass]
39  public sealed class LearningClassifierSystemMainLoop : AlgorithmOperator {
40    private const string HASTOBEDELETED = "HasToBeDeleted";
41    private const string HASBEENSUBSUMED = "HasBeenSubsumed";
42
43    #region Parameter Properties
44    public IConstrainedValueParameter<ISelector> SelectorParameter {
45      get { return (IConstrainedValueParameter<ISelector>)Parameters["Selector"]; }
46    }
47    public ValueLookupParameter<PercentValue> CrossoverProbabilityParameter {
48      get { return adaptedGeneticAlgorithmMainLoop.CrossoverProbabilityParameter; }
49    }
50    public ValueLookupParameter<IOperator> CrossoverParameter {
51      get { return adaptedGeneticAlgorithmMainLoop.CrossoverParameter; }
52    }
53    public ValueLookupParameter<IOperator> MutatorParameter {
54      get { return adaptedGeneticAlgorithmMainLoop.MutatorParameter; }
55    }
56    public IConstrainedValueParameter<IOperator> AfterCopyingParentsParameter {
57      get { return (IConstrainedValueParameter<IOperator>)Parameters["AfterCopyingParents"]; }
58    }
59    public IConstrainedValueParameter<IOperator> AfterCrossoverParameter {
60      get { return (IConstrainedValueParameter<IOperator>)Parameters["AfterCrossover"]; }
61    }
62    public LookupParameter<IntValue> MaxIterationsParameter {
63      get { return (LookupParameter<IntValue>)Parameters["MaxIterations"]; }
64    }
65    public ValueLookupParameter<IOperator> AnalyzerParameter {
66      get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
67    }
68    public ValueLookupParameter<IOperator> FinalAnalyzerParameter {
69      get { return (ValueLookupParameter<IOperator>)Parameters["FinalAnalyzer"]; }
70    }
71    #endregion
72
73    #region private properties
74    private SolutionsCreator initialSolutionsCreator;
75    private MatchConditionOperator matchConditionOperator;
76    private PredictionArrayCalculator predictionArrayCalculator;
77    private ActionSelector actionSelector;
78    private DoDeletionBeforeCoveringOperator doDeletionBeforeCovering;
79    private CoveringOperator covering;
80    private CountNumberOfUniqueActions countNumberOfUniqueActions;
81    private MatchActionOperator matchActionOperator;
82    private InsertInPopulationOperator insertInPopulation;
83
84    private LCSAdaptedGeneticAlgorithm adaptedGeneticAlgorithmMainLoop;
85
86    private Placeholder evaluator;
87    private Placeholder actionExecuter;
88    private Placeholder classifierFetcher;
89    private Placeholder actionSetSubsumption;
90    #endregion
91
92    [StorableConstructor]
93    private LearningClassifierSystemMainLoop(bool deserializing) : base(deserializing) { }
94    private LearningClassifierSystemMainLoop(LearningClassifierSystemMainLoop original, Cloner cloner)
95      : base(original, cloner) {
96    }
97    public override IDeepCloneable Clone(Cloner cloner) {
98      return new LearningClassifierSystemMainLoop(this, cloner);
99    }
100    public LearningClassifierSystemMainLoop()
101      : base() {
102      Initialize();
103    }
104
105    private void Initialize() {
106      #region Create parameters
107      Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions for reproduction.", new ItemSet<ISelector>() { new ProportionalSelector() }, new ProportionalSelector()));
108      Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions. This operator is executed in parallel, if an engine is used which supports parallelization."));
109      XCSAfterCopyingParentOperator afterCopyingParents = new XCSAfterCopyingParentOperator();
110      Parameters.Add(new ConstrainedValueParameter<IOperator>("AfterCopyingParents", "", new ItemSet<IOperator>() { new XCSAfterCopyingParentOperator() }, afterCopyingParents));
111      XCSAfterCrossoverOperator afterCrossover = new XCSAfterCrossoverOperator();
112      Parameters.Add(new ConstrainedValueParameter<IOperator>("AfterCrossover", "", new ItemSet<IOperator>() { new XCSAfterCrossoverOperator() }, afterCrossover));
113      Parameters.Add(new LookupParameter<IntValue>("MaxIterations", "The maximum number of iterations the algorithm will do."));
114      Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze each generation."));
115      Parameters.Add(new ValueLookupParameter<IOperator>("FinalAnalyzer", "The operator used to analyze the last generation."));
116      #endregion
117
118      #region Create operators
119      VariableCreator variableCreator = new VariableCreator();
120      ResultsCollector resultsCollector = new ResultsCollector();
121      Placeholder analyzer = new Placeholder();
122      Placeholder finalAnalyzer = new Placeholder();
123      ConditionalBranch initialPopulationConditionalBranch = new ConditionalBranch();
124      initialSolutionsCreator = new SolutionsCreator();
125      Assigner initialPopulationSizeAssigner = new Assigner();
126      Comparator maxIterationsComparator = new Comparator();
127      ConditionalBranch terminationConditionalBranch1 = new ConditionalBranch();
128      IntCounter iterationCounter = new IntCounter();
129      UniformSubScopesProcessor matchCondtionSubScopesProcessor = new UniformSubScopesProcessor();
130      matchConditionOperator = new MatchConditionOperator();
131      predictionArrayCalculator = new PredictionArrayCalculator();
132      actionSelector = new ActionSelector();
133      UniformSubScopesProcessor matchActionSubScopesProcessor = new UniformSubScopesProcessor();
134      matchActionOperator = new MatchActionOperator();
135      ConditionalSelector conditionMatchSelector = new ConditionalSelector();
136      ConditionalSelector actionMatchSelector = new ConditionalSelector();
137      SubScopesProcessor matchSetSubScopesProcessor = new SubScopesProcessor();
138      countNumberOfUniqueActions = new CountNumberOfUniqueActions();
139      doDeletionBeforeCovering = new DoDeletionBeforeCoveringOperator();
140      ConditionalBranch doDeletionBeforeCoveringConditionalBranch = new ConditionalBranch();
141      XCSDeletionOperator deletionOperator = new XCSDeletionOperator();
142      ConditionalSelector deletionSelector = new ConditionalSelector();
143      LeftReducer leftReducerAfterDeletionSelection = new LeftReducer();
144      covering = new CoveringOperator();
145      MergingReducer actionSetMergingReducer = new MergingReducer();
146      MergingReducer matchSetMergingReducer = new MergingReducer();
147      evaluator = new Placeholder();
148      SubScopesProcessor actionSetSubScopesProcessor = new SubScopesProcessor();
149      DataReducer actionSetSizeDataReducer = new DataReducer();
150      UniformSubScopesProcessor accuracySubScopesProcessor = new UniformSubScopesProcessor();
151      CalculateAccuracy calculateAccuracy = new CalculateAccuracy();
152      SumAccuracy sumAccuracy = new SumAccuracy();
153      UniformSubScopesProcessor updateParametersSubScopesProcessor = new UniformSubScopesProcessor();
154      ConditionalBranch actionSetSubsumptionBranch = new ConditionalBranch();
155      UniformSubScopesProcessor setSubsumedToFalseSubScopeProcessor = new UniformSubScopesProcessor();
156      Assigner setSubsumedToFalseAssigner = new Assigner();
157      ConditionalSelector subsumptionSelector = new ConditionalSelector();
158      LeftReducer leftReducer = new LeftReducer();
159      XCSCheckIfGAShouldBeApplied checkIfGAShouldRun = new XCSCheckIfGAShouldBeApplied();
160      ConditionalBranch runGAConditionalBranch = new ConditionalBranch();
161      UniformSubScopesProcessor timestampAssignerSubscopeProcessor = new UniformSubScopesProcessor();
162      Assigner timestampAssigner = new Assigner();
163      adaptedGeneticAlgorithmMainLoop = new LCSAdaptedGeneticAlgorithm();
164      IntCounter currentPopulationSizeCounter = new IntCounter();
165      CalculateNumberOfDeletionsOperator calculateNumberOfDeletions = new CalculateNumberOfDeletionsOperator();
166      UniformSubScopesProcessor setDeletionFalseSubScopeProcessor1 = new UniformSubScopesProcessor();
167      UniformSubScopesProcessor setDeletionFalseSubScopeProcessor2 = new UniformSubScopesProcessor();
168      Assigner setDeletionFalseAssigner = new Assigner();
169      insertInPopulation = new InsertInPopulationOperator();
170      XCSDeletionOperator deletionOperatorAfterGA = new XCSDeletionOperator();
171      ConditionalSelector deletionSelectorAfterGA = new ConditionalSelector();
172      LeftReducer leftReducerAfterGA = new LeftReducer();
173
174      classifierFetcher = new Placeholder();
175      actionExecuter = new Placeholder();
176      actionSetSubsumption = new Placeholder();
177
178      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("ZeroIntValue", new IntValue(0)));
179      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("OneIntValue", new IntValue(1)));
180      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iteration", new IntValue(0)));
181      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("CurrentPopulationSize", new IntValue(0)));
182
183      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Iteration"));
184      resultsCollector.ResultsParameter.ActualName = "Results";
185
186      analyzer.Name = "Analyzer";
187      analyzer.OperatorParameter.ActualName = "Analyzer";
188
189      finalAnalyzer.Name = "FinalAnalyzer";
190      finalAnalyzer.OperatorParameter.ActualName = "FinalAnalyzer";
191
192      initialPopulationConditionalBranch.ConditionParameter.ActualName = "CreateInitialPopulation";
193
194      initialSolutionsCreator.NumberOfSolutionsParameter.ActualName = "N";
195
196      initialPopulationSizeAssigner.LeftSideParameter.ActualName = "CurrentPopulationSize";
197      initialPopulationSizeAssigner.RightSideParameter.ActualName = "N";
198
199      maxIterationsComparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
200      maxIterationsComparator.LeftSideParameter.ActualName = "Iteration";
201      maxIterationsComparator.RightSideParameter.ActualName = MaxIterationsParameter.ActualName;
202      maxIterationsComparator.ResultParameter.ActualName = "TerminateMaxIterations";
203
204      terminationConditionalBranch1.ConditionParameter.ActualName = "TerminateMaxIterations";
205
206      iterationCounter.ValueParameter.ActualName = "Iteration";
207      iterationCounter.IncrementParameter.ActualName = "OneIntValue";
208
209      conditionMatchSelector.CopySelected = new BoolValue(false);
210      conditionMatchSelector.ConditionParameter.ActualName = matchConditionOperator.MatchConditionParameter.ActualName;
211
212      doDeletionBeforeCovering.MatchConditionParameter.ActualName = matchConditionOperator.MatchConditionParameter.ActualName;
213      doDeletionBeforeCovering.CurrentPopulationSizeParameter.ActualName = "CurrentPopulationSize";
214      doDeletionBeforeCovering.PopulationSizeParameter.ActualName = "N";
215
216      doDeletionBeforeCoveringConditionalBranch.ConditionParameter.ActualName = doDeletionBeforeCovering.DoDeletionParameter.ActualName;
217
218      setDeletionFalseAssigner.LeftSideParameter.ActualName = HASTOBEDELETED;
219      setDeletionFalseAssigner.RightSideParameter.Value = new BoolValue(false);
220
221      deletionOperator.NumberToDeleteParameter.ActualName = doDeletionBeforeCovering.NumberToDeleteParameter.ActualName;
222      deletionOperator.HasToBeDeletedParameter.ActualName = HASTOBEDELETED;
223      deletionOperator.AverageActionSetSizesParameter.ActualName = "AverageActionSetSize";
224      deletionOperator.FitnessesParameter.ActualName = "Fitness";
225      deletionOperator.NumerositiesParameter.ActualName = "Numerosity";
226      deletionOperator.ExperiencesParameter.ActualName = "Experience";
227      deletionOperator.ThetaDeletionParameter.ActualName = "ThetaDeletion";
228      deletionOperator.DeltaParameter.ActualName = "Delta";
229      deletionOperator.RandomParameter.ActualName = "Random";
230
231      deletionSelector.ConditionParameter.ActualName = HASTOBEDELETED;
232      deletionSelector.CopySelected = new BoolValue(false);
233
234      covering.ActionsInMatchSetParameter.ActualName = countNumberOfUniqueActions.UniqueActionsParameter.ActualName;
235      covering.ParallelParameter.Value.Value = true;
236      covering.RandomParameter.ActualName = "Random";
237      covering.CurrentPopulationSizeParameter.ActualName = "CurrentPopulationSize";
238
239      matchActionSubScopesProcessor.Operator = matchActionOperator;
240
241      matchActionOperator.TargetMatchParameter.ActualName = actionSelector.SelectedActionParameter.ActualName;
242
243      actionSelector.PredictionArrayParameter.ActualName = predictionArrayCalculator.PredictionArrayParameter.Name;
244      actionSelector.RandomParameter.ActualName = "Random";
245      actionSelector.ExplorationProbabilityParameter.ActualName = "ExplorationProbability";
246
247      actionMatchSelector.CopySelected = new BoolValue(false);
248      actionMatchSelector.ConditionParameter.ActualName = "MatchAction";
249
250      actionSetSubsumptionBranch.ConditionParameter.ActualName = "DoActionSetSubsumption";
251
252      setSubsumedToFalseAssigner.LeftSideParameter.ActualName = HASBEENSUBSUMED;
253      setSubsumedToFalseAssigner.RightSideParameter.Value = new BoolValue(false);
254
255      subsumptionSelector.ConditionParameter.ActualName = HASBEENSUBSUMED;
256      subsumptionSelector.CopySelected = new BoolValue(false);
257
258      SelectorParameter.Value.CopySelected = new BoolValue(true);
259      SelectorParameter.Value.NumberOfSelectedSubScopesParameter.Value = new IntValue(4);
260
261      evaluator.Name = "Evaluator";
262
263      classifierFetcher.Name = "ClassifierFetcher";
264
265      actionExecuter.Name = "ActionExecuter";
266
267      actionSetSizeDataReducer.TargetParameter.ActualName = "CurrentActionSetSize";
268      actionSetSizeDataReducer.ParameterToReduce.ActualName = "Numerosity";
269      actionSetSizeDataReducer.ReductionOperation.Value = new ReductionOperation(ReductionOperations.Sum);
270      actionSetSizeDataReducer.TargetOperation.Value = new ReductionOperation(ReductionOperations.Assign);
271
272      calculateAccuracy.AlphaParameter.ActualName = "Alpha";
273      calculateAccuracy.ErrorParameter.ActualName = "Error";
274      calculateAccuracy.ErrorZeroParameter.ActualName = "ErrorZero";
275      calculateAccuracy.PowerParameter.ActualName = "v";
276
277      sumAccuracy.AccuracyParameter.ActualName = calculateAccuracy.AccuracyParameter.ActualName;
278      sumAccuracy.NumerosityParameter.ActualName = "Numerosity";
279
280      //BEGIN parameters have to be set differently
281      checkIfGAShouldRun.TimeStampsParameter.ActualName = "Timestamp";
282      checkIfGAShouldRun.NumerositiesParameter.ActualName = "Numerosity";
283      checkIfGAShouldRun.ThetaGAParameter.ActualName = "ThetaGA";
284      //END
285      checkIfGAShouldRun.IterationParameter.ActualName = iterationCounter.ValueParameter.ActualName;
286
287      runGAConditionalBranch.ConditionParameter.ActualName = checkIfGAShouldRun.RunGAParameter.ActualName;
288
289      timestampAssigner.LeftSideParameter.ActualName = "Timestamp";
290      timestampAssigner.RightSideParameter.ActualName = iterationCounter.ValueParameter.ActualName;
291
292      afterCrossover.NumerosityParameter.ActualName = "Numerosity";
293      afterCrossover.ExperienceParameter.ActualName = "Experience";
294      afterCrossover.TimestampParameter.ActualName = "Timestamp";
295      afterCrossover.CurrentIterationParameter.ActualName = "Iteration";
296      afterCrossover.FitnessParameter.ActualName = "Fitness";
297      afterCrossover.AverageActionSetSizeParameter.ActualName = "AverageActionSetSize";
298      afterCrossover.PredictionParameter.ActualName = "Prediction";
299      afterCrossover.ErrorParameter.ActualName = "Error";
300      afterCrossover.ParentFitnessParameter.ActualName = "Fitness";
301      afterCrossover.ParentErrorParameter.ActualName = "Error";
302      afterCrossover.ParentPredictionParameter.ActualName = "Prediction";
303      afterCrossover.ParentAverageActionSetSizeParameter.ActualName = "AverageActionSetSize";
304
305      adaptedGeneticAlgorithmMainLoop.SelectorParameter.ActualName = SelectorParameter.Name;
306      adaptedGeneticAlgorithmMainLoop.RandomParameter.ActualName = "Random";
307      adaptedGeneticAlgorithmMainLoop.MaximumGenerationsParameter.ActualName = "ZeroIntValue";
308      adaptedGeneticAlgorithmMainLoop.QualityParameter.ActualName = "Fitness";
309      adaptedGeneticAlgorithmMainLoop.MutationProbabilityParameter.ActualName = "MutationProbability";
310      adaptedGeneticAlgorithmMainLoop.MaximizationParameter.Value = new BoolValue(true);
311      adaptedGeneticAlgorithmMainLoop.AfterCrossoverParameter.ActualName = AfterCrossoverParameter.Name;
312      adaptedGeneticAlgorithmMainLoop.AfterCopyingParentsParameter.ActualName = AfterCopyingParentsParameter.Name;
313
314      currentPopulationSizeCounter.ValueParameter.ActualName = "CurrentPopulationSize";
315      currentPopulationSizeCounter.Increment = new IntValue(2);
316
317      insertInPopulation.NumerositiesParameter.ActualName = "Numerosity";
318      insertInPopulation.HasToBeDeletedParameter.ActualName = HASTOBEDELETED;
319      insertInPopulation.InsertInPopulationParameter.ActualName = "InsertInPopulation";
320
321      calculateNumberOfDeletions.CurrentPopulationSizeParameter.ActualName = "CurrentPopulationSize";
322      calculateNumberOfDeletions.PopulationSizeParameter.ActualName = "N";
323
324      deletionOperatorAfterGA.NumberToDeleteParameter.ActualName = calculateNumberOfDeletions.NumberOfDeletionsParameter.ActualName;
325      deletionOperatorAfterGA.HasToBeDeletedParameter.ActualName = HASTOBEDELETED;
326      deletionOperatorAfterGA.AverageActionSetSizesParameter.ActualName = "AverageActionSetSize";
327      deletionOperatorAfterGA.FitnessesParameter.ActualName = "Fitness";
328      deletionOperatorAfterGA.NumerositiesParameter.ActualName = "Numerosity";
329      deletionOperatorAfterGA.ExperiencesParameter.ActualName = "Experience";
330      deletionOperatorAfterGA.ThetaDeletionParameter.ActualName = "ThetaDeletion";
331      deletionOperatorAfterGA.DeltaParameter.ActualName = "Delta";
332      deletionOperatorAfterGA.RandomParameter.ActualName = "Random";
333
334      deletionSelectorAfterGA.ConditionParameter.ActualName = HASTOBEDELETED;
335      deletionSelectorAfterGA.CopySelected = new BoolValue(false);
336      #endregion
337
338      #region Create operator graph
339      OperatorGraph.InitialOperator = variableCreator;
340
341      variableCreator.Successor = resultsCollector;
342      resultsCollector.Successor = initialPopulationConditionalBranch;
343      initialPopulationConditionalBranch.TrueBranch = initialSolutionsCreator;
344      initialSolutionsCreator.Successor = initialPopulationSizeAssigner;
345      initialPopulationConditionalBranch.FalseBranch = new EmptyOperator();
346      initialPopulationConditionalBranch.Successor = maxIterationsComparator;
347      maxIterationsComparator.Successor = terminationConditionalBranch1;
348      terminationConditionalBranch1.TrueBranch = finalAnalyzer;
349      terminationConditionalBranch1.FalseBranch = classifierFetcher;
350      classifierFetcher.Successor = matchCondtionSubScopesProcessor;
351      matchCondtionSubScopesProcessor.Operator = matchConditionOperator;
352      matchCondtionSubScopesProcessor.Successor = doDeletionBeforeCovering;
353      doDeletionBeforeCovering.Successor = doDeletionBeforeCoveringConditionalBranch;
354      doDeletionBeforeCoveringConditionalBranch.TrueBranch = setDeletionFalseSubScopeProcessor1;
355      doDeletionBeforeCoveringConditionalBranch.FalseBranch = conditionMatchSelector;
356      setDeletionFalseSubScopeProcessor1.Operator = setDeletionFalseAssigner;
357      setDeletionFalseSubScopeProcessor1.Successor = deletionOperator;
358      deletionOperator.Successor = deletionSelector;
359      deletionSelector.Successor = leftReducerAfterDeletionSelection;
360      //if a classifier with a unique action for the match set has been deleted, then there are still to many classifiers in the population
361      leftReducerAfterDeletionSelection.Successor = doDeletionBeforeCovering;
362      conditionMatchSelector.Successor = matchSetSubScopesProcessor;
363      matchSetSubScopesProcessor.Operators.Add(new EmptyOperator());
364      matchSetSubScopesProcessor.Operators.Add(countNumberOfUniqueActions);
365      countNumberOfUniqueActions.Successor = covering;
366      matchSetSubScopesProcessor.Successor = matchSetMergingReducer;
367      covering.Successor = predictionArrayCalculator;
368      predictionArrayCalculator.Successor = actionSelector;
369      actionSelector.Successor = matchActionSubScopesProcessor;
370      matchActionSubScopesProcessor.Successor = actionMatchSelector;
371      actionMatchSelector.Successor = actionExecuter;
372      actionExecuter.Successor = actionSetSubScopesProcessor;
373      actionSetSubScopesProcessor.Operators.Add(new EmptyOperator());
374      actionSetSubScopesProcessor.Operators.Add(actionSetSizeDataReducer);
375      actionSetSizeDataReducer.Successor = accuracySubScopesProcessor;
376      accuracySubScopesProcessor.Operator = calculateAccuracy;
377      accuracySubScopesProcessor.Successor = sumAccuracy;
378      sumAccuracy.Successor = updateParametersSubScopesProcessor;
379      updateParametersSubScopesProcessor.Operator = evaluator;
380      updateParametersSubScopesProcessor.Successor = actionSetSubsumptionBranch;
381      actionSetSubsumptionBranch.TrueBranch = setSubsumedToFalseSubScopeProcessor;
382      setSubsumedToFalseSubScopeProcessor.Operator = setSubsumedToFalseAssigner;
383      setSubsumedToFalseSubScopeProcessor.Successor = actionSetSubsumption;
384      actionSetSubsumption.Successor = subsumptionSelector;
385      subsumptionSelector.Successor = leftReducer;
386      actionSetSubsumptionBranch.FalseBranch = new EmptyOperator();
387      actionSetSubsumptionBranch.Successor = checkIfGAShouldRun;
388      checkIfGAShouldRun.Successor = runGAConditionalBranch;
389      runGAConditionalBranch.TrueBranch = timestampAssignerSubscopeProcessor;
390      runGAConditionalBranch.FalseBranch = new EmptyOperator();
391      timestampAssignerSubscopeProcessor.Operator = timestampAssigner;
392      timestampAssignerSubscopeProcessor.Successor = adaptedGeneticAlgorithmMainLoop;
393      adaptedGeneticAlgorithmMainLoop.Successor = currentPopulationSizeCounter;
394
395      actionSetSubScopesProcessor.Successor = actionSetMergingReducer;
396
397      matchSetMergingReducer.Successor = setDeletionFalseSubScopeProcessor2;
398      setDeletionFalseSubScopeProcessor2.Operator = setDeletionFalseAssigner;
399      setDeletionFalseSubScopeProcessor2.Successor = insertInPopulation;
400      insertInPopulation.Successor = calculateNumberOfDeletions;
401      calculateNumberOfDeletions.Successor = deletionOperatorAfterGA;
402      deletionOperatorAfterGA.Successor = deletionSelectorAfterGA;
403      deletionSelectorAfterGA.Successor = leftReducerAfterGA;
404      leftReducerAfterGA.Successor = iterationCounter;
405      iterationCounter.Successor = analyzer;
406      analyzer.Successor = maxIterationsComparator;
407      #endregion
408    }
409
410    private void ParameterizeStochasticOperator(IOperator op) {
411      IStochasticOperator stochasticOp = op as IStochasticOperator;
412      if (stochasticOp != null) {
413        stochasticOp.RandomParameter.ActualName = "Random";
414        stochasticOp.RandomParameter.Hidden = true;
415      }
416    }
417
418    internal void SetCurrentProblem(IConditionActionProblem problem) {
419      initialSolutionsCreator.SolutionCreatorParameter.ActualName = problem.SolutionCreatorParameter.Name;
420      initialSolutionsCreator.EvaluatorParameter.ActualName = problem.EvaluatorParameter.Name;
421
422      problem.ActionExecuter.SelectedActionParameter.ActualName = actionSelector.SelectedActionParameter.ActualName;
423
424      problem.ClassifierFetcher.IterationParameter.ActualName = "Iteration";
425
426      evaluator.OperatorParameter.ActualName = problem.EvaluatorParameter.Name;
427
428      classifierFetcher.OperatorParameter.ActualName = problem.ClassifierFetcherParameter.Name;
429
430      actionExecuter.OperatorParameter.ActualName = problem.ActionExecuterParameter.Name;
431
432      problem.ActionSetSubsumptionOperator.ThetaSubsumptionParameter.ActualName = "ThetaSubsumption";
433      problem.ActionSetSubsumptionOperator.ErrorsParameter.ActualName = "Error";
434      problem.ActionSetSubsumptionOperator.ErrorZeroParameter.ActualName = "ErrorZero";
435      problem.ActionSetSubsumptionOperator.ExperiencesParameter.ActualName = "Experience";
436      problem.ActionSetSubsumptionOperator.NumerositiesParameter.ActualName = "Numerosity";
437
438      problem.ActionSetSubsumptionOperator.HasBeenSubsumedParameter.ActualName = HASBEENSUBSUMED;
439
440      actionSetSubsumption.OperatorParameter.ActualName = problem.ActionSetSubsumptionOperatorParameter.Name;
441
442      matchConditionOperator.TargetMatchParameter.ActualName = problem.ClassifierFetcher.CurrentInputToMatchParameter.ActualName;
443
444      doDeletionBeforeCovering.MinimalNumberOfUniqueActionsParameter.ActualName = problem.ThetaMinimalNumberOfActionsParameter.Name;
445      doDeletionBeforeCovering.ClassifierComparerParameter.ActualName = problem.ClassifierComparerParameter.Name;
446
447      covering.SolutionCreatorParameter.ActualName = problem.CoveringSolutionCreatorParameter.Name;
448      covering.EvaluatorParameter.ActualName = problem.EvaluatorParameter.Name;
449      covering.MinimalNumberOfUniqueActionsParameter.ActualName = problem.ThetaMinimalNumberOfActionsParameter.Name;
450      covering.PossibleActionsParameter.ActualName = problem.PossibleActionsParameter.Name;
451
452      predictionArrayCalculator.PredictionParameter.ActualName = problem.Evaluator.PredictionParameter.ActualName;
453      predictionArrayCalculator.FitnessParameter.ActualName = problem.Evaluator.FitnessParameter.ActualName;
454      predictionArrayCalculator.ClassifierComparerParameter.ActualName = problem.ClassifierComparerParameter.Name;
455
456      countNumberOfUniqueActions.ClassifierComparerParameter.ActualName = problem.ClassifierComparerParameter.Name;
457
458      matchConditionOperator.MatchParameter.ActualName = problem.ChildName;
459      countNumberOfUniqueActions.ClassifiersParameter.ActualName = problem.ChildName;
460      doDeletionBeforeCovering.ClassifiersParameter.ActualName = problem.ChildName;
461      matchActionOperator.MatchParameter.ActualName = problem.ChildName;
462      predictionArrayCalculator.MatchParameter.ActualName = problem.ChildName;
463      insertInPopulation.ClassifiersParameter.ActualName = problem.ChildName;
464
465      adaptedGeneticAlgorithmMainLoop.SetChildName(problem.ChildName);
466    }
467    //private void ParameterizeSelectors() {
468    //  foreach (ISelector selector in SelectorParameter.ValidValues) {
469    //    selector.CopySelected = new BoolValue(true);
470    //    //set value by parameter!
471    //    selector.NumberOfSelectedSubScopesParameter.Value = new IntValue(5);
472    //    selector.NumberOfSelectedSubScopesParameter.Hidden = true;
473    //    ParameterizeStochasticOperator(selector);
474    //  }
475    //  if (Problem != null) {
476    //    foreach (ISingleObjectiveSelector selector in SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>()) {
477    //      selector.MaximizationParameter.Value = new BoolValue(true);
478    //      selector.MaximizationParameter.Hidden = true;
479    //      selector.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
480    //      selector.QualityParameter.Hidden = true;
481    //    }
482    //  }
483    //}
484  }
485}
Note: See TracBrowser for help on using the repository browser.