Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/27/12 19:14:51 (11 years ago)
Author:
sforsten
Message:

#1980:

  • added ConditionActionClassificationProblem
  • added ConditionActionEncoding
  • added Manipulators, Crossovers and an LCSAdaptedGeneticAlgorithm
  • changed LearningClassifierSystemMainLoop
Location:
branches/LearningClassifierSystems
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/LearningClassifierSystems

    • Property svn:ignore set to
      *.suo
  • branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3

    • Property svn:ignore set to
      *.user
      Plugin.cs
  • branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystem.cs

    r8941 r9089  
    2424using HeuristicLab.Core;
    2525using HeuristicLab.Data;
    26 using HeuristicLab.Encodings.CombinedIntegerVectorEncoding;
    27 using HeuristicLab.Operators;
     26using HeuristicLab.Encodings.ConditionActionEncoding;
    2827using HeuristicLab.Optimization;
    29 using HeuristicLab.Optimization.Operators;
    3028using HeuristicLab.Parameters;
    3129using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3937  [Creatable("Algorithms")]
    4038  [StorableClass]
    41   public class LearningClassifierSystem : HeuristicOptimizationEngineAlgorithm, IStorableContent {
     39  public sealed class LearningClassifierSystem : HeuristicOptimizationEngineAlgorithm, IStorableContent {
    4240    public string Filename { get; set; }
    4341
    4442    #region Problem Properties
    4543    public override Type ProblemType {
    46       get { return typeof(ISingleObjectiveHeuristicOptimizationProblem); }
    47     }
    48     public new ISingleObjectiveHeuristicOptimizationProblem Problem {
    49       get { return (ISingleObjectiveHeuristicOptimizationProblem)base.Problem; }
     44      get { return typeof(IConditionActionProblem); }
     45    }
     46    public new IConditionActionProblem Problem {
     47      get { return (IConditionActionProblem)base.Problem; }
    5048      set { base.Problem = value; }
    5149    }
     
    5957      get { return (ValueParameter<BoolValue>)Parameters["SetSeedRandomly"]; }
    6058    }
     59    private ValueParameter<BoolValue> CreateInitialPopulationParameter {
     60      get { return (ValueParameter<BoolValue>)Parameters["CreateInitialPopulation"]; }
     61    }
    6162    private ValueParameter<IntValue> PopulationSizeParameter {
    62       get { return (ValueParameter<IntValue>)Parameters["PopulationSize"]; }
    63     }
    64     //for test purpose
    65     public ValueParameter<ICombinedIntegerVectorCreator> SolutionCreatorParameter {
    66       get { return (ValueParameter<ICombinedIntegerVectorCreator>)Parameters["SolutionCreator"]; }
    67     }
    68     public ValueParameter<IntValue> Length {
    69       get { return (ValueParameter<IntValue>)Parameters["Length"]; }
    70     }
    71     public ValueParameter<IntValue> ActionPartLength {
    72       get { return (ValueParameter<IntValue>)Parameters["ActionPartLength"]; }
    73     }
    74     public ValueParameter<IntMatrix> Bounds {
    75       get { return (ValueParameter<IntMatrix>)Parameters["Bounds"]; }
     63      get { return (ValueParameter<IntValue>)Parameters["N"]; }
     64    }
     65    private ValueParameter<PercentValue> BetaParameter {
     66      get { return (ValueParameter<PercentValue>)Parameters["Beta"]; }
     67    }
     68    private ValueParameter<PercentValue> AlphaParameter {
     69      get { return (ValueParameter<PercentValue>)Parameters["Alpha"]; }
     70    }
     71    private ValueParameter<DoubleValue> ErrorZeroParameter {
     72      get { return (ValueParameter<DoubleValue>)Parameters["ErrorZero"]; }
     73    }
     74    private ValueParameter<DoubleValue> PowerParameter {
     75      get { return (ValueParameter<DoubleValue>)Parameters["v"]; }
     76    }
     77    private ValueParameter<PercentValue> GammaParameter {
     78      get { return (ValueParameter<PercentValue>)Parameters["Gamma"]; }
     79    }
     80    private ValueParameter<PercentValue> CrossoverProbabilityParameter {
     81      get { return (ValueParameter<PercentValue>)Parameters["CrossoverProbability"]; }
     82    }
     83    private ValueParameter<PercentValue> MutationProbabilityParameter {
     84      get { return (ValueParameter<PercentValue>)Parameters["MutationProbability"]; }
     85    }
     86    private ValueParameter<IntValue> ThetaGAParameter {
     87      get { return (ValueParameter<IntValue>)Parameters["ThetaGA"]; }
     88    }
     89    private ValueParameter<IntValue> ThetaDeletionParameter {
     90      get { return (ValueParameter<IntValue>)Parameters["ThetaDeletion"]; }
     91    }
     92    private ValueParameter<IntValue> ThetaSubsumptionParameter {
     93      get { return (ValueParameter<IntValue>)Parameters["ThetaSubsumption"]; }
     94    }
     95    private ValueParameter<PercentValue> DeltaParameter {
     96      get { return (ValueParameter<PercentValue>)Parameters["Delta"]; }
     97    }
     98    private ValueParameter<PercentValue> ExplorationProbabilityParameter {
     99      get { return (ValueParameter<PercentValue>)Parameters["ExplorationProbability"]; }
     100    }
     101    private ValueParameter<BoolValue> DoGASubsumptionParameter {
     102      get { return (ValueParameter<BoolValue>)Parameters["DoGASubsumption"]; }
     103    }
     104    private ValueParameter<BoolValue> DoActionSetSubsumptionParameter {
     105      get { return (ValueParameter<BoolValue>)Parameters["DoActionSetSubsumption"]; }
    76106    }
    77107    #endregion
     
    86116      set { SetSeedRandomlyParameter.Value = value; }
    87117    }
     118    public BoolValue CreateInitialPopulation {
     119      get { return CreateInitialPopulationParameter.Value; }
     120      set { CreateInitialPopulationParameter.Value = value; }
     121    }
    88122    public IntValue PopulationSize {
    89123      get { return PopulationSizeParameter.Value; }
    90124      set { PopulationSizeParameter.Value = value; }
    91125    }
    92 
     126    public PercentValue Beta {
     127      get { return BetaParameter.Value; }
     128      set { BetaParameter.Value = value; }
     129    }
     130    public PercentValue Alpha {
     131      get { return AlphaParameter.Value; }
     132      set { AlphaParameter.Value = value; }
     133    }
     134    public DoubleValue ErrorZero {
     135      get { return ErrorZeroParameter.Value; }
     136      set { ErrorZeroParameter.Value = value; }
     137    }
     138    public DoubleValue Power {
     139      get { return PowerParameter.Value; }
     140      set { PowerParameter.Value = value; }
     141    }
     142    public PercentValue Gamma {
     143      get { return GammaParameter.Value; }
     144      set { GammaParameter.Value = value; }
     145    }
     146    public PercentValue CrossoverProbability {
     147      get { return CrossoverProbabilityParameter.Value; }
     148      set { CrossoverProbabilityParameter.Value = value; }
     149    }
     150    public PercentValue MutationProbability {
     151      get { return MutationProbabilityParameter.Value; }
     152      set { MutationProbabilityParameter.Value = value; }
     153    }
     154    public IntValue ThetaGA {
     155      get { return ThetaGAParameter.Value; }
     156      set { ThetaGAParameter.Value = value; }
     157    }
     158    public IntValue ThetaDeletion {
     159      get { return ThetaDeletionParameter.Value; }
     160      set { ThetaDeletionParameter.Value = value; }
     161    }
     162    public IntValue ThetaSubsumption {
     163      get { return ThetaSubsumptionParameter.Value; }
     164      set { ThetaSubsumptionParameter.Value = value; }
     165    }
     166    public PercentValue Delta {
     167      get { return DeltaParameter.Value; }
     168      set { DeltaParameter.Value = value; }
     169    }
     170    public PercentValue ExplorationProbability {
     171      get { return ExplorationProbabilityParameter.Value; }
     172      set { ExplorationProbabilityParameter.Value = value; }
     173    }
     174    public BoolValue DoGASubsumption {
     175      get { return DoGASubsumptionParameter.Value; }
     176      set { DoGASubsumptionParameter.Value = value; }
     177    }
     178    public BoolValue DoActionSetSubsumption {
     179      get { return DoActionSetSubsumptionParameter.Value; }
     180      set { DoActionSetSubsumptionParameter.Value = value; }
     181    }
     182    private RandomCreator RandomCreator {
     183      get { return (RandomCreator)OperatorGraph.InitialOperator; }
     184    }
     185    public LearningClassifierSystemMainLoop MainLoop {
     186      get { return (LearningClassifierSystemMainLoop)RandomCreator.Successor; }
     187    }
    93188    #endregion
    94189
     
    98193      Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
    99194      Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
    100       Parameters.Add(new ValueParameter<IntValue>("PopulationSize", "The size of the population of solutions.", new IntValue(100)));
    101       //for test purpose
    102       Parameters.Add(new ValueParameter<ICombinedIntegerVectorCreator>("SolutionCreator", "The operator to create a solution.", new UniformRandomCombinedIntegerVectorCreator()));
    103       Parameters.Add(new ValueParameter<IntValue>("Length", "The operator to create a solution.", new IntValue(3)));
    104       Parameters.Add(new ValueParameter<IntValue>("ActionPartLength", "The operator to create a solution.", new IntValue(1)));
    105       int[,] elements = new int[,] { { 0, 3 }, { 0, 3 }, { 0, 2 } };
    106       Parameters.Add(new ValueParameter<IntMatrix>("Bounds", "The operator to create a solution.", new IntMatrix(elements)));
     195      Parameters.Add(new ValueParameter<BoolValue>("CreateInitialPopulation", "Specifies if a population should be created at the beginning of the algorithm.", new BoolValue(false)));
     196      Parameters.Add(new ValueParameter<IntValue>("N", "Max size of the population of solutions.", new IntValue(100)));
     197      Parameters.Add(new ValueParameter<PercentValue>("Beta", "Learning rate", new PercentValue(0.1)));
     198      Parameters.Add(new ValueParameter<PercentValue>("Alpha", "", new PercentValue(0.1)));
     199      Parameters.Add(new ValueParameter<DoubleValue>("ErrorZero", "The error below which classifiers are considered to have equal accuracy", new DoubleValue(10)));
     200      Parameters.Add(new ValueParameter<DoubleValue>("v", "Power parameter", new DoubleValue(5)));
     201      Parameters.Add(new ValueParameter<PercentValue>("Gamma", "Discount factor", new PercentValue(0.71)));
     202      Parameters.Add(new ValueParameter<PercentValue>("CrossoverProbability", "Probability of crossover", new PercentValue(0.9)));
     203      Parameters.Add(new ValueParameter<PercentValue>("MutationProbability", "Probability of mutation", new PercentValue(0.05)));
     204      Parameters.Add(new ValueParameter<IntValue>("ThetaGA", "GA threshold. GA is applied in a set when the average time since the last GA is greater than ThetaGA.", new IntValue(25)));
     205      Parameters.Add(new ValueParameter<IntValue>("ThetaDeletion", "Deletion threshold. If the experience of a classifier is greater than ThetaDeletion, its fitness may be considered in its probability of deletion.", new IntValue(20)));
     206      Parameters.Add(new ValueParameter<IntValue>("ThetaSubsumption", "Subsumption threshold. The experience of a classifier must be greater than TheatSubsumption to be able to subsume another classifier.", new IntValue(20)));
     207      Parameters.Add(new ValueParameter<PercentValue>("Delta", "Delta specifies the fraction of mean fitness in [P] below which the fitness of a classifier may be considered in its probability of deletion", new PercentValue(0.1)));
     208      Parameters.Add(new ValueParameter<PercentValue>("ExplorationProbability", "Probability of selecting the action uniform randomly", new PercentValue(0.5)));
     209      Parameters.Add(new ValueParameter<BoolValue>("DoGASubsumption", "Specifies if offsprings are tested for possible logical subsumption by parents.", new BoolValue(true)));
     210      Parameters.Add(new ValueParameter<BoolValue>("DoActionSetSubsumption", "Specifies if action set is tested for subsuming classifiers.", new BoolValue(true)));
    107211      #endregion
    108212
    109213      #region Create operators
    110214      RandomCreator randomCreator = new RandomCreator();
    111       SolutionsCreator solutionsCreator = new SolutionsCreator();
    112       UniformSubScopesProcessor uniformSubScopeProcessor = new UniformSubScopesProcessor();
    113       UniformRandomizer uniformRandomizer = new UniformRandomizer();
     215
    114216      //ResultsCollector resultsCollector = new ResultsCollector();
    115217      LearningClassifierSystemMainLoop mainLoop = new LearningClassifierSystemMainLoop();
     
    120222      randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
    121223      randomCreator.SetSeedRandomlyParameter.Value = null;
    122 
    123       SolutionCreatorParameter.Value.ActionPartLengthParameter.ActualName = ActionPartLength.Name;
    124       SolutionCreatorParameter.Value.LengthParameter.ActualName = Length.Name;
    125       SolutionCreatorParameter.Value.BoundsParameter.ActualName = Bounds.Name;
    126 
    127       solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;
    128       solutionsCreator.SolutionCreatorParameter.ActualName = SolutionCreatorParameter.Name;
    129 
    130       uniformSubScopeProcessor.Parallel = new BoolValue(true);
    131 
    132       uniformRandomizer.RandomParameter.ActualName = randomCreator.RandomParameter.ActualName;
    133       uniformRandomizer.MinParameter.Value = new DoubleValue(0);
    134       uniformRandomizer.MaxParameter.Value = new DoubleValue(100);
    135       uniformRandomizer.ValueParameter.ActualName = "Fitness";
    136 
    137224      #endregion
    138225
    139226      #region Create operator graph
    140227      OperatorGraph.InitialOperator = randomCreator;
    141       randomCreator.Successor = solutionsCreator;
    142       solutionsCreator.Successor = uniformSubScopeProcessor;
    143       uniformSubScopeProcessor.Operator = uniformRandomizer;
    144       uniformSubScopeProcessor.Successor = mainLoop;
     228      randomCreator.Successor = mainLoop;
    145229      #endregion
    146230    }
    147     protected LearningClassifierSystem(LearningClassifierSystem original, Cloner cloner)
     231    private LearningClassifierSystem(LearningClassifierSystem original, Cloner cloner)
    148232      : base(original, cloner) {
    149233    }
     
    153237    [StorableConstructor]
    154238    private LearningClassifierSystem(bool deserializing) : base(deserializing) { }
     239
     240    protected override void OnProblemChanged() {
     241      if (Problem != null) {
     242        ParameterizeEvaluator(Problem.Evaluator);
     243        MainLoop.SetCurrentProblem(Problem);
     244      }
     245      base.OnProblemChanged();
     246    }
     247    protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
     248      ParameterizeEvaluator(Problem.Evaluator);
     249      MainLoop.SetCurrentProblem(Problem);
     250      base.Problem_EvaluatorChanged(sender, e);
     251    }
     252    protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) {
     253      MainLoop.SetCurrentProblem(Problem);
     254      base.Problem_SolutionCreatorChanged(sender, e);
     255    }
     256
     257    private void ParameterizeEvaluator(IXCSEvaluator evaluator) {
     258      evaluator.ActualTimeParameter.ActualName = "Iteration";
     259      evaluator.BetaParameter.ActualName = BetaParameter.Name;
     260      evaluator.AlphaParameter.ActualName = AlphaParameter.Name;
     261      evaluator.PowerParameter.ActualName = PowerParameter.Name;
     262      evaluator.ErrorZeroParameter.ActualName = ErrorZeroParameter.Name;
     263    }
    155264  }
    156265}
Note: See TracChangeset for help on using the changeset viewer.