// Find community information in each module public static void FindCommunity(double Alfa, List <List <int> > Modules, double[,] WeightMatrix, List <ComponentStruct> VerticeMatrix, int[,] RelativeMotionMatrix, out List <List <List <int> > > Communities, out List <double> Modularity, out List <double[, ]> SubGraphs, out List <List <ComponentStruct> > SubVerticeMs, out List <int[, ]> SubRelativeMs) { int NumOfModules = Modules.Count; Communities = new List <List <List <int> > >(); Modularity = new List <double>(); SubGraphs = new List <double[, ]>(); SubVerticeMs = new List <List <ComponentStruct> >();;; SubRelativeMs = new List <int[, ]>(); double[,] WMIntraModules; int NumOfIteration = 5; double CrossOverRatio = 0.4; double MutationRatio = 0.05; List <int> NumOfPopulation = new List <int>(); List <int> NumOfGeneration = new List <int>(); List <List <int> > SubModules; double[] T_BestFitness; List <int> sublist = new List <int>(); MPCCD.MPCCDSubGraph(Modules, WeightMatrix, VerticeMatrix, RelativeMotionMatrix, out WMIntraModules, out SubGraphs, out SubVerticeMs, out SubRelativeMs); int x = 0; for (int i = 0; i < NumOfModules; i++) { NumOfPopulation.Add((int)(Modules[x].Count / 2) + 1); NumOfGeneration.Add(5 * Modules[x].Count); x++; } // find the maximum modularity in each module for (int i = 0; i < NumOfModules; i++) { GAModuleDiv.FindBestSolution_Multiple(SubGraphs[i], NumOfPopulation[i], NumOfGeneration[i], CrossOverRatio, MutationRatio, out SubModules, out T_BestFitness); double XX = T_BestFitness.Max(); if (T_BestFitness.Max() > Alfa) { Communities.Add(SubModules.ToList()); Modularity.Add(T_BestFitness.Max()); } else { SubModules.Clear(); for (int j = 0; j < Modules[i].Count; j++) { sublist.Add(j + 1); } SubModules.Add(sublist.ToList()); Communities.Add(SubModules); Modularity.Add(T_BestFitness.Max()); sublist.Clear(); } } }