Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/06/19 14:20:06 (5 years ago)
Author:
msemenki
Message:

#2988: New version of class structure.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2988_ModelsOfModels2/HeuristicLab.Algorithms.EMM/EMMClustering.cs

    r16760 r16899  
    2222using HeuristicLab.Core;
    2323using System.Collections.Generic;
    24 using System.Linq;
    2524
    2625namespace HeuristicLab.Algorithms.EvolvmentModelsOfModels {
     
    4039      return K;
    4140    }
    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
    6442    public static int ApplyClusteringAlgorithm(IRandom random, double[,] distances, List<int> numberCluster, int k) {
    6543      int mapSize = distances.GetLength(0);
     
    8260        }
    8361        for (int i = 0; i < mapSize; i++) {
    84           numberCluster[i] = LookCloseCentroid(centroids, mapSize, distances, i, k);
     62          numberCluster[i] = LookCloseCentroid(centroids, distances, i, k);
    8563          clusters[numberCluster[i]].Add(numberCluster[i]);
    8664        }
     
    8967        for (int i = 0; i < k; i++) {
    9068          AverageClusterDistanceCalculation(averageClusterDistance, distances, numberCluster, mapSize, i);
    91           var newCentroid = clusters[i][ChooseMinElement(averageClusterDistance)];
     69          var newCentroid = clusters[i][HelpFunctions.ChooseMinElementIndex(averageClusterDistance)];
    9270          if (newCentroid != centroids[i]) {
    9371            flag = true;
     
    10482      }
    10583    }
    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) {
    10785      double minDistanse = distances[currentNumber, centroids[0]];
    10886      int clusterNum = 0;
     
    152130      }
    153131    }
    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
    185134  }
    186135}
Note: See TracChangeset for help on using the changeset viewer.