static std::mt19937 rng = initialize_twister(1000) ; You are seeding RNG with same number each run. The prime property of all pseudorandom number generators is that they will give you same sequence for same seed.
Seed it with something unpredictable. For example you can use current time as you do not really need high enthropy numbers.