예제 #1
0
 private void GenerateFullGraph(Int32[] nodes)
 {
     for (UInt32 i = 0; i < nodes.Length - 1; ++i)
     {
         for (UInt32 j = i + 1; j < nodes.Length; ++j)
         {
             container.AddConnection(nodes[i], nodes[j]);
         }
     }
 }
예제 #2
0
        private void GenerateInitialNetwork(int vertexCount, int numberOfEdges)
        {
            List <EdgesAddedOrRemoved> initialStep = (GenerationSteps != null) ? new List <EdgesAddedOrRemoved>() : null;

            for (int i = 0; i < vertexCount; ++i)
            {
                for (int k = 1; k <= numberOfEdges / 2; ++k)
                {
                    int j = (i + k) < vertexCount ? (i + k) : (i + k) % vertexCount;
                    container.AddConnection(i, j);
                    initialStep.Add(new EdgesAddedOrRemoved(i, j, true));
                }
            }
            GenerationSteps.Add(initialStep);
        }
예제 #3
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_);
                }
            }
        }
예제 #4
0
 private void GenerateInitialGraph(double probability)
 {
     for (int i = 0; i < container.Size; ++i)
     {
         for (int j = i + 1; j < container.Size; ++j)
         {
             if (rand.NextDouble() < probability)
             {
                 initialcontainer.AddConnection(i, j);
             }
         }
     }
 }
예제 #5
0
        private void GenerateInitialGraph(Double probability)
        {
            List <EdgesAddedOrRemoved> initialStep = (GenerationSteps != null) ? new List <EdgesAddedOrRemoved>() : null;

            for (Int32 i = 0; i < container.Size; ++i)
            {
                for (Int32 j = i + 1; j < container.Size; ++j)
                {
                    if (rand.NextDouble() < probability)
                    {
                        container.AddConnection(i, j);
                        if (initialStep != null)
                        {
                            initialStep.Add(new EdgesAddedOrRemoved(i, j, true));
                        }
                    }
                }
            }
            if (GenerationSteps != null)
            {
                GenerationSteps.Add(initialStep);
            }
        }
예제 #6
0
 private void FillValuesByProbability(double p)
 {
     for (int i = 0; i < container.Size; ++i)
     {
         for (int j = i + 1; j < container.Size; ++j)
         {
             double a = rand.NextDouble();
             if (a < p)
             {
                 container.AddConnection(i, j);
             }
         }
     }
 }
예제 #7
0
        private void FillValuesByProbability(double p)
        {
            int edgesAdded               = 0;
            int numberOfVertices         = container.Size;
            List <EdgesAddedOrRemoved> l = new List <EdgesAddedOrRemoved>();

            if (GenerationSteps != null)
            {
                GenerationSteps.Add(null);
            }

            for (int i = 0; i < container.Size; ++i)
            {
                for (int j = i + 1; j < container.Size; ++j)
                {
                    if (rand.NextDouble() < p)
                    {
                        container.AddConnection(i, j);
                        if (GenerationSteps != null)
                        {
                            l.Add(new EdgesAddedOrRemoved(i, j, true));
                            if (edgesAdded >= ((numberOfVertices - 1) / p))
                            {
                                GenerationSteps.Add(l);
                                l          = new List <EdgesAddedOrRemoved>();
                                edgesAdded = 0;
                            }
                            edgesAdded++;
                        }
                    }
                }
            }

            if (GenerationSteps != null)
            {
                if (l.Count != 0)
                {
                    GenerationSteps.Add(l);
                }
            }
        }