public static double AverageCliqueMembers(CliqueCollection cc) { double sum = 0; for (int i = 0; i < cc.CliqueOverlap.Rows; i++) sum += cc.CliqueOverlap[i, i]; return (double)sum / (double)cc.CliqueOverlap.Rows; }
public static double AverageCliqueSize(CliqueCollection cc) { int sum = 0; for (int i = 0; i < cc.Count; ++i) sum += cc[i].Size; return (double)sum / (double)cc.Count; }
public static List<clique> convertClique(CliqueCollection list) { List<clique> temp = new List<clique>(list.Count); for (int i = 0; i < list.Count; i++) { temp.Add(new clique(list[i])); } return temp; }
static public List <clique> convertClique(CliqueCollection list) { List <clique> temp = new List <clique>(list.Count); for (int i = 0; i < list.Count; i++) { temp.Add(new clique(list[i])); } return(temp); }
public static Pair<double, double> COC(CliqueCollection cc) { double simple_sum = 0, complex_sum = 0; Matrix CBCO = cc.CliqueByCliqueOverlap; Vector v = CBCO as Vector; if (CBCO.Cols == 1) return new Pair<double, double>(0.0, 0.0); double denominator = (double)(((double)CBCO.Cols * ((double)CBCO.Cols - 1)) / 2.0); if (v != null) { Vector w = new Vector(v.Size); w.Clear(); for (int i = 0; i < v.Size; ++i) { for (int j = i + 1; j < v.Size; ++j) w[j] += cc.GetCliqueByCliqueOverlap(i, j); } for (int j = 1; j < v.Size; ++j) { double sum = w[j]; simple_sum += (sum / v[j]); if (v[j] > 1) complex_sum += (sum / (v[j] - 1)); } } else { for (int j = 1; j < CBCO.Rows; ++j) { double sum = 0.0; for (int i = 0; i < j; ++i) sum += CBCO[i, j]; simple_sum += sum / CBCO[j, j]; if (CBCO[j, j] > 1) complex_sum += sum / (CBCO[j, j] - 1); } } return new Pair<double, double>(simple_sum / denominator, complex_sum / denominator); }
public static double CMOI(CliqueCollection cc) { Matrix O = cc.CliqueOverlap; double total_sum = 0; for (int i = 0; i < O.Rows; i++) for (int j = i + 1; j < O.Rows; j++) { if (O[j, j] != 0) total_sum += (double)(O[i, j]) / O[j, j]; } double coi = (double)(O.Rows * O.Rows - O.Rows); if (coi != 0) coi = (total_sum * 2.0) / coi; return coi; }
public static double NPOL(CliqueCollection cc, Matrix data) { int total_sum = 0; for (int i = 0; i < cc.Count; i++) { total_sum += cc[i].Size * (data.Rows - cc[i].Size); } double first_term = 4.0 * total_sum; double divisor = (double)(cc.Count * data.Rows * data.Rows); return first_term / divisor; }
public void ComputeNP(Matrix WCA, Matrix CCA, int node, int n, List <List <int> > Blocks, CliqueCollection _cliques, List <int[]> communities, int comNum, bool isComm, bool isClique, Matrix Cohesion, List <double> tempattribute, bool file) { if (!isClique && !isComm) { for (int col = 0; col < Blocks.Count; col++) { if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col])) { List <int> rcalist = new List <int>(); List <int> rccalist = new List <int>(); List <int> rccalist2 = new List <int>(); for (int row = 0; row < n; row++) { if (Blocks[col].Contains(row) && row != node) { rcalist.Add(row); } } Clique rcaclique = new Clique(rcalist, n); rcaclique.ComputeCohesion(Cohesion); double rcawsum = rcaclique.ComputeWsum(tempattribute, file); for (int row = 0; row < n; row++) { if (!Blocks[col].Contains(row) || row == node) { rccalist.Add(row); } if (!Blocks[col].Contains(row)) { rccalist2.Add(row); } } Clique rccaclique = new Clique(rccalist, n); rccaclique.ComputeCohesion(Cohesion); double rccawsum = rccaclique.ComputeWsum(tempattribute, file); Clique rccaclique2 = new Clique(rccalist2, n); rccaclique2.ComputeCohesion(Cohesion); double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file); if (rcawsum < rccawsum) { np += 1; } else if (rcawsum == rccawsum) { np += 0.5; } if (rcawsum < rccawsum2) { npabs += 1; } else if (rcawsum == rccawsum2) { npabs += 0.5; } } } }//if block else if (isComm) { for (int col = 0; col < comNum; col++) { if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col])) { List <int> rcalist = new List <int>(); List <int> rccalist = new List <int>(); List <int> rccalist2 = new List <int>(); // recreate the WCA matrix without the members of the node for (int row = 0; row < n; row++) { if ((communities[col][row] != 0) && (row != node)) { rcalist.Add(row); } } Clique rcaclique = new Clique(rcalist, n); rcaclique.ComputeCohesion(Cohesion); double rcawsum = rcaclique.ComputeWsum(tempattribute, file); // recreate the CCA matrix with the members that were removed // from the WCA matrix previously for (int row = 0; row < n; row++) { if ((communities[col][row] == 0) || (row == node)) { rccalist.Add(row); } if (communities[col][row] == 0) { rccalist2.Add(row); } } Clique rccaclique = new Clique(rccalist, n); rccaclique.ComputeCohesion(Cohesion); double rccawsum = rccaclique.ComputeWsum(tempattribute, file); Clique rccaclique2 = new Clique(rccalist2, n); rccaclique2.ComputeCohesion(Cohesion); double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file); if (rcawsum < rccawsum) { np += 1; } else if (rcawsum == rccawsum) { np += 0.5; } if (rcawsum < rccawsum2) { npabs += 1; } else if (rcawsum == rccawsum2) { npabs += 0.5; } } } } else //if use clique { for (int col = 0; col < _cliques.Count; col++) { if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col])) { List <int> rcalist = new List <int>(); List <int> rccalist = new List <int>(); List <int> rccalist2 = new List <int>(); for (int row = 0; row < n; row++) { if (_cliques[col].Contains(row) && row != node) { rcalist.Add(row); } } Clique rcaclique = new Clique(rcalist, n); rcaclique.ComputeCohesion(Cohesion); double rcawsum = rcaclique.ComputeWsum(tempattribute, file); for (int row = 0; row < n; row++) { if (!_cliques[col].Contains(row) || row == node) { rccalist.Add(row); } if (!_cliques[col].Contains(row)) { rccalist.Add(row); } } Clique rccaclique = new Clique(rccalist, n); rccaclique.ComputeCohesion(Cohesion); double rccawsum = rccaclique.ComputeWsum(tempattribute, file); Clique rccaclique2 = new Clique(rccalist2, n); rccaclique2.ComputeCohesion(Cohesion); double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file); if (rcawsum < rccawsum) { np += 1; } else if (rcawsum == rccawsum) { np += 0.5; } if (rcawsum < rccawsum2) { npabs += 1; } else if (rcawsum == rccawsum2) { npabs += 0.5; } } } } }
public void ComputeNP(Matrix WCA, Matrix CCA, int node, int n, List<List<int>> Blocks, CliqueCollection _cliques, List<int[]> communities, int comNum, bool isComm, bool isClique, Matrix Cohesion, List<double> tempattribute, bool file) { if (!isClique && !isComm) { for (int col = 0; col < Blocks.Count; col++) { if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col])) { List<int> rcalist = new List<int>(); List<int> rccalist = new List<int>(); List<int> rccalist2 = new List<int>(); for (int row = 0; row < n; row++) if (Blocks[col].Contains(row) && row != node) rcalist.Add(row); Clique rcaclique = new Clique(rcalist, n); rcaclique.ComputeCohesion(Cohesion); double rcawsum = rcaclique.ComputeWsum(tempattribute, file); for (int row = 0; row < n; row++) { if (!Blocks[col].Contains(row) || row == node) rccalist.Add(row); if (!Blocks[col].Contains(row)) rccalist2.Add(row); } Clique rccaclique = new Clique(rccalist, n); rccaclique.ComputeCohesion(Cohesion); double rccawsum = rccaclique.ComputeWsum(tempattribute, file); Clique rccaclique2 = new Clique(rccalist2, n); rccaclique2.ComputeCohesion(Cohesion); double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file); if (rcawsum < rccawsum) np += 1; else if (rcawsum == rccawsum) np += 0.5; if (rcawsum < rccawsum2) npabs += 1; else if (rcawsum == rccawsum2) npabs += 0.5; } } }//if block else if (isComm) { for (int col = 0; col < comNum; col++) { if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col])) { List<int> rcalist = new List<int>(); List<int> rccalist = new List<int>(); List<int> rccalist2 = new List<int>(); // recreate the WCA matrix without the members of the node for (int row = 0; row < n; row++) if ((communities[col][row] != 0) && (row != node)) rcalist.Add(row); Clique rcaclique = new Clique(rcalist, n); rcaclique.ComputeCohesion(Cohesion); double rcawsum = rcaclique.ComputeWsum(tempattribute, file); // recreate the CCA matrix with the members that were removed // from the WCA matrix previously for (int row = 0; row < n; row++) { if ((communities[col][row] == 0) || (row == node)) rccalist.Add(row); if (communities[col][row] == 0) rccalist2.Add(row); } Clique rccaclique = new Clique(rccalist, n); rccaclique.ComputeCohesion(Cohesion); double rccawsum = rccaclique.ComputeWsum(tempattribute, file); Clique rccaclique2 = new Clique(rccalist2, n); rccaclique2.ComputeCohesion(Cohesion); double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file); if (rcawsum < rccawsum) np += 1; else if (rcawsum == rccawsum) np += 0.5; if (rcawsum < rccawsum2) npabs += 1; else if (rcawsum == rccawsum2) npabs += 0.5; } } } else //if use clique { for (int col = 0; col < _cliques.Count; col++) { if (WCA[node, col] != 0 && (WCA[n + 1, col] >= CCA[n + 1, col])) { List<int> rcalist = new List<int>(); List<int> rccalist = new List<int>(); List<int> rccalist2 = new List<int>(); for (int row = 0; row < n; row++) if (_cliques[col].Contains(row) && row != node) rcalist.Add(row); Clique rcaclique = new Clique(rcalist, n); rcaclique.ComputeCohesion(Cohesion); double rcawsum = rcaclique.ComputeWsum(tempattribute, file); for (int row = 0; row < n; row++) { if (!_cliques[col].Contains(row) || row == node) rccalist.Add(row); if (!_cliques[col].Contains(row)) rccalist.Add(row); } Clique rccaclique = new Clique(rccalist, n); rccaclique.ComputeCohesion(Cohesion); double rccawsum = rccaclique.ComputeWsum(tempattribute, file); Clique rccaclique2 = new Clique(rccalist2, n); rccaclique2.ComputeCohesion(Cohesion); double rccawsum2 = rccaclique2.ComputeWsum(tempattribute, file); if (rcawsum < rccawsum) np += 1; else if (rcawsum == rccawsum) np += 0.5; if (rcawsum < rccawsum2) npabs += 1; else if (rcawsum == rccawsum2) npabs += 0.5; } } } }