Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.GrammaticalOptimization/Main/Program.cs @ 12098

Last change on this file since 12098 was 12098, checked in by aballeit, 9 years ago

#2283: implemented MCTS

File size: 3.5 KB
Line 
1using System;
2using System.Diagnostics;
3using System.Globalization;
4using HeuristicLab.Algorithms.Bandits.BanditPolicies;
5using HeuristicLab.Algorithms.GrammaticalOptimization;
6using HeuristicLab.Algorithms.MonteCarloTreeSearch;
7using HeuristicLab.Algorithms.MonteCarloTreeSearch.Simulation;
8using HeuristicLab.Problems.GrammaticalOptimization;
9
10// NOTES: gkronber
11// TODO: feature extraction for full symbolic expressions and experiment for all benchmark problems
12// TODO: why does GaussianThompsonSampling work so well with MCTS for the artificial ant problem?
13// TODO: research thompson sampling for max bandit?
14// TODO: verify TA implementation using example from the original paper     
15// TODO: implement thompson sampling for gaussian mixture models
16// TODO: gleichzeitige modellierung von transformierter zielvariable (y, 1/y, log(y), exp(y), sqrt(y), ...)
17// TODO: vergleich bei complete-randomly möglichst kurze sÀtze generieren vs. einfach zufÀllig alternativen wÀhlen
18// TODO: reward discounting (fÌr verÀnderliche reward distributions Ìber zeit). speziellen unit-test dafÌr erstellen
19// TODO: constant optimization
20
21
22namespace Main
23{
24    class Program
25    {
26        static void Main(string[] args)
27        {
28            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
29
30            RunDemo();
31        }
32
33
34        private static void RunDemo()
35        {
36
37
38            int maxIterations = 100000;
39            int iterations = 0;
40
41            var globalStatistics = new SentenceSetStatistics();
42            var random = new Random();
43
44            //var problem = new SymbolicRegressionPoly10Problem();
45            //var problem = new SantaFeAntProblem();             
46            var problem = new RoyalPairProblem();
47            //var problem = new EvenParityProblem();
48            //var alg = new SequentialSearch(problem, 23, random, 0,
49            // new HeuristicLab.Algorithms.Bandits.GrammarPolicies.GenericGrammarPolicy(problem, new UCB1TunedPolicy()));
50            var alg = new MonteCarloTreeSearch(problem, 23, random, new UCB1Policy(), new RandomSimulation(problem, random, 23));
51
52
53            alg.FoundNewBestSolution += (sentence, quality) =>
54            {
55                //Console.WriteLine("{0}", globalStatistics);
56            };
57
58            alg.SolutionEvaluated += (sentence, quality) =>
59            {
60                iterations++;
61                globalStatistics.AddSentence(sentence, quality);
62
63                // comment this if you don't want to see solver statistics
64                if (iterations % 100 == 0)
65                {
66                    if (iterations % 10000 == 0) Console.Clear();
67                    Console.SetCursorPosition(0, 0);
68                    alg.PrintStats();
69                }
70
71                // uncomment this if you want to collect statistics of the generated sentences
72                // if (iterations % 1000 == 0) {
73                //   Console.WriteLine("{0}", globalStatistics);
74                // }
75            };
76
77            var sw = new Stopwatch();
78            sw.Start();
79            alg.Run(maxIterations);
80            sw.Stop();
81
82            Console.Clear();
83            alg.PrintStats();
84            Console.WriteLine(globalStatistics);
85            Console.WriteLine("{0:F2} sec {1,10:F1} sols/sec {2,10:F1} ns/sol",
86              sw.Elapsed.TotalSeconds,
87              maxIterations / (double)sw.Elapsed.TotalSeconds,
88              (double)sw.ElapsedMilliseconds * 1000 / maxIterations);
89        }
90    }
91}
Note: See TracBrowser for help on using the repository browser.