Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/04/13 20:46:18 (12 years ago)
Author:
sforsten
Message:

#1980:

  • added GA subsumption
  • simplified deletion before covering
  • simplified XCSDeletionOperator
Location:
branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3
Files:
4 added
1 deleted
9 edited
1 moved

Legend:

Unmodified
Added
Removed
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Covering/CoveringOperator.cs

    r9105 r9110  
    101101        throw new ArgumentException("More classifiers with unique actions shall be created than unique actions are available.");
    102102      }
     103      if (count > 0) {
     104        CurrentPopulationSizeParameter.ActualValue.Value += count;
    103105
    104       CurrentPopulationSizeParameter.ActualValue.Value += count;
     106        int current = CurrentScope.SubScopes.Count;
     107        for (int i = 0; i < count; i++) {
     108          CurrentScope.SubScopes.Add(new Scope((current + i).ToString()));
     109        }
    105110
    106       int current = CurrentScope.SubScopes.Count;
    107       for (int i = 0; i < count; i++) {
    108         CurrentScope.SubScopes.Add(new Scope((current + i).ToString()));
     111        creator.ActionParameter.ActualName = "Action";
     112        OperationCollection variableCreation = new OperationCollection() { Parallel = parallel };
     113        OperationCollection creation = new OperationCollection();
     114        OperationCollection evaluation = new OperationCollection() { Parallel = parallel };
     115        for (int i = 0; i < count; i++) {
     116          VariableCreator variableCreator = new VariableCreator();
     117          int pos = RandomParameter.ActualValue.Next(clone.Count);
     118          IClassifier action = clone.ElementAt(pos);
     119          clone.Remove(action);
     120          variableCreator.CollectedValues.Add(new ValueParameter<IClassifier>("Action", action));
     121          variableCreation.Add(ExecutionContext.CreateOperation(variableCreator, CurrentScope.SubScopes[current + i]));
     122          creation.Add(ExecutionContext.CreateOperation(creator, CurrentScope.SubScopes[current + i]));
     123          evaluation.Add(ExecutionContext.CreateOperation(evaluator, CurrentScope.SubScopes[current + i]));
     124        }
     125        OperationCollection next = new OperationCollection();
     126        next.Add(variableCreation);
     127        next.Add(creation);
     128        next.Add(evaluation);
     129        next.Add(base.Apply());
     130        return next;
     131      } else {
     132        return base.Apply();
    109133      }
    110 
    111       creator.ActionParameter.ActualName = "Action";
    112       OperationCollection variableCreation = new OperationCollection() { Parallel = parallel };
    113       OperationCollection creation = new OperationCollection();
    114       OperationCollection evaluation = new OperationCollection() { Parallel = parallel };
    115       for (int i = 0; i < count; i++) {
    116         VariableCreator variableCreator = new VariableCreator();
    117         int pos = RandomParameter.ActualValue.Next(clone.Count);
    118         IClassifier action = clone.ElementAt(pos);
    119         clone.Remove(action);
    120         variableCreator.CollectedValues.Add(new ValueParameter<IClassifier>("Action", action));
    121         variableCreation.Add(ExecutionContext.CreateOperation(variableCreator, CurrentScope.SubScopes[current + i]));
    122         creation.Add(ExecutionContext.CreateOperation(creator, CurrentScope.SubScopes[current + i]));
    123         evaluation.Add(ExecutionContext.CreateOperation(evaluator, CurrentScope.SubScopes[current + i]));
    124       }
    125       OperationCollection next = new OperationCollection();
    126       next.Add(variableCreation);
    127       next.Add(creation);
    128       next.Add(evaluation);
    129       next.Add(base.Apply());
    130       return next;
    131134    }
    132135  }
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Covering/DoDeletionBeforeCovering.cs

    r9105 r9110  
    2020#endregion
    2121
     22using System;
    2223using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     
    3334
    3435    #region Parameter Properties
     36    public ILookupParameter<ItemArray<IClassifier>> ClassifiersParameter {
     37      get { return (ILookupParameter<ItemArray<IClassifier>>)Parameters["Classifiers"]; }
     38    }
     39    public ILookupParameter<ItemArray<BoolValue>> MatchConditionParameter {
     40      get { return (ILookupParameter<ItemArray<BoolValue>>)Parameters["MatchCondition"]; }
     41    }
    3542    public ILookupParameter<IntValue> MinimalNumberOfUniqueActionsParameter {
    3643      get { return (ILookupParameter<IntValue>)Parameters["MinimalNumberOfUniqueActions"]; }
    37     }
    38     public ILookupParameter<IntValue> NumberOfUniqueActionsParameter {
    39       get { return (ILookupParameter<IntValue>)Parameters["NumberOfUniqueActions"]; }
    4044    }
    4145    public ILookupParameter<IntValue> CurrentPopulationSizeParameter {
     
    6064    public DoDeletionBeforeCoveringOperator()
    6165      : base() {
     66      Parameters.Add(new ScopeTreeLookupParameter<IClassifier>("Classifiers"));
     67      Parameters.Add(new ScopeTreeLookupParameter<BoolValue>("MatchCondition"));
    6268      Parameters.Add(new LookupParameter<IntValue>("MinimalNumberOfUniqueActions"));
    63       Parameters.Add(new LookupParameter<IntValue>("NumberOfUniqueActions"));
    6469      Parameters.Add(new LookupParameter<IntValue>("CurrentPopulationSize"));
    6570      Parameters.Add(new LookupParameter<IntValue>("PopulationSize"));
     
    7277
    7378    public override IOperation Apply() {
     79      IItemSet<IClassifier> uniqueActions = new ItemSet<IClassifier>();
     80      var classifiers = ClassifiersParameter.ActualValue;
     81      var matchcondition = MatchConditionParameter.ActualValue;
     82
     83      if (classifiers.Length != matchcondition.Length) {
     84        throw new ArgumentException("Number of classifiers is not equal to the number of 'MatchCondition' variables.");
     85      }
     86
     87      for (int i = 0; i < classifiers.Length; i++) {
     88        if (matchcondition[i].Value) {
     89          uniqueActions.Add(classifiers[i].Action);
     90        }
     91      }
     92
    7493      int populationAfterCovering = MinimalNumberOfUniqueActionsParameter.ActualValue.Value
    75                                     - NumberOfUniqueActionsParameter.ActualValue.Value
     94                                    - uniqueActions.Count
    7695                                    + CurrentPopulationSizeParameter.ActualValue.Value;
    7796      BoolValue doDeletion = new BoolValue(populationAfterCovering > PopulationSizeParameter.ActualValue.Value);
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Deletion/XCSDeletionOperator.cs

    r9105 r9110  
    5151      get { return (ILookupParameter<ItemArray<IntValue>>)Parameters["Experiences"]; }
    5252    }
     53    public ILookupParameter<ItemArray<BoolValue>> HasToBeDeletedParameter {
     54      get { return (ILookupParameter<ItemArray<BoolValue>>)Parameters["HasToBeDeleted"]; }
     55    }
    5356    public ILookupParameter<IntValue> ThetaDeletionParameter {
    5457      get { return (ILookupParameter<IntValue>)Parameters["ThetaDeletion"]; }
     
    6366      get { return (ILookupParameter<IntValue>)Parameters["CurrentPopulationSize"]; }
    6467    }
    65     protected ScopeParameter CurrentScopeParameter {
    66       get { return (ScopeParameter)Parameters["CurrentScope"]; }
    67     }
    68     public IScope CurrentScope {
    69       get { return CurrentScopeParameter.ActualValue; }
    70     }
    71     public string HasToBeDeletedVariableName { get { return "HasToBeDeleted"; } }
    7268    #endregion
    7369
     
    8985      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Fitnesses"));
    9086      Parameters.Add(new ScopeTreeLookupParameter<IntValue>("Experiences"));
     87      Parameters.Add(new ScopeTreeLookupParameter<BoolValue>("HasToBeDeleted"));
    9188      Parameters.Add(new LookupParameter<IntValue>("ThetaDeletion"));
    9289      Parameters.Add(new LookupParameter<PercentValue>("Delta"));
    9390      Parameters.Add(new LookupParameter<IRandom>("Random"));
    94       Parameters.Add(new ScopeParameter("CurrentScope"));
    9591      Parameters.Add(new LookupParameter<IntValue>("CurrentPopulationSize"));
    9692    }
     
    104100      var experiences = ExperiencesParameter.ActualValue;
    105101      var averageActionSetSizes = AverageActionSetSizesParameter.ActualValue;
    106       var subscopes = CurrentScope.SubScopes;
     102      var hasToBeDeleted = HasToBeDeletedParameter.ActualValue;
    107103      double fitnessSum = fitnesses.Select(x => x.Value).Sum();
    108104      double numerositySum = numerosities.Select(x => x.Value).Sum();
    109105
    110       if (fitnesses.Length != numerosities.Length && fitnesses.Length != experiences.Length && fitnesses.Length != subscopes.Count) {
     106      if (fitnesses.Length != numerosities.Length && fitnesses.Length != experiences.Length) {
    111107        throw new ArgumentException("Different number of fitness, numerosity and experience values.");
    112       }
    113 
    114       for (int cl = 0; cl < fitnesses.Length; cl++) {
    115         if (subscopes[cl].Variables.ContainsKey(HasToBeDeletedVariableName)) {
    116           ((BoolValue)subscopes[cl].Variables[HasToBeDeletedVariableName].Value).Value = false;
    117         } else {
    118           subscopes[cl].Variables.Add(new Variable(HasToBeDeletedVariableName, new BoolValue(false)));
    119         }
    120108      }
    121109
     
    131119        voteSum = 0;
    132120        for (int cl = 0; cl < fitnesses.Length; cl++) {
    133           if (numerosities[cl].Value > 0) {
     121          if (numerosities[cl].Value > 0 && !hasToBeDeleted[cl].Value) {
    134122            voteSum += DeletionVote(averageFitnessInPopulation, averageActionSetSizes[cl].Value, numerosities[cl].Value, fitnesses[cl].Value, experiences[cl].Value);
    135123            if (voteSum > choicePoint) {
    136124              if (numerosities[cl].Value <= 1) {
    137                 ((BoolValue)subscopes[cl].Variables[HasToBeDeletedVariableName].Value).Value = true;
     125                hasToBeDeleted[cl].Value = true;
    138126                fitnessSum -= fitnesses[cl].Value;
    139127              }
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Evaluators/XCSEvaluator.cs

    r9089 r9110  
    5656    public IValueLookupParameter<IntValue> NumerosityParameter {
    5757      get { return (IValueLookupParameter<IntValue>)Parameters["Numerosity"]; }
     58    }
     59    public IValueLookupParameter<BoolValue> InsertInPopulationParameter {
     60      get { return (IValueLookupParameter<BoolValue>)Parameters["InsertInPopulation"]; }
    5861    }
    5962    public ILookupParameter<DoubleValue> InitialPredictionParameter {
     
    156159      Parameters.Add(new LookupParameter<DoubleValue>("AccuracySum", ""));
    157160      Parameters.Add(new ValueLookupParameter<IntValue>("Numerosity", ""));
     161      Parameters.Add(new ValueLookupParameter<BoolValue>("InsertInPopulation", ""));
    158162
    159163      Parameters.Add(new LookupParameter<DoubleValue>("InitialPrediction"));
     
    178182        AverageActionSetSizeParameter.ActualValue = new DoubleValue(1);
    179183        NumerosityParameter.ActualValue = new IntValue(1);
     184        InsertInPopulationParameter.ActualValue = new BoolValue(false);
    180185      } else {
    181186        Experience += 1;
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/GA/XCSAfterCrossoverOperator.cs

    r9105 r9110  
    5555      get { return (IValueLookupParameter<DoubleValue>)Parameters["Fitness"]; }
    5656    }
     57    public IValueLookupParameter<BoolValue> InsertInPopulationParameter {
     58      get { return (IValueLookupParameter<BoolValue>)Parameters["InsertInPopulation"]; }
     59    }
     60    public IValueLookupParameter<IntValue> TempIDParameter {
     61      get { return (IValueLookupParameter<IntValue>)Parameters["TempID"]; }
     62    }
    5763    public ILookupParameter<IntValue> CurrentIterationParameter {
    5864      get { return (ILookupParameter<IntValue>)Parameters["CurrentIteration"]; }
     
    8692      Parameters.Add(new ValueLookupParameter<DoubleValue>("Error"));
    8793      Parameters.Add(new ValueLookupParameter<DoubleValue>("Fitness"));
     94      Parameters.Add(new ValueLookupParameter<BoolValue>("InsertInPopulation"));
     95      Parameters.Add(new ValueLookupParameter<IntValue>("TempID"));
    8896      Parameters.Add(new LookupParameter<IntValue>("CurrentIteration"));
    8997      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("ParentAverageActionSetSize"));
     
    108116      ErrorParameter.ActualValue = new DoubleValue(0.25 * parentPrecisionError.Select(x => x.Value).Average());
    109117      FitnessParameter.ActualValue = new DoubleValue(0.1 * parentFitness.Select(x => x.Value).Average());
     118      InsertInPopulationParameter.ActualValue = new BoolValue(true);
     119      TempIDParameter.ActualValue = new IntValue(-1);
    110120      return base.Apply();
    111121    }
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj

    r9105 r9110  
    9292    <Compile Include="Evaluators\IConditionActionEvaluator.cs" />
    9393    <Compile Include="Evaluators\IXCSEvaluator.cs" />
     94    <Compile Include="GA\InsertInPopulationOperator.cs" />
    9495    <Compile Include="GA\XCSAfterCrossoverOperator.cs" />
    9596    <Compile Include="IClassifier.cs" />
     
    102103    <Compile Include="Operator\MatchActionOperator.cs" />
    103104    <Compile Include="Operator\MatchConditionOperator.cs" />
    104     <Compile Include="Operator\SubScopeVariableCopier.cs" />
    105105    <Compile Include="Operator\SumAccuracy.cs" />
     106    <Compile Include="GA\TempSubScopeIDAssigner.cs" />
    106107    <Compile Include="Properties\AssemblyInfo.cs" />
    107108    <Compile Include="Plugin.cs" />
     
    111112    <Compile Include="Selectors\IMatchSelector.cs" />
    112113    <Compile Include="Selectors\MatchSelector.cs" />
    113     <Compile Include="Subsumption\ActionSetSubsumptionoperator.cs" />
     114    <Compile Include="Subsumption\ActionSetSubsumptionOperator.cs" />
     115    <Compile Include="Subsumption\CheckGASubsumptionOperator.cs" />
     116    <Compile Include="Subsumption\ExecuteGASubsumptionOperator.cs" />
    114117    <Compile Include="Subsumption\IActionSetSubsumption.cs" />
    115118    <None Include="Properties\AssemblyInfo.cs.frame" />
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionProblem.cs

    r9105 r9110  
    3333    IParameter ThetaMinimalNumberOfActionsParameter { get; }
    3434
     35    IParameter PossibleActionsConcreteClassParameter { get; }
    3536    IParameter PossibleActionsParameter { get; }
    36     IItemSet<IClassifier> PossibleActions { get; }
     37    //IItemSet<IClassifier> PossibleActions { get; }
    3738
    3839    ICoveringSolutionCreator CoveringSolutionCreator { get; }
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Operator/MatchConditionOperator.cs

    r9089 r9110  
    3131  [StorableClass]
    3232  public class MatchConditionOperator : SingleSuccessorOperator {
    33     protected ILookupParameter<BoolValue> MatchConditionParameter {
     33    public ILookupParameter<BoolValue> MatchConditionParameter {
    3434      get { return (ILookupParameter<BoolValue>)Parameters["MatchCondition"]; }
    3535    }
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Subsumption/ActionSetSubsumptionOperator.cs

    r9106 r9110  
    3131  [Item("ActionSetSubsumptionoperator", "Description missing")]
    3232  [StorableClass]
    33   public class ActionSetSubsumptionoperator : SingleSuccessorOperator, IActionSetSubsumption {
     33  public class ActionSetSubsumptionOperator : SingleSuccessorOperator, IActionSetSubsumption {
    3434
    3535    #region Parameter Properties
     
    4646      get { return (ILookupParameter<ItemArray<DoubleValue>>)Parameters["Errors"]; }
    4747    }
     48    public ILookupParameter<ItemArray<BoolValue>> HasBeenSubsumedParameter {
     49      get { return (ILookupParameter<ItemArray<BoolValue>>)Parameters["HasBeenSubsumed"]; }
     50    }
    4851    public ILookupParameter<DoubleValue> ErrorZeroParameter {
    4952      get { return (ILookupParameter<DoubleValue>)Parameters["ErrorZero"]; }
     
    5255      get { return (ILookupParameter<IntValue>)Parameters["ThetaSubsumption"]; }
    5356    }
    54     protected ScopeParameter CurrentScopeParameter {
    55       get { return (ScopeParameter)Parameters["CurrentScope"]; }
    56     }
    57     public IScope CurrentScope {
    58       get { return CurrentScopeParameter.ActualValue; }
    59     }
    60 
    61     public string HasBeenSubsumedParameterName {
    62       get { return "HasBeenSubsumed"; }
    63     }
    6457    #endregion
    6558
    6659    [StorableConstructor]
    67     protected ActionSetSubsumptionoperator(bool deserializing) : base(deserializing) { }
    68     protected ActionSetSubsumptionoperator(ActionSetSubsumptionoperator original, Cloner cloner)
     60    protected ActionSetSubsumptionOperator(bool deserializing) : base(deserializing) { }
     61    protected ActionSetSubsumptionOperator(ActionSetSubsumptionOperator original, Cloner cloner)
    6962      : base(original, cloner) {
    7063    }
    71     public ActionSetSubsumptionoperator()
     64    public ActionSetSubsumptionOperator()
    7265      : base() {
    7366      Parameters.Add(new ScopeTreeLookupParameter<IClassifier>("Classifiers"));
     
    7568      Parameters.Add(new ScopeTreeLookupParameter<IntValue>("Experiences"));
    7669      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Errors"));
     70      Parameters.Add(new ScopeTreeLookupParameter<BoolValue>("HasBeenSubsumed"));
    7771      Parameters.Add(new LookupParameter<DoubleValue>("ErrorZero"));
    7872      Parameters.Add(new LookupParameter<IntValue>("ThetaSubsumption"));
    79       Parameters.Add(new ScopeParameter("CurrentScope"));
    8073    }
    8174    public override IDeepCloneable Clone(Cloner cloner) {
    82       return new ActionSetSubsumptionoperator(this, cloner);
     75      return new ActionSetSubsumptionOperator(this, cloner);
    8376    }
    8477
    8578    public override IOperation Apply() {
    86       var subscopes = CurrentScope.SubScopes;
    8779      var classifiers = ClassifiersParameter.ActualValue;
    8880      var numerosities = NumerositiesParameter.ActualValue;
    8981      var experiences = ExperiencesParameter.ActualValue;
     82      var hasBeenSubsumed = HasBeenSubsumedParameter.ActualValue;
    9083      var errors = ErrorsParameter.ActualValue;
    91       if (subscopes.Count != classifiers.Length || subscopes.Count != numerosities.Length
    92         || subscopes.Count != experiences.Length || subscopes.Count != errors.Length) {
    93         throw new ArgumentException("The number of subscopes is not equal to the number of classifiers.");
     84      if (errors.Length != classifiers.Length || errors.Length != numerosities.Length
     85        || errors.Length != experiences.Length || errors.Length != hasBeenSubsumed.Length) {
     86        throw new ArgumentException("The number of classifiers, error, numerosity, hasBeenSubsumed and experience values is not equal.");
    9487      }
    9588
     
    108101          if (classifiers[subsumptionClassifier].IsMoreGeneral(classifiers[i])) {
    109102            numerosities[subsumptionClassifier].Value += numerosities[i].Value;
    110             AddVariableToScope(subscopes[i], new BoolValue(true));
    111           } else {
    112             AddVariableToScope(subscopes[i], new BoolValue(false));
     103            hasBeenSubsumed[i].Value = true;
    113104          }
    114         }
    115       } else {
    116         for (int i = 0; i < classifiers.Length; i++) {
    117           AddVariableToScope(subscopes[i], new BoolValue(false));
    118105        }
    119106      }
    120107
    121108      return base.Apply();
    122     }
    123 
    124     private void AddVariableToScope(IScope scope, BoolValue boolValue) {
    125       if (scope.Variables.ContainsKey(HasBeenSubsumedParameterName)) {
    126         scope.Variables[HasBeenSubsumedParameterName].Value = boolValue;
    127       } else {
    128         scope.Variables.Add(new Variable(HasBeenSubsumedParameterName, boolValue));
    129       }
    130109    }
    131110
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Subsumption/IActionSetSubsumption.cs

    r9105 r9110  
    3131    ILookupParameter<ItemArray<IntValue>> ExperiencesParameter { get; }
    3232    ILookupParameter<ItemArray<DoubleValue>> ErrorsParameter { get; }
     33    ILookupParameter<ItemArray<BoolValue>> HasBeenSubsumedParameter { get; }
    3334    ILookupParameter<DoubleValue> ErrorZeroParameter { get; }
    3435    ILookupParameter<IntValue> ThetaSubsumptionParameter { get; }
    35 
    36     string HasBeenSubsumedParameterName { get; }
    3736  }
    3837}
Note: See TracChangeset for help on using the changeset viewer.