Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Algorithms.IteratedSentenceConstruction/HeuristicLab.Algorithms.IteratedSymbolicExpressionConstruction/3.3/Policies/UcbTunedSymbolicExpressionConstructionPolicy.cs @ 12922

Last change on this file since 12922 was 12922, checked in by gkronber, 9 years ago

#2471

  • added a simple implementation of Koza-style symbolic regression
  • added ucb tuned and estimation of variance to tabular quality functions
File size: 3.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using HeuristicLab.Common;
5using HeuristicLab.Core;
6using HeuristicLab.Data;
7using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
8using HeuristicLab.Parameters;
9using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
10using HeuristicLab.PluginInfrastructure;
11using HeuristicLab.Random;
12
13namespace HeuristicLab.Algorithms.IteratedSymbolicExpressionConstruction {
14  [StorableClass]
15  [Item("UcbTunedSymbolicExpressionConstructionPolicy", "Also uses an estimate of the variance")]
16  public class UcbTunedSymbolicExpressionConstructionPolicy : SymbolicExpressionConstructionPolicyBase {
17    public double R {
18      get { return ((IFixedValueParameter<DoubleValue>)Parameters["R"]).Value.Value; }
19      set { ((IFixedValueParameter<DoubleValue>)Parameters["R"]).Value.Value = value; }
20    }
21
22    public ITabularQualityFunction QualityFunction {
23      get {
24        return ((IValueParameter<ITabularQualityFunction>)Parameters["Quality function"]).Value;
25      }
26      set { ((IValueParameter<ITabularQualityFunction>)Parameters["Quality function"]).Value = value; }
27    }
28
29
30    protected UcbTunedSymbolicExpressionConstructionPolicy(UcbTunedSymbolicExpressionConstructionPolicy original, Cloner cloner)
31      : base(original, cloner) {
32    }
33
34    [StorableConstructor]
35    protected UcbTunedSymbolicExpressionConstructionPolicy(bool deserializing) : base(deserializing) { }
36
37
38    public UcbTunedSymbolicExpressionConstructionPolicy()
39      : base() {
40      Parameters.Add(new FixedValueParameter<DoubleValue>("R", "The weighting factor for the confidence bound (should be scaled based on the range or the fitness values)", new DoubleValue(1.0)));
41      Parameters.Add(new ValueParameter<ITabularQualityFunction>("Quality function", "The quality function to use", new TabularAvgQualityFunction()));
42    }
43
44    protected sealed override int Select(object state, IEnumerable<int> actions, IRandom random) {
45
46      // find best action
47      var bestActions = new List<int>();
48      var bestQuality = double.NegativeInfinity;
49      int totalTries = actions.Sum(a => QualityFunction.Tries(state, a));
50      foreach (var a in actions) {
51        double quality;
52        if (QualityFunction.Tries(state, a) == 0) {
53          quality = double.PositiveInfinity;
54        } else {
55          double v = QualityFunction.QVariance(state, a) + Math.Sqrt(2 * Math.Log(totalTries) / QualityFunction.Tries(state, a));
56          quality = QualityFunction.Q(state, a) + R * Math.Sqrt(Math.Log(totalTries) / QualityFunction.Tries(state, a) * v);
57        }
58        if (quality >= bestQuality) {
59          if (quality > bestQuality) {
60            bestActions.Clear();
61            bestQuality = quality;
62          }
63          bestActions.Add(a);
64        }
65      }
66      return bestActions.SampleRandom(random, 1).First();
67    }
68
69    public sealed override void Update(IEnumerable<Tuple<object, int>> stateActionSequence, double quality) {
70      foreach (var t in stateActionSequence) {
71        var state = t.Item1;
72        var action = t.Item2;
73        QualityFunction.Update(state, action, quality);
74      }
75    }
76
77    protected override object CreateState(ISymbolicExpressionTreeNode root, List<int> actions, ISymbolicExpressionTreeNode parent, int childIdx) {
78      return QualityFunction.StateFunction.CreateState(root, actions, parent, childIdx);
79    }
80
81    public override IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) {
82      return new UcbTunedSymbolicExpressionConstructionPolicy(this, cloner);
83    }
84  }
85}
Note: See TracBrowser for help on using the repository browser.