public float ComputeFitness2(Note[] individual, AForge.Math.Metrics.ISimilarity similarity) { float weighted = 0; for (int i = 0; i < metrics.Length; i++) { var x = metrics[i].Generate(individual); List<double> arr1 = new List<double>(individual.Length); List<double> arr2 = new List<double>(individual.Length); foreach (var k in target_metrics[i].Keys) { if (!x.ContainsKey(k)) { arr1.Add(0); arr2.Add(target_metrics[i][k]); continue; } arr1.Add(x[k]); arr2.Add(target_metrics[i][k]); } weighted += (float)similarity.GetSimilarityScore(arr1.ToArray(), arr2.ToArray()); } return weighted / (float)metrics.Length; }