Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/18/17 01:15:25 (7 years ago)
Author:
pkimmesw
Message:

#2665 BenchmarkSuite, all examples, partially tested, VectorExpressions added

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Problem/PushProblem.cs

    r14834 r14875  
    1212  using Expressions;
    1313  using HeuristicLab.Data;
    14   using HeuristicLab.Problems.ProgramSynthesis.Push.Erc;
     14  using HeuristicLab.Problems.ProgramSynthesis.Base.Erc;
    1515
    1616  using Instances;
     
    2525  [Creatable(CreatableAttribute.Categories.GeneticProgrammingProblems, Priority = 180)]
    2626  [Item("Push Problem", "")]
    27   public class PushProblem : SingleObjectiveBasicProblem<IntegerVectorEncoding>, IProblemInstanceConsumer<Data> {
     27  public class PushProblem : SingleObjectiveBasicProblem<IntegerVectorEncoding>, IProblemInstanceConsumer<ProblemData> {
    2828    [Storable]
    2929    private readonly PushConfiguration config;
     
    3232
    3333    public const string CaseQualitiesScopeParameterName = "CaseQualities";
     34    private const string BestTrainingSolutionResultName = "Best Solution";
     35    private const string TestQualityResultName = "Test Quality";
    3436
    3537    public PushProblem() {
     
    6365    private void InitData() {
    6466      pool = new PushInterpreterPool(Environment.ProcessorCount * 2, 4096, 1024, config);
    65 
    66       //var solutionCreator = new PointsBasedPushProgramCreator(config.ErcOptions);
    67       //SolutionCreator = solutionCreator;
    68       //Encoding.SolutionCreator = solutionCreator;
    6967    }
    7068
     
    9391    private const string TopLevelPopCodeParameterName = "TopLevelPopCode";
    9492    private const string TopLevelPopCodeParameterDescription = "When TRUE, the CODE stack will be popped at the end of top level calls to the interpreter. The default is FALSE.";
    95     private const string MinRandomIntegerParameterName = "MinRandomInteger";
    96     private const string MinRandomIntegerParameterDescription = "The minimum INTEGER that will be produced as an ephemeral random INTEGER constant or from a call to INTEGER.RAND.";
    97     private const string MaxRandomIntegerParameterName = "MaxRandomInteger";
    98     private const string MaxRandomIntegerParameterDescription = "The maximum INTEGER that will be produced as an ephemeral random INTEGER constant or from a call to INTEGER.RAND.";
    99     private const string MinRandomFloatParameterName = "MinRandomFloat";
    100     private const string MinRandomFloatParameterDescription = "The minimum FLOAT that will be produced as an ephemeral random FLOAT constant or from a call to FLOAT.RAND.";
    101     private const string MaxRandomFloatParameterName = "MaxRandomFloat";
    102     private const string MaxRandomFloatParameterDescription = "The maximum FLOAT that will be produced as an ephemeral random FLOAT constant or from a call to FLOAT.RAND.";
    103     private const string NewErcNameProbabilityParameterName = "NewErcNameProbability";
    104     private const string NewErcNameProbabilityParameterDescription = "The probability that the selection of the ephemeral random NAME constant for inclusion in randomly generated code will produce a new name.";
    10593    private const string MaxPointsInRandomInstructionParameterName = "MaxPointsInRandomInstruction";
    10694    private const string MaxPointsInRandomInstructionParameterDescription = "MaxPointsInRandomInstruction";
     
    117105        config));
    118106
    119       Parameters.Add(new ValueParameter<Data>(
     107      Parameters.Add(new ValueParameter<ProblemData>(
    120108        DataParameterName,
    121109        DataParameterDescription));
    122110
    123       Parameters.Add(new FixedValueParameter<ErcOptions>(ErcOptionsParameterName, config.ErcOptions));
     111      Parameters.Add(new ValueParameter<ErcOptions>(ErcOptionsParameterName, config.ErcOptions));
    124112
    125113      Parameters.Add(new FixedValueParameter<IntValue>(
     
    188176    }
    189177
    190     public IValueParameter<Data> DataParameter
    191     {
    192       get { return (IValueParameter<Data>)Parameters[DataParameterName]; }
    193     }
    194 
    195     public Data Data
     178    public IValueParameter<ProblemData> DataParameter
     179    {
     180      get { return (IValueParameter<ProblemData>)Parameters[DataParameterName]; }
     181    }
     182
     183    public ProblemData Data
    196184    {
    197185      get { return DataParameter.Value; }
     
    356344
    357345    public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
    358       const string bestSolutionResultName = "Best Solution";
    359346      var bestQuality = Maximization ? qualities.Max() : qualities.Min();
    360347      var bestIdx = Array.IndexOf(qualities, bestQuality);
    361       var bestIndividual = individuals[bestIdx];
    362       var solution = new PushSolution(bestIndividual.IntegerVector(), bestQuality, Data, random, config, DataBounds.TrainingRange.Start, DataBounds.TrainingRange.End);
    363 
    364       if (!results.ContainsKey(bestSolutionResultName)) {
    365         results.Add(new Result(bestSolutionResultName, solution));
     348      var bestIndividual = individuals[bestIdx].IntegerVector();
     349
     350      var isIndividualBetter = AnalyzeBestTrainingSolution(bestIndividual, bestQuality, results, random);
     351
     352      if (isIndividualBetter) {
     353        AnalyzeBestTestSolution(bestIndividual, results, random);
     354      }
     355    }
     356
     357    private void AnalyzeBestTestSolution(IntegerVector bestIndividual, ResultCollection results, IRandom random) {
     358      var program = bestIndividual.ToPushProgram(config, randomPool);
     359      var trainingResult = PushEvaluator.Evaluate(program, pool, random, Data, DataBounds.TestRange.Start, DataBounds.TestRange.End);
     360
     361      if (!results.ContainsKey(TestQualityResultName)) {
     362        results.Add(new Result(TestQualityResultName, new DoubleValue(trainingResult.TotalQuality)));
    366363      } else {
    367         var currentBestQuality = ((PushSolution)results[bestSolutionResultName].Value).Quality;
    368 
    369         if (Maximization && currentBestQuality < bestQuality ||
    370            !Maximization && currentBestQuality > bestQuality) {
    371           results[bestSolutionResultName].Value = solution;
    372         }
    373       }
     364        ((DoubleValue)results[TestQualityResultName].Value).Value = trainingResult.TotalQuality;
     365      }
     366    }
     367
     368    private bool AnalyzeBestTrainingSolution(IntegerVector bestIndividual, double bestQuality, ResultCollection results, IRandom random) {
     369      var solution = new PushSolution(bestIndividual, bestQuality, Data, random, config, DataBounds.TrainingRange.Start, DataBounds.TrainingRange.End);
     370
     371      if (!results.ContainsKey(BestTrainingSolutionResultName)) {
     372        results.Add(new Result(BestTrainingSolutionResultName, solution));
     373        return true;
     374      }
     375
     376      var currentBestQuality = ((PushSolution)results[BestTrainingSolutionResultName].Value).Quality;
     377
     378      if (Maximization && currentBestQuality < bestQuality ||
     379         !Maximization && currentBestQuality > bestQuality) {
     380        results[BestTrainingSolutionResultName].Value = solution;
     381        return true;
     382      }
     383
     384      return false;
    374385    }
    375386
     
    389400    }
    390401
    391     public void Load(Data data) {
     402    public void Load(ProblemData data) {
    392403      Data = data;
    393404      BestKnownQuality = data.BestResult;
    394405      MaxPointsInProgram = data.MaxSize;
    395406      EvalPushLimit = data.EvalLimit;
     407      ErcOptions = data.ErcOptions;
    396408
    397409      config.EnabledExpressions = (IList<string>)ExpressionTable.GetExpressionsByStackTypes((StackTypes)data.EnabledDataTypes);
     
    408420
    409421      DataBounds.TrainingRange.Start = 0;
    410       DataBounds.TrainingRange.End = Data.OriginalTrainingCount;
    411       DataBounds.TestRange.Start = Data.OriginalTrainingCount;
    412       DataBounds.TestRange.End = Data.OriginalTrainingCount + Data.OriginalTestCount;
     422      DataBounds.TrainingRange.End = Data.TrainingCount;
     423      DataBounds.TestRange.Start = Data.TrainingCount;
     424      DataBounds.TestRange.End = Data.TrainingCount + Data.TestCount;
    413425    }
    414426  }
Note: See TracChangeset for help on using the changeset viewer.