コード例 #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}");
            }
        }
コード例 #2
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)));
        }
コード例 #3
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);
        }