public void Calculate()
        {
            double iclusteringCoefficient = 0;
            int    iEdgeCountForFullness = 0, iNeighbourCount = 0;

            for (int i = 0; i < container.Size; ++i)
            {
                iNeighbourCount = container.GetVertexDegree(i);
                if (iNeighbourCount != 0)
                {
                    iEdgeCountForFullness  = (iNeighbourCount == 1) ? 1 : iNeighbourCount * (iNeighbourCount - 1) / 2;
                    iclusteringCoefficient = (edgesBetweenNeighbours[i]) / iEdgeCountForFullness;
                    CoefficientsPerVertex.Add(i, Math.Round(iclusteringCoefficient, 3));
                }
                else
                {
                    CoefficientsPerVertex.Add(i, 0);
                }
            }

            for (int i = 0; i < container.Size; ++i)
            {
                double result = CoefficientsPerVertex[(uint)i];
                if (CoefficientsDistribution.Keys.Contains(result))
                {
                    CoefficientsDistribution[CoefficientsPerVertex[i]]++;
                }
                else
                {
                    CoefficientsDistribution[CoefficientsPerVertex[i]] = 1;
                }
            }
        }
Exemple #2
0
        private Double[] CalculateProbabilities()
        {
            Double[] result = new Double[container.Size];

            Double graphDegree = (Double)container.GetVertexDegreeSum();

            if (graphDegree != 0)
            {
                for (Int32 i = 0; i < result.Length; ++i)
                {
                    result[i] = (Double)container.GetVertexDegree(i) / graphDegree;
                }
            }
            else
            {
                for (Int32 i = 0; i < result.Length; ++i)
                {
                    result[i] = 1.0 / result.Length;
                }
            }

            return(result);
        }
        private int get_vertex_to_connect(int current_vertex, List <double> fitnesses_, DistributedRandom distributed_random_)
        {
            double sum = 0;

            for (int i = 0; i < current_vertex; ++i)
            {
                sum += (container.GetVertexDegree(i) * fitnesses_[i]);
            }

            double probabilty = distributed_random_.get_probability() * sum;

            sum = 0;
            for (int i = 0; i < current_vertex; ++i)
            {
                sum += (container.GetVertexDegree(i) * fitnesses_[i]);
                if (probabilty <= sum)
                {
                    return(i);
                }
            }

            return(-1);
        }