Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/27/15 16:55:07 (9 years ago)
Author:
gkronber
Message:

#2471

  • added a simple implementation of Koza-style symbolic regression
  • added ucb tuned and estimation of variance to tabular quality functions
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Algorithms.IteratedSentenceConstruction/HeuristicLab.Algorithms.IteratedSymbolicExpressionConstruction/3.3/QualityFunctions/TabularAvgQualityFunction.cs

    r12909 r12922  
    99  [StorableClass]
    1010  [Item("TabularAvgQualityFunction", "")]
    11   internal class TabularAvgQualityFunction : ParameterizedNamedItem, ITabularQualityFunction {
    12     [Storable]
    13     private readonly Dictionary<object, Dictionary<int, double>> q = new Dictionary<object, Dictionary<int, double>>();
    14     [Storable]
    15     private readonly Dictionary<object, Dictionary<int, int>> tries = new Dictionary<object, Dictionary<int, int>>();
     11  internal class TabularAvgQualityFunction : TabularQualityFunctionBase {
    1612
    17     public IStateFunction StateFunction {
    18       get {
    19         return ((IValueParameter<IStateFunction>)Parameters["State function"]).Value;
    20       }
    21       set { ((IValueParameter<IStateFunction>)Parameters["State function"]).Value = value; }
    22     }
    23 
    24     public TabularAvgQualityFunction() {
    25       Parameters.Add(new ValueParameter<IStateFunction>("State function", "The function that is used to map partial trees to states", new DefaultStateFunction()));
    26     }
    27 
    28     public double Q(object state, int action) {
    29       // an action that has never been tried has q == infinity
    30       Dictionary<int, double> stateActionQualities;
    31       if (!q.TryGetValue(state, out stateActionQualities)) return double.PositiveInfinity;
    32       double quality;
    33       if (!stateActionQualities.TryGetValue(action, out quality)) return double.PositiveInfinity;
    34       return quality;
    35     }
    36 
    37     public void Update(object state, int action, double observedQuality) {
    38       Dictionary<int, int> stateActionTries;
    39       if (!tries.TryGetValue(state, out stateActionTries)) {
    40         stateActionTries = new Dictionary<int, int>();
    41         tries.Add(state, stateActionTries);
    42       }
    43       Dictionary<int, double> stateActionQualities = null;
    44       if (!q.TryGetValue(state, out stateActionQualities)) {
    45         stateActionQualities = new Dictionary<int, double>();
    46         q.Add(state, stateActionQualities);
    47       }
    48       int t;
    49       if (!stateActionTries.TryGetValue(action, out t)) {
    50         t = 0;
    51         stateActionTries.Add(action, t + 1);
    52         stateActionQualities.Add(action, observedQuality);
    53       } else {
    54         stateActionTries[action] = t + 1;
    55         var delta = observedQuality - stateActionQualities[action];
    56         stateActionQualities[action] = stateActionQualities[action] + (1.0 / (t + 1)) * delta; // incremental calculation of average
    57       }
    58     }
    59 
    60     public int Tries(object state, int action) {
    61       Dictionary<int, int> stateTries;
    62       if (!tries.TryGetValue(state, out stateTries)) return 0;
    63       int stateActionTries;
    64       if (!stateTries.TryGetValue(action, out stateActionTries)) return 0;
    65       return stateActionTries;
     13    public TabularAvgQualityFunction()
     14      : base() {
    6615    }
    6716
     
    7120    protected TabularAvgQualityFunction(TabularAvgQualityFunction original, Cloner cloner)
    7221      : base(original, cloner) {
    73       this.q = new Dictionary<object, Dictionary<int, double>>(original.q);
    74       this.tries = new Dictionary<object, Dictionary<int, int>>(original.tries);
    7522    }
    7623    public override IDeepCloneable Clone(Cloner cloner) {
     
    7926    #endregion
    8027
    81     public void InitializeState() {
    82       ClearState();
    83     }
    84 
    85     public void ClearState() {
    86       q.Clear();
    87       tries.Clear();
     28    protected override double CalculateNewQ(object state, int action, double observedQuality) {
     29      var delta = observedQuality - Q(state, action);
     30      return Q(state, action) + (1.0 / Tries(state, action)) * delta; // iterative calculation of mean
    8831    }
    8932  }
Note: See TracChangeset for help on using the changeset viewer.