Changeset 14777 for branches/PushGP/HeuristicLab.PushGP/PushGP.Cli
- Timestamp:
- 03/23/17 01:11:18 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PushGP/HeuristicLab.PushGP/PushGP.Cli/Program.cs
r14747 r14777 1 1 using System; 2 using System.Diagnostics;3 using System.Linq;4 2 using System.Threading.Tasks; 5 3 6 4 namespace HeuristicLab.Algorithms.PushGP.Cli { 7 5 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;11 6 using HeuristicLab.Problems.ProgramSynthesis.Push.Interpreter; 12 using HeuristicLab.Problems.ProgramSynthesis.Push.Parser;13 using HeuristicLab.Random;14 7 15 8 class Program { 16 9 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; 26 11 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(); 33 14 34 15 Console.ReadKey(); … … 58 39 interpreter.PrintStacks(); 59 40 } 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 //}241 41 } 242 42 }
Note: See TracChangeset
for help on using the changeset viewer.