If you use a few real copies with the different materials, you could then animate them withe array modifiers set to ‘object’ and use an empty for each to control position and spacing of the duplicates. But that would limit you to the total number of materials to your set of real objects, and not completely random colors.
If you were to use a texture color band to make the different shades and map to Global, then maybe you could get the objects to look like they are different colors and individual.
If you wanna use Duplies, you can assign a UV texture with the wished colors to the parent mesh and use the new “From Dupli” option im Map Input Panel of the parents material.
The Duplis will then take the colors of this texture.