I don't really know how to do this, but perhaps I can make a couple of suggestions:
Of course, you can't simply generate random atomic positions, because you need them to be arranged in icosahedra. If the icosahedra are independent and not bonded together, you could generate random positions and orientations for the centres of the icosahedra and then use those to generate the atoms themselves. You'd have to come up with some way of preventing them from impinging on each other - or simply throw out any that do impinge. The density of icosahedra you generate will have to be calculated from the density of the material you're trying to model, and I suspect the higher the density, the more difficult it will be to find rooms for everything without impingement.
More likely, however, your icosahedra are in a giant glassy network and share vertices or edges? In that case, I think I'd start with a seed icosahedron, randomly pick a shared edge, randomly pick a suitable orientation for the adjoined icosahedron and generate its atoms. Choose a new edge from any of the existing icosahedra and repeat the process. If the combination of edge and orientation produces an icosahedron which impinges on the existing network, throw it out and start again.
...the more I think about this, the more I realise that it's going to be very difficult! Unless you can come up with a better way of generating the positions, you might be better off with a program which is designed for drawing glasses, rather than crystals.
Best,
Philip