using HeuristicLab.Problems.DataAnalysis; using System; using System.Linq; namespace HeuristicLab.Algorithms.DataAnalysis.FastFunctionExtraction { internal struct ProductBaseFunction : IBasisFunction { public IBasisFunction B1 { get; set; } public IBasisFunction B2 { get; set; } public int Complexity => 1 + B1.Complexity + B2.Complexity; public bool IsDenominator { get; set; } public ProductBaseFunction(IBasisFunction b1, IBasisFunction b2, bool isDenominator) { B1 = b1 ?? throw new ArgumentNullException(nameof(b1)); B2 = b2 ?? throw new ArgumentNullException(nameof(b2)); IsDenominator = isDenominator; } public double[] Evaluate(IRegressionProblemData data) { return B1.Evaluate(data).Zip(B2.Evaluate(data), (a, b) => a * b).ToArray(); } public override string ToString() { return $"{B1} * {B2}"; } public IBasisFunction DeepCopy() { return new ProductBaseFunction(B1, B2, IsDenominator); } } }