By default, Blender's particles don't have any spatial extension. This is fine as long as particles are rendered as halos. But if you give them a size and an appearance as object, it becomes obvious that they're able to go through each other.
What tricks can be pulled off to fix that problem? For example, if you want to fill an area with houses, toss some leaves onto the floor, or just want charged balls to stick to each other.
I'm aware that a precise solution of this problem is very challenging -- but already some kind of approximation would do in most cases.