- Timestamp:
- 05/06/19 14:20:06 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMClustering.cs
r16760 r16899 22 22 using HeuristicLab.Core; 23 23 using System.Collections.Generic; 24 using System.Linq;25 24 26 25 namespace HeuristicLab.Algorithms.EvolvmentModelsOfModels { … … 40 39 return K; 41 40 } 42 public static void ApplyFullConectedMapCreationAlgorithm(IRandom random, double[,] distances, List<List<int>> map, int k, int neghboorNumber = 10) { 43 int mapSize = distances.GetLength(0); 44 List<double> currentList = new List<double>(); 45 for (int i = 0; i < mapSize; i++) { 46 map.Add(new List<int>()); 47 for (int j = 0; j < mapSize; j++) { 48 currentList.Add(distances[i, j]); 49 } 50 map[i].Add(ChooseMinElement(currentList)); 51 while (map[i].Count < neghboorNumber) { 52 map[i].Add(ChooseMinElement(currentList, i, map[i])); 53 } 54 currentList.Clear(); 55 } 56 } 57 private static bool CheckNumberIsInList(int number, List<int> priviousNumber) { 58 foreach (var pNum in priviousNumber) { 59 if (number == pNum) 60 return true; 61 } 62 return false; 63 } 41 64 42 public static int ApplyClusteringAlgorithm(IRandom random, double[,] distances, List<int> numberCluster, int k) { 65 43 int mapSize = distances.GetLength(0); … … 82 60 } 83 61 for (int i = 0; i < mapSize; i++) { 84 numberCluster[i] = LookCloseCentroid(centroids, mapSize,distances, i, k);62 numberCluster[i] = LookCloseCentroid(centroids, distances, i, k); 85 63 clusters[numberCluster[i]].Add(numberCluster[i]); 86 64 } … … 89 67 for (int i = 0; i < k; i++) { 90 68 AverageClusterDistanceCalculation(averageClusterDistance, distances, numberCluster, mapSize, i); 91 var newCentroid = clusters[i][ ChooseMinElement(averageClusterDistance)];69 var newCentroid = clusters[i][HelpFunctions.ChooseMinElementIndex(averageClusterDistance)]; 92 70 if (newCentroid != centroids[i]) { 93 71 flag = true; … … 104 82 } 105 83 } 106 private static int LookCloseCentroid(List<int> centroids, int MapSize,double[,] distances, int currentNumber, int k) {84 private static int LookCloseCentroid(List<int> centroids, double[,] distances, int currentNumber, int k) { 107 85 double minDistanse = distances[currentNumber, centroids[0]]; 108 86 int clusterNum = 0; … … 152 130 } 153 131 } 154 private static int ChooseMinElement(List<double> averageClusterDistance) { 155 double minValue = averageClusterDistance[0]; 156 int minElementNumber = 0; 157 for (int i = 1; i < averageClusterDistance.Count(); i++) { 158 if (averageClusterDistance[i] < minValue) { 159 minValue = averageClusterDistance[i]; 160 minElementNumber = i; 161 } 162 } 163 return minElementNumber; 164 } 165 private static int ChooseMinElement(List<double> distances, int currentElement, List<int> previousNumbers) { 166 double minValue = 100; 167 int minElementNumber = 0; 168 int temp = 0, i = 0; 169 while (temp == 0) { 170 if ((currentElement != i) && (!CheckNumberIsInList(i, previousNumbers))) { 171 minValue = distances[i]; 172 minElementNumber = i; 173 temp = i; 174 } 175 i++; 176 } 177 for (i = 0; i < distances.Count(); i++) { 178 if ((distances[i] < minValue) && (currentElement != i) && (!CheckNumberIsInList(i, previousNumbers))) { 179 minValue = distances[i]; 180 minElementNumber = i; 181 } 182 } 183 return minElementNumber; 184 } 132 133 185 134 } 186 135 }
Note: See TracChangeset
for help on using the changeset viewer.