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}"); } }
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))); }
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); }