Ticket #2377: SolutionSimilarityCalculator.cs.patch
File SolutionSimilarityCalculator.cs.patch, 2.1 KB (added by ascheibe, 9 years ago) |
---|
-
sources/HeuristicLab.Optimization.Operators/3.3/SolutionSimilarityCalculator.cs
21 21 22 22 using System; 23 23 using System.Linq; 24 using System.Threading.Tasks; 24 25 using HeuristicLab.Common; 25 26 using HeuristicLab.Core; 26 27 using HeuristicLab.Data; … … 63 64 throw new ArgumentException("Cannot calculate similarity because one of the provided crowds or both are empty."); 64 65 65 66 var similarityMatrix = new double[leftIndividuals.Count][]; 66 for (int i = 0; i < leftIndividuals.Count; i++){67 Parallel.For(0, leftIndividuals.Count, (i) => { 67 68 similarityMatrix[i] = new double[rightIndividuals.Count]; 68 69 for (int j = 0; j < rightIndividuals.Count; j++) { 69 70 similarityMatrix[i][j] = CalculateSolutionSimilarity(leftIndividuals[i], rightIndividuals[j]); 70 71 } 71 } 72 }); 72 73 73 74 return similarityMatrix; 74 75 } … … 86 87 for (int i = 0; i < individuals.Count; i++) similarityMatrix[i] = new double[individuals.Count]; 87 88 88 89 if (IsCommutative) { 89 for (int i = 0; i < individuals.Count; i++){90 Parallel.For(0, individuals.Count, (i) => { 90 91 for (int j = i; j < individuals.Count; j++) { 91 92 similarityMatrix[i][j] = similarityMatrix[j][i] = CalculateSolutionSimilarity(individuals[i], individuals[j]); 92 93 } 93 } 94 }); 94 95 } else { 95 for (int i = 0; i < individuals.Count; i++){96 Parallel.For(0, individuals.Count, (i) => { 96 97 for (int j = i; j < individuals.Count; j++) { 97 98 similarityMatrix[i][j] = CalculateSolutionSimilarity(individuals[i], individuals[j]); 98 99 if (i == j) continue; 99 100 similarityMatrix[j][i] = CalculateSolutionSimilarity(individuals[j], individuals[i]); 100 101 } 101 } 102 }); 102 103 } 103 104 104 105 return similarityMatrix;