/// <summary> /// Creates a new <see cref="EvolutionaryDistanceCalculator{TProgram,TOutput}" /> with the given arguments. /// </summary> /// <param name="similarityMeasure">The similarity measure to guide the transformation search process.</param> /// <param name="primitiveSet">The primitives used for the crossover operator.</param> /// <param name="crossovers">The crossover operators to generate programs during the search.</param> /// <param name="mutations">The mutation operators to generate programs during the search.</param> public EvolutionaryDistanceCalculator( ISimilarityMeasure <TProgram> similarityMeasure, PrimitiveSet <TProgram> primitiveSet, IEnumerable <ICrossoverOperator <TProgram> > crossovers, IEnumerable <IMutationOperator <TProgram> > mutations) { this._similarityMeasure = similarityMeasure; this._primitiveSet = primitiveSet; this._crossovers = crossovers; this._mutations = mutations; }
/// <summary> /// Creates a new <see cref="MathExpressionConverter" /> according to the given primitive set. /// </summary> /// <param name="primitives">The set containing the primitives that the converter can read from the expressions.</param> public MathExpressionConverter(PrimitiveSet <MathProgram> primitives) { var allPrimitives = new List <MathProgram>(primitives.Functions); allPrimitives.AddRange(primitives.Terminals); // stores info on all primitive labels foreach (var primitive in allPrimitives) { this._primitiveLabels.Add(primitive.Label, primitive); } // stores regex patterns for functions var rndLabel = DateTime.Now.ToString("yyyyMMMMddHHmmssfff"); var dummy = new Variable(rndLabel); foreach (var function in primitives.Functions.ToList()) { var pattern = GetFunctionPattern(function, dummy); this._functionPatterns.Add(pattern, function); } }
/// <summary> /// Adds the functions and terminals in the given <see cref="PrimitiveSet{TProgram}" /> to this set. /// </summary> /// <param name="primitiveSet">The set containing the functions and terminals to be added to this set.</param> public void Add(PrimitiveSet <TProgram> primitiveSet) { this._terminals.AddRange(primitiveSet.Terminals); this._functions.AddRange(primitiveSet.Functions); }