# [✓]Create a network of 300 nodes that can be clustered into 100-node chunks

GROUPS:
 I have a rather basic problem where I am asked to create a network of 300 nodes that can be clustered into 100-node chunks. Essentially, the nodes have many connections within a chunk and comparatively few between different100-node chunks. For example, if I made the connections with a chunk occur with 100% probability and between chunks occur 0% I get the following: edges = {}; For[l = 1, l <= 3 , l++, h = 100*l; For[n = 100 (l - 1) + 1, n < 100*l + 1, n++, For[m = n + 1, m <= 300, m++, If[m <= h, If[RandomReal[{0, 1}] > 0.0, AppendTo[edges, n <-> m]], If[RandomReal[{0, 1}] > 0.99, AppendTo[edges, n <-> m]]]]]] which is expected and gives a corresponding MatrixPlot of the Adjacency Matrix as:Which is also all well and good. Now, something very strange seems to be going on when I try to make the connections between the 100-node chunks be non zero. For example, if I made the probability be 1%, the folowing is obtained:This looks ok, but it becomes very evident that there is a problem when one looks at the corresponding Matrix Plot of the Adjacency Matrix Evidently, there is a very big problem somewhere. I did try to check this in a bit more detail and it seems that everything is working properly with the Matrix Plot. It seems that there is somewhere a problem with my code - but where? The code, in my opinion, seems rather simple and straightforward. I am really confused with what the issue is and could use assistance, it doesn't seem possible that Mathematica would have a problem with something so basic.
 Szabolcs Horvát 3 Votes The model you are trying to implement is called the stochastic block model. IGraph/M has it built in. g = IGStochasticBlockModelGame[{{1, 0.01, 0.01}, {0.01, 1, 0.01}, {0.01, 0.01, 1}}, {100, 100, 100}]  IGAdjacencyMatrixPlot[g]  As for why you don't see this adjacency matrix: look at VertexList[g] for your graph and my graph. Both have vertices named as 1, 2, ..., 300, but yours has them in some random order, which the adjacency matrix follows. Remember that the vertex name is not the same thing as the vertex index. The name can be anything. The index goes from one to the vertex count, and corresponds to the position of the vertex in the VertexList. The rows/columns of the AdjacencyMatrix follow the same order. You could use Graph[Range[300], edges] to control the vertex ordering. Or you could reorder vertices in an existing graph with IGReoderVertices from IGraph/M Finally, if you're new to Mathematica, I strongly suggest you forget that For even exists in the language. If you use it, you'll certainly end up doing things in a convoluted, un-Mathematica-like way, which will slow down your learning process. See https://mathematica.stackexchange.com/questions/134609/why-should-i-avoid-the-for-loop-in-mathematica/12