using System; using System.Collections.Generic; namespace HeuristicLab.Problems.ProgramSynthesis.Push.Problem { using System.Linq; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Encodings.IntegerVectorEncoding; using HeuristicLab.Optimization; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HeuristicLab.Problems.ProgramSynthesis.Push.Creator; using HeuristicLab.Problems.ProgramSynthesis.Push.Expressions; [Item("PushEncoding", "Describes a push program encoding.")] [StorableClass] public sealed class PushEncoding : Encoding { [StorableConstructor] public PushEncoding(bool deserializing) : base(deserializing) { } public PushEncoding(PushEncoding origin, Cloner cloner) : base(origin, cloner) { } public override IDeepCloneable Clone(Cloner cloner) { return new PushEncoding(this, cloner); } public override void ConfigureOperators(IEnumerable operators) { throw new NotImplementedException(); } } public static class IndividualExtensionMethods { public static PushProgram PushProgram(this Individual individual, IReadOnlyList enabledExpressions) { return individual.IntegerVector().MapToPushProgram(enabledExpressions); } public static PushProgram MapToPushProgram(this IntegerVector vector, IReadOnlyList enabledExpressions) { //var expressions = vector // .Select(i => ExpressionTable.GetExpression(enabledExpressions[i])) // .ToArray(); var expressions = new Expression[vector.Length]; for (var i = 0; i < vector.Length; i++) { expressions[i] = ExpressionTable.GetExpression(enabledExpressions[vector[i]]); } return new Expressions.PushProgram(expressions); } } }