private static ProcessorGraph GraphCreate(int layerCount, int minNodesPerLayer, int maxNodesPerLayer) { var result = new ProcessorGraph(); result.AddVertex(Helper.CreateProcessor()); var random = new Random(); for (var i = 0; i < layerCount; i++) { var tailVertices = result.Vertices .Where(v => !result.OutEdges(v).Any()) .ToList(); var processorsOnLayer = random.Next(minNodesPerLayer, maxNodesPerLayer); for (var j = 0; j < processorsOnLayer; j++) { var processor = Helper.CreateProcessor(); result.AddVertex(processor); var processorConnectedWithVerticesCount = random.Next(1, tailVertices.Count); for (var k = 0; k < processorConnectedWithVerticesCount; k++) { var processorConnectedWithVertexIndex = random.Next(0, tailVertices.Count); result.AddEdge(new Edge <IProcessor>(tailVertices[processorConnectedWithVertexIndex], processor)); } } } return(result); }