using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HeuristicLab.Common; using HeuristicLab.Random; namespace HeuristicLab.Problems.Instances.DataAnalysis { public class Feynman3 : FeynmanDescriptor{ public override string Name { get { return "Feynman I.6.2b f = exp(-((theta-theta1)/sigma)^2/2)/(sqrt(2*pi)*sigma)"; } } protected override string TargetVariable { get { return "f"; } } protected override string[] VariableNames { get { return new string[] { "sigma", "theta", "theta1", "f"}; } } protected override string[] AllowedInputVariables { get { return new string[] { "sigma", "theta", "theta1" }; } } public int Seed { get; private set; } public Feynman3() : this((int)System.DateTime.Now.Ticks) { } public Feynman3(int seed) { Seed = seed; } protected override List> GenerateValues() { var rand = new MersenneTwister((uint)Seed); var data = new List>(); var sigma = ValueGenerator.GenerateUniformDistributedValues(rand.Next(), TestPartitionEnd, 1, 3).ToList(); var theta = ValueGenerator.GenerateUniformDistributedValues(rand.Next(), TestPartitionEnd, 1, 3).ToList(); var theta1 = ValueGenerator.GenerateUniformDistributedValues(rand.Next(), TestPartitionEnd, 1, 3).ToList(); var f = new List(); data.Add(sigma); data.Add(theta); data.Add(theta1); data.Add(f); for (var i = 0; i < theta.Count; i++) { var res = Math.Exp(-(Math.Pow(theta[i] - theta1[i], 2) / sigma[i]) / 2) / (Math.Sqrt(2 * Math.PI) * sigma[i]); f.Add(res); } return data; } } }