예제 #1
0
        private static void SimulateReplications(int n, int r)
        {
            Console.WriteLine($"Disruption\tIterations");

            for (double perc = 0; perc < 0.5; perc += 0.05)
            {
                var reached    = -1;
                int iterations = 1;
                int disabled   = (int)(perc * n);

                for (; iterations < n; iterations++)
                {
                    var graph = new RandomRegularGraphBuilder().Build(n, r);

                    var sourceVertex = 50; // Any
                    var item         = Guid.NewGuid().GetHashCode();
                    graph.Vertices[sourceVertex].AddItem(item);

                    graph.DisableRandomVertices(disabled, sourceVertex);
                    graph.Propagate(iterations);

                    reached = graph.Vertices.Count(n => n.Items.Contains(item));
                    if (reached == n || iterations > n)
                    {
                        break;
                    }
                }

                Console.WriteLine($"{perc.ToString("0.00")}\t{iterations}");
            }
        }
        private static Graph BuildRRG(int n, int k)
        {
            var b = new RandomRegularGraphBuilder();
            var g = b.Build(n, k);

            return(g);
        }
예제 #3
0
 private static void MeasureDiameters()
 {
     for (int r = 3; r <= 9; r += 2)
     {
         Console.WriteLine($"N\tDiameter\tVariance\t[r={r}]");
         for (int n = 10; n <= 1e3; n += 99)
         {
             var list = new List <double>();
             for (int i = 0; i < 100; i++)
             {
                 var graph = new RandomRegularGraphBuilder().Build(n, r);
                 list.Add(graph.GetDiameter());
             }
             Console.WriteLine($"{n}\t{list.Average().ToString("0.00")}\t{list.StdDev().ToString("0.00")}");
         }
     }
 }
예제 #4
0
        public void GraphItem_ZeroDisruption_PropagationTest()
        {
            var n = (int)1e3;
            var k = 4;

            var sourceVertex = 50;
            var iterations   = (int)Math.Ceiling(Math.Log(n, k - 1)) + 1;

            var graph = new RandomRegularGraphBuilder().Build(n, k);

            var item = Guid.NewGuid().GetHashCode();

            graph.Vertices[sourceVertex].AddItem(item);

            graph.Propagate(iterations);

            Assert.AreEqual(graph.Vertices.Length, graph.Vertices.Count(n => n.Items.Contains(item)));
        }
예제 #5
0
        public void GraphItem_MajorDisruption_PropagationTest()
        {
            var n = (int)1e3;
            var k = 4;

            var sourceVertex = 50;
            var disabled     = (int)(0.50 * n);
            var iterations   = (int)Math.Ceiling(Math.Log(n, k - 1)) + 1;

            var graph = new RandomRegularGraphBuilder().Build(n, k);

            var item = Guid.NewGuid().GetHashCode();

            graph.Vertices[sourceVertex].AddItem(item);

            graph.DisableRandomVertices(disabled, sourceVertex);
            graph.Propagate(iterations);

            Assert.IsTrue(graph.Vertices.Count(n => n.Items.Contains(item)) < 500);
        }