Вы используете один и тот же начальный номер двигателя каждый раз, и поэтому вы будете получать один и тот же набор случайных чисел каждый раз.Поэтому просто запустите двигатель за пределы цикла for следующим образом:
boost::random::mt19937 engine(static_cast<unsigned int>(std::time(0)));
for(int i = 0; i < TOTAL_PARTICLES; i++)
{
randn = boost::bind(boost::random::uniform_real_distribution<>(-2.5, 2.5), engine);
cout << "Random : " << randn() << endl;
}