Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/23/17 01:11:18 (7 years ago)
Author:
pkimmesw
Message:

#2665 simplifier, push solution results view, performance improvements, small bug fixes, ui fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PushGP/HeuristicLab.PushGP/PushGP.Cli/Program.cs

    r14747 r14777  
    11using System;
    2 using System.Diagnostics;
    3 using System.Linq;
    42using System.Threading.Tasks;
    53
    64namespace HeuristicLab.Algorithms.PushGP.Cli {
    75  using HeuristicLab.Problems.ProgramSynthesis.Push.Configuration;
    8   using HeuristicLab.Problems.ProgramSynthesis.Push.Data.Pool;
    9   using HeuristicLab.Problems.ProgramSynthesis.Push.Expressions;
    10   using HeuristicLab.Problems.ProgramSynthesis.Push.Generators;
    116  using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter;
    12   using HeuristicLab.Problems.ProgramSynthesis.Push.Parser;
    13   using HeuristicLab.Random;
    147
    158  class Program {
    169    static void Main(string[] args) {
    17       //SimpleTest();
    18       //Stepwise().Wait();
    19       //PerformanceTestInterpreter();
    20       //PerformanceParallelTestInterpreter();
    21       //PerformanceTestCodeGenerator();
    22       TestRobustness();
    23       //TestPool();
    24       //TestPoolPerformance();
    25       //TestSimplifier();
     10      if (args.Length == 0) return;
    2611
    27       Console.WriteLine("\nPress any key to continue...");
    28 
    29       //if (args.Length == 0) return;
    30 
    31       //var code = args[0];
    32       //EvaluateStepwise(code).Wait();
     12      var code = args[0];
     13      EvaluateStepwise(code).Wait();
    3314
    3415      Console.ReadKey();
     
    5839      interpreter.PrintStacks();
    5940    }
    60 
    61     static void SimpleTest() {
    62       var interpreter = new PushInterpreter();
    63 
    64       interpreter.Run("5 INTEGER.DUP INTEGER.+");
    65 
    66       interpreter.PrintStacks();
    67     }
    68 
    69     static async Task Stepwise() {
    70       var interpreter = new PushInterpreter();
    71 
    72       interpreter.RunAsync("( 0 2 CODE.QUOTE ( 1 INTEGER.+ 0 3 CODE.QUOTE ( 1 INTEGER.+ INTEGER.* ) CODE.DO*RANGE INTEGER.+ ) CODE.DO*RANGE )", true).Wait();
    73 
    74       while (!interpreter.IsCompleted) {
    75         Console.Clear();
    76         interpreter.PrintStacks();
    77         interpreter.Step();
    78 
    79         var input = Console.ReadKey();
    80         if (input.Key == ConsoleKey.Escape) {
    81           break;
    82         } else if (input.Key == ConsoleKey.Spacebar) {
    83           await interpreter.ResumeAsync();
    84         }
    85       }
    86 
    87       Console.Clear();
    88       interpreter.PrintStacks();
    89     }
    90 
    91     static void PerformanceTestInterpreter() {
    92       var program = PushParser.Parse("( 5 INTEGER.DUP INTEGER.+ )");
    93 
    94       var interpreter = new PushInterpreter();
    95       var sw = new Stopwatch();
    96 
    97       sw.Start();
    98       for (var i = 0; i < 60000000; i++) {
    99         interpreter.Run(program);
    100         interpreter.Clear();
    101       }
    102       sw.Stop();
    103 
    104       Console.WriteLine(sw.Elapsed);
    105     }
    106 
    107     static void PerformanceParallelTestInterpreter() {
    108       var program = PushParser.Parse("( 5 INTEGER.DUP INTEGER.+ )");
    109 
    110       var sw = new Stopwatch();
    111       var iterations = 100;
    112       var amount = 600000;
    113       var pool = new PushInterpreterPool(iterations, 1024);
    114 
    115       sw.Start();
    116       Parallel.For(0, iterations, i => {
    117         using (var interpreter = pool.GetInstance()) {
    118 
    119           for (var j = 0; j < amount; j++) {
    120             interpreter.Run(program);
    121             interpreter.Clear();
    122           }
    123         }
    124       });
    125       sw.Stop();
    126 
    127       Console.WriteLine(sw.Elapsed);
    128     }
    129 
    130     static void PerformanceTestCodeGenerator() {
    131       var sw = new Stopwatch();
    132       var random = new FastRandom(1337);
    133 
    134       sw.Start();
    135       var expressions = CodeGenerator.RandomCode(60000000, random).ToList();
    136       sw.Stop();
    137 
    138       Console.WriteLine("Generated {0} in {1}", expressions.Count(), sw.Elapsed);
    139     }
    140 
    141     static void TestRobustness() {
    142       var sw = new Stopwatch();
    143       var parallelism = Environment.ProcessorCount;
    144       var maxProgramSizeLimit = 1024;
    145       var partitionSize = 10000;
    146       var execCounters = new int[parallelism];
    147 
    148       var config = new PushConfiguration {
    149         EvalPushLimit = 4096,
    150         IsCodeStackEnabled = false,
    151         //IsExecStackEnable = false,
    152         //IsBooleanStackEnabled = false,
    153         //IsFloatStackEnabled = false,
    154         //IsIntegerStackEnabled = false,
    155         IsNameStackEnabled = false,
    156       };
    157 
    158       var pool = new PushInterpreterPool(config);
    159 
    160       sw.Start();
    161       Parallel.For(0, parallelism, i => {
    162         var random = new MersenneTwister(1337);
    163         using (var interpreter = pool.GetInstance(random)) {
    164           for (var j = 0; j < partitionSize; j++) {
    165             var program = CodeGenerator.RandomProgram(interpreter.PushProgramPool, maxProgramSizeLimit, random, config);
    166             interpreter.Run(program);
    167 
    168             execCounters[i] += interpreter.ExecCounter;
    169             interpreter.Clear();
    170           }
    171         }
    172       });
    173       sw.Stop();
    174 
    175       Console.WriteLine("ExecCount: {0}", execCounters.Sum());
    176       Console.WriteLine("Duration: {0}", sw.Elapsed);
    177     }
    178 
    179     static void TestPool() {
    180       var pool = new PushInterpreterPool();
    181       var normal = new PushInterpreter();
    182       int id;
    183 
    184       using (var interpreter = pool.GetInstance()) {
    185         interpreter.Run("( 1 2 INTEGER.+ )");
    186 
    187         id = interpreter.GetHashCode();
    188         if (id == normal.GetHashCode()) Console.WriteLine("equal 1");
    189       }
    190 
    191       using (var interpreter = pool.GetInstance())
    192       using (var interpreter2 = pool.GetInstance()) {
    193         interpreter.Run("( 1 2 INTEGER.+ )");
    194         if (id == interpreter.GetHashCode()) Console.WriteLine("equal 2");
    195         if (id == interpreter2.GetHashCode()) Console.WriteLine("equal 3");
    196       }
    197     }
    198 
    199     static void TestPoolPerformance() {
    200       var sw = new Stopwatch();
    201       var iterations = 100000000;
    202 
    203       sw.Start();
    204       for (var i = 0; i < iterations; i++) {
    205         var interpreter = new PushInterpreter();
    206         interpreter.Clear();
    207       }
    208       sw.Stop();
    209 
    210       Console.WriteLine(sw.Elapsed);
    211 
    212       var pool = new PushInterpreterPool();
    213       sw.Restart();
    214       for (var i = 0; i < iterations; i++) {
    215         using (var interpreter = pool.GetInstance()) {
    216           interpreter.Clear();
    217         }
    218       }
    219       sw.Stop();
    220 
    221       Console.WriteLine(sw.Elapsed);
    222     }
    223 
    224     //static void TestSimplifier() {
    225     //  var interpreter = new PushInterpreter();
    226     //  var program = PushParser.Parse("( 5 INTEGER.DUP FLOAT.+ INTEGER.+ )") as PushProgram;
    227     //  var simplifier = new RandomSimplifier { Trys = 10 };
    228     //  var random = new FastRandom(1337);
    229 
    230     //  var simplerProgram = simplifier.Simplify(
    231     //    program,
    232     //    random,
    233     //    solution => {
    234     //      interpreter.Clear();
    235     //      interpreter.Run(solution);
    236     //      return interpreter.IntegerStack.Top == 10;
    237     //    });
    238 
    239     //  Console.WriteLine(simplerProgram);
    240     //}
    24141  }
    24242}
Note: See TracChangeset for help on using the changeset viewer.