예제 #1
0
 public SymmetricBinaryMatrix(SymmetricBinaryMatrix m)
     : this(m, m._cutoff, CliqueExtractionType.Upper)
 {
 }
        private static Matrix SimulateLiberalStageOne(SymmetricBinaryMatrix G, Matrix C, Matrix R, Vector P, Matrix D, Matrix JC, double br)
        {
            Matrix DC = D * C;
            Matrix JCC = JC * C;

            int n = C.Rows;

            if (R == null)
            {
                R = new Matrix(n);
                for (int i = 0; i < R.Rows; ++i)
                    for (int j = 0; j < R.Cols; ++j)
                        if (G.GetValue(i, j) || P[i] == 1 || P[j] == 1)
                            R[i, j] = 1;
                        else
                            R[i, j] = 0;
            }

            Matrix CR = R * C;

            Vector AO = new Vector(n);
            for (int i = 0; i < AO.Size; ++i)
            {
                if (Algorithms.MaxValue<double>(CR.GetRowEnumerator(i)) <= 0.0)
                    AO[i] = 0;
                else
                    AO[i] = br * (CR.GetRowSum(i) - C[i, i] );
            }

            Matrix F = Matrix.Ones(n, n);
            F.SetDiagonalFromVector(Vector.Zero(n));

            Matrix PAN = (F - R) * C;

            Matrix EA = Matrix.Zero(n, n);

            UpdateEAMatrix(AO, DC, EA);
            UpdateEAMatrix(AO, PAN, EA);
            UpdateEAMatrix(AO, JCC, EA);

            Matrix BEA = new Matrix(n);
            for (int i = 0; i < n; ++i)
                for (int j = 0; j < n; ++j)
                    BEA[i, j] = EA[i, j] < double.Epsilon ? 0 : 1;
            Matrix BEAT = BEA.GetTranspose();

            return (BEA + BEAT) / 2;
        }
예제 #3
0
 public SymmetricBinaryMatrix(SymmetricBinaryMatrix m) : this(m, m._cutoff, CliqueExtractionType.Upper)
 {
 }