namespace HeuristicLab.Problems.ProgramSynthesis.Push.Problem.BenchmarkSuite { using System.Linq; using Common; using Configuration; using Core; using Encodings.IntegerVectorEncoding; using Expressions; using HeuristicLab.BenchmarkSuite.Problems; using Instances; using Persistence.Default.CompositeSerializers.Storable; using Stack; [StorableClass] [Creatable(CreatableAttribute.Categories.GeneticProgrammingProblems, Priority = 180)] [Item("Push BenchmarkSuite Problem", "")] public class PushBenchmarkSuiteProblem : PushProblem, IProblemInstanceConsumer { public PushBenchmarkSuiteProblem() : base(new PushBenchmarkSuiteEvaluator()) { Parameters.Add(PushEvaluator.DataParameter); Parameters.Add(PushEvaluator.DataBoundsParameter); } [StorableConstructor] protected PushBenchmarkSuiteProblem(bool deserializing) : base(deserializing) { } protected PushBenchmarkSuiteProblem(PushProblem original, Cloner cloner) : base(original, cloner) { } public override IDeepCloneable Clone(Cloner cloner) { return new PushBenchmarkSuiteProblem(this, cloner); } public new PushBenchmarkSuiteEvaluator PushEvaluator { get { return (PushBenchmarkSuiteEvaluator)base.PushEvaluator; } } public void Load(ProblemData data) { PushEvaluator.LoadData(data); BestKnownQuality = data.BestResult; MaxPointsInProgram = data.MaxSize; MinPointsInProgram = data.MaxSize; EvalPushLimit = data.EvalLimit; ErcOptions = data.ErcOptions; config.SetEnabledStacks((StackTypes)data.EnabledDataTypes); // update enabled stack types foreach (var stackType in ExpressionTable.StackTypeToNamesTable.Keys) { var enable = config.EnabledExpressions.Intersect(ExpressionTable.StackTypeToNamesTable[stackType]).Any(); config.SetStack(stackType, enable); } Encoding.Bounds[0, 0] = 0; Encoding.Bounds[0, 1] = config.EnabledExpressions.Count; Encoding.Length = config.MaxPointsInProgram; } protected override PushSolution CreatePushSolution( IntegerVector vector, double bestQuality, IRandom random, IReadOnlyPushConfiguration config, IPushEvaluator evaluator) { return new PushBenchmarkSuiteSolution(vector, bestQuality, random, config, (PushBenchmarkSuiteEvaluator)PushEvaluator.Clone()); } } }