Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/07/15 09:21:46 (9 years ago)
Author:
gkronber
Message:

#2283: refactoring and bug fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.GrammaticalOptimization/AlternativesSampler.cs

    r11730 r11732  
    1616    private readonly Random random;
    1717    private readonly IProblem problem;
     18    private readonly IPolicy policy;
    1819
    19     public AlternativesSampler(IProblem problem, int maxLen) {
     20    public AlternativesSampler(IProblem problem, IPolicy policy, int maxLen) {
    2021      this.problem = problem;
    2122      this.maxLen = maxLen;
    22       this.random = new Random(31415);
     23      this.random = new Random();
     24      this.policy = policy;
    2325    }
    2426
     
    2830      for (int i = 0; i < maxIterations; i++) {
    2931        var sentence = SampleSentence(problem.Grammar).ToString();
    30         var quality = problem.Evaluate(sentence) / problem.GetBestKnownQuality(maxLen);
     32        var quality = problem.Evaluate(sentence) / problem.BestKnownQuality(maxLen);
    3133        DistributeReward(quality);
    3234
     
    4143
    4244
    43     private Dictionary<char, IPolicy> ntPolicy;
     45    private Dictionary<char, IPolicyActionInfo[]> ntActionInfos;
    4446    private List<Tuple<char, int>> updateChain;
    4547
    4648    private void InitPolicies(IGrammar grammar) {
    47       this.ntPolicy = new Dictionary<char, IPolicy>();
     49      this.ntActionInfos = new Dictionary<char, IPolicyActionInfo[]>();
    4850      this.updateChain = new List<Tuple<char, int>>();
    4951      foreach (var nt in grammar.NonTerminalSymbols) {
    50         ntPolicy.Add(nt, new EpsGreedyPolicy(random, grammar.GetAlternatives(nt).Count(), 0.1));
     52        ntActionInfos.Add(nt, grammar.GetAlternatives(nt).Select(_ => policy.CreateActionInfo()).ToArray());
    5153      }
    5254    }
     
    7779        } else {
    7880          // all alts are allowed => select using bandit policy
    79           var selectedAltIdx = ntPolicy[nt].SelectAction();
     81          var selectedAltIdx = policy.SelectAction(random, ntActionInfos[nt]);
    8082          selectedAlt = alts.ElementAt(selectedAltIdx);
    8183          updateChain.Add(Tuple.Create(nt, selectedAltIdx));
     
    9597        var nt = e.Item1;
    9698        var action = e.Item2;
    97         ntPolicy[nt].UpdateReward(action, reward);
     99        ntActionInfos[nt][action].UpdateReward(reward);
    98100      }
    99101    }
Note: See TracChangeset for help on using the changeset viewer.