Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/16/16 00:33:20 (8 years ago)
Author:
pkimmesw
Message:

#2665 Fixed Equals issue for ExecExpandExpression, Parallized CountOdds problem random walk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Tests/Benchmark/Problem/CountOdds.cs

    r14392 r14397  
    33using System.Diagnostics;
    44using System.Linq;
     5using System.Threading.Tasks;
     6using HeuristicLab.Algorithms.PushGP.Expressions;
    57using HeuristicLab.Algorithms.PushGP.Interpreter;
    68using Microsoft.VisualStudio.TestTools.UnitTesting;
     
    2123        public void RandomWalk()
    2224        {
    23             var interpreter = new PushGPInterpreter(new Configuration
     25            var limit = 1000;
     26            var iterations = 20000;
     27            var best = double.MaxValue;
     28            Expression bestProgram = null;
     29            var lockObj = new object();
     30            var globalExecCounter = 0;
     31
     32
     33            Parallel.For(0, iterations, async i =>
    2434            {
    25                 EvalPushLimit = 10000
    26             });
     35                var interpreter = new PushGPInterpreter(new Configuration
     36                {
     37                    EvalPushLimit = 10000
     38                });
    2739
    28             var limit = 1000;
    29             var iterations = 3000;
    30             var best = double.MaxValue;
    31 
    32             for (var i = 0; i < iterations; i++)
    33             {
     40                var execCounter = 0;
    3441                var program = interpreter.CodeGenerator.RandomProgram(limit);
    35 
    3642                var results = new List<long>();
    3743
     
    4349                    }
    4450
    45                     interpreter.Interpret(program);
     51                    await interpreter.InterpretAsync(program);
    4652
    4753                    if (!interpreter.IntegerStack.IsEmpty)
     
    5157                        results.Add(Math.Min(value, 1000));
    5258                    }
     59
     60                    execCounter += interpreter.ExecCounter;
     61                    interpreter.Clear();
    5362                }
    5463
    55 
    5664                if (!results.Any())
    57                     continue;
     65                    return;
    5866
    5967                var avg = results.Average();
    6068
    61                 if (avg < best)
     69                lock (lockObj)
    6270                {
    63                     best = avg;
     71                    if (avg < best)
     72                    {
     73                        best = avg;
     74                        bestProgram = program;
     75                        globalExecCounter += execCounter;
     76                    }
    6477                }
    65 
    66                 interpreter.Clear();
    67             }
     78            });
    6879
    6980            Debug.WriteLine("Best: {0}", best);
     81            Debug.WriteLine("Program: {0}", bestProgram);
     82            Debug.WriteLine("ExecCounter: {0}", globalExecCounter);
    7083        }
    7184    }
Note: See TracChangeset for help on using the changeset viewer.