예제 #1
0
        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;
        }
예제 #2
0
        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;
        }
예제 #3
0
파일: clique.cs 프로젝트: Hydrologist/msnp
 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;
 }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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;
        }
예제 #7
0
        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;
        }
예제 #8
0
        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;
                        }
                    }
                }
            }
        }
예제 #9
0
파일: NPNode.cs 프로젝트: Hydrologist/msnp
        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;

                    }
                }
            }
        }