예제 #1
0
        private void Generate(Int32 numberOfVertices, Int32 edges, Double probability, String function)
        {
            int               initial_vertex_count_      = 1;
            int               additional_verteses_count_ = numberOfVertices;
            int               vertexcount_    = additional_verteses_count_ + initial_vertex_count_;
            int               edgespervertex_ = edges;
            double            vertex_addition_probability_ = probability;
            DistributedRandom distributed_random_          = new DistributedRandom(function);
            List <double>     fitnesses_ = new List <double>(vertexcount_);

            for (int current_initial_vertex = 0; current_initial_vertex < initial_vertex_count_; ++current_initial_vertex)
            {
                fitnesses_.Add(distributed_random_.get_distributed_probability());
                container.AddVertex();
                if (current_initial_vertex % 2 == 1)
                {
                    container.AddConnection(current_initial_vertex, current_initial_vertex - 1);
                }
                if (current_initial_vertex == initial_vertex_count_ - 1 && current_initial_vertex != 0 && current_initial_vertex % 2 == 0)
                {
                    container.AddConnection(current_initial_vertex, current_initial_vertex - 1);
                }
            }

            int current_vertex = initial_vertex_count_;

            while (current_vertex != vertexcount_)
            {
                double prob = distributed_random_.get_probability();
                if (prob <= vertex_addition_probability_)
                {
                    fitnesses_.Add(distributed_random_.get_distributed_probability());
                    container.AddVertex();
                    for (int j = 0; j < Math.Min(current_vertex, edgespervertex_); ++j)
                    {
                        int vertex_to_connect = get_vertex_to_connect(current_vertex, fitnesses_, distributed_random_);
                        Debug.Assert(vertex_to_connect >= 0, "internal error");
                        container.AddConnection(current_vertex, vertex_to_connect);
                    }
                    current_vertex++;
                }
                else
                {
                    add_internal_links(1, fitnesses_, distributed_random_);
                }
            }
        }
예제 #2
0
 private void Generate(Int32 stepCount, Double probability, Int32 edges)
 {
     GenerateInitialGraph(probability);
     while (stepCount > 0)
     {
         Double[] probabilyArray = CalculateProbabilities();
         container.AddVertex();
         RefreshNeighbourships(MakeGenerationStep(probabilyArray, edges));
         --stepCount;
     }
 }
예제 #3
0
        private void Generate(uint stepCount, double probability, uint edges)
        {
            GenerateInitialGraph(probability);
            container = initialcontainer;

            while (stepCount > 0)
            {
                double[] probabilyArray = container.CountProbabilities();
                container.AddVertex();
                container.RefreshNeighbourships(MakeGenerationStep(probabilyArray, edges));
                --stepCount;
            }
        }