From 57b63669a31c8e6b1b79954d5093713e79028afa Mon Sep 17 00:00:00 2001 From: Michael Stachowicz <15214467+ethiril@users.noreply.github.com> Date: Thu, 8 Dec 2022 15:41:41 +0000 Subject: [PATCH 1/2] Create GPTGeneratedFitness.cs --- .../SNP_Evolution/GPTGeneratedFitness.cs | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs diff --git a/SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs b/SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs new file mode 100644 index 0000000..c943903 --- /dev/null +++ b/SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs @@ -0,0 +1,59 @@ +private static float FitnessFunction(int index, Func, List, float> fitnessAlgorithm) +{ + DNA dna = ga.Population[index]; + List output = SNPRun(dna.Genes); + float fitness = fitnessAlgorithm(output, expectedSet); + + if (fitness >= 0.985 && fitness <= 1) + { + Console.WriteLine("Testing the best fitness for repeated success."); + if (TestBestNetwork(ga.BestGenes, ga.BestFitness)) + { + Console.WriteLine("Fitness over 0.985, stopping . . ."); + active = false; + } + } + + return fitness; +} + +private static float CalculateF1Score(List output, List expectedSet) +{ + if (output.Count == 0) + { + return 0; + } + + int truePositives = expectedSet.Intersect(output).Count(); + int falsePositives = output.Count - truePositives; + + float sensitivity = truePositives / (float)expectedSet.Count; + float precision = truePositives / (truePositives + falsePositives); + + return 2 * ((precision * sensitivity) / (precision + sensitivity)); +} + +private static float CalculateJaccardIndex(List output, List expectedSet) +{ + if (output.Count == 0) + { + return 0; + } + + return (float)expectedSet.Intersect(output).Count() / expectedSet.Union(output).Count(); +} + +private static float CalculateMatthewsCorrelationCoefficient(List output, List expectedSet) +{ + if (output.Count == 0) + { + return 0; + } + + int truePositives = expectedSet.Intersect(output).Count(); + int falsePositives = output.Count - truePositives; + int falseNegatives = expectedSet.Count - truePositives; + + return (truePositives * truePositives - falsePositives * falseNegatives) / + (float)(Math.Sqrt((truePositives + falsePositives) * (truePositives + falseNegatives) * (falsePositives + truePositives) * (falsePositives + falseNegatives))); +} From 87c0a10afa7088461d0464ed665d959cb948652d Mon Sep 17 00:00:00 2001 From: Michael Stachowicz <15214467+ethiril@users.noreply.github.com> Date: Tue, 18 Apr 2023 16:17:45 +0100 Subject: [PATCH 2/2] Update GPTGeneratedFitness.cs --- SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs b/SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs index c943903..82c8d4f 100644 --- a/SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs +++ b/SNP_Evolution/SNP_Evolution/GPTGeneratedFitness.cs @@ -4,7 +4,7 @@ private static float FitnessFunction(int index, Func, List, float List output = SNPRun(dna.Genes); float fitness = fitnessAlgorithm(output, expectedSet); - if (fitness >= 0.985 && fitness <= 1) + if (fitness >= 0.985f && fitness <= 1f) { Console.WriteLine("Testing the best fitness for repeated success."); if (TestBestNetwork(ga.BestGenes, ga.BestFitness)) @@ -27,10 +27,10 @@ private static float CalculateF1Score(List output, List expectedSet) int truePositives = expectedSet.Intersect(output).Count(); int falsePositives = output.Count - truePositives; - float sensitivity = truePositives / (float)expectedSet.Count; - float precision = truePositives / (truePositives + falsePositives); + float sensitivity = (float)truePositives / expectedSet.Count; + float precision = (float)truePositives / (truePositives + falsePositives); - return 2 * ((precision * sensitivity) / (precision + sensitivity)); + return 2f * ((precision * sensitivity) / (precision + sensitivity)); } private static float CalculateJaccardIndex(List output, List expectedSet) @@ -54,6 +54,8 @@ private static float CalculateMatthewsCorrelationCoefficient(List output, L int falsePositives = output.Count - truePositives; int falseNegatives = expectedSet.Count - truePositives; - return (truePositives * truePositives - falsePositives * falseNegatives) / - (float)(Math.Sqrt((truePositives + falsePositives) * (truePositives + falseNegatives) * (falsePositives + truePositives) * (falsePositives + falseNegatives))); + float numerator = (truePositives * truePositives) - (falsePositives * falseNegatives); + float denominator = (float)Math.Sqrt((truePositives + falsePositives) * (truePositives + falseNegatives) * (falsePositives + truePositives) * (falsePositives + falseNegatives)); + + return numerator / denominator; }