private void RecalcCentroids_GenomeList(Species <T>[] speciesArr, bool[] updateBits) { Parallel.ForEach( Enumerable.Range(0, speciesArr.Length).Where(i => updateBits[i]), _parallelOptions, () => new List <ConnectionGenes <T> >(), (speciesIdx, loopState, connGenesList) => { var species = speciesArr[speciesIdx]; SpeciationUtils.ExtractConnectionGenes(connGenesList, species.GenomeList); species.Centroid = _distanceMetric.CalculateCentroid(connGenesList); return(connGenesList); }, (connGenesList) => connGenesList.Clear()); }
private void RecalcCentroids_GenomeById(Species <T>[] speciesArr, bool[] updateBits) { Parallel.ForEach( Enumerable.Range(0, speciesArr.Length).Where(i => updateBits[i]), _parallelOptions, () => new List <ConnectionGenes <T> >(), (speciesIdx, loopState, connGenesList) => { var species = speciesArr[speciesIdx]; // Extract the ConnectionGenes<T> object from each genome in the GenomeById dictionary. SpeciationUtils.ExtractConnectionGenes(connGenesList, species.GenomeById); // Calculate the centroid for the extracted connection genes. species.Centroid = _distanceMetric.CalculateCentroid(connGenesList); return(connGenesList); }, (connGenesList) => connGenesList.Clear()); }
private void RecalcCentroids_GenomeList( Species <T>[] speciesArr, bool[] updateBits) { // Create a temporary, reusable, working list. var tmpConnGenes = new List <ConnectionGenes <T> >(); for (int i = 0; i < speciesArr.Length; i++) { if (updateBits[i]) { var species = speciesArr[i]; // Extract the ConnectionGenes<T> object from each genome in GenomeList. SpeciationUtils.ExtractConnectionGenes(tmpConnGenes, species.GenomeList); // Calculate the centroid for the extracted connection genes. species.Centroid = _distanceMetric.CalculateCentroid(tmpConnGenes); } } tmpConnGenes.Clear(); }