- #1
shetland
- 17
- 0
Hello, I am finishing a computational project, one that is using monte carlo to simulate a lennard-jones fluid.
Very straightforward project - the only twist is one that asks to come up with an algorithm/method that moves all particles at once, rather than the trad method of one at a time, do acceptance/reject check, and so on.
I believe there are two components - to learn something about the computational efficiency with either method (move one at a time is generally more efficient), but also something of detailed balance.
In any case, my thought is to select say (and this number is arbitrary - for sake of argument) at random, twenty particles out of the ensemble - do the displacement - store in an array these new positions, hand off to the energy routine to do a total energy of the new system, compare with original energy, and voila - pretty much the same as when you consider one particle at a time.
I think it was inferred in class that you would move all the particles at once - this really seems contradictory and not necessary to me - at least in the context of evolving the system via mc steps.
I also don't see the detailed balancing is violated any more than one particle is moved - yeah, the probability of finding the same state is much less compared to moving one particle and the probability of selecting that same particle and moving back to the same state...
Having to store these positions in an array would seem a penalty in itself (ok, you do so when doing one particle - but in this case the memory/cycles go up by a factor of n, n + 1, being the number of particles we choose at once, and the one to store the actual particle number selection). But again, maybe that's trivial...
To me, its still a sort of markov chain - maybe I am overlooking something obvious...
Ok, just wondering if I am barking up the right tree/path!
This maybe way out of whack to ask this question(s) I commute to class, prof is typically unavailable - and thus generally I am doing this in total isolation.
Very straightforward project - the only twist is one that asks to come up with an algorithm/method that moves all particles at once, rather than the trad method of one at a time, do acceptance/reject check, and so on.
I believe there are two components - to learn something about the computational efficiency with either method (move one at a time is generally more efficient), but also something of detailed balance.
In any case, my thought is to select say (and this number is arbitrary - for sake of argument) at random, twenty particles out of the ensemble - do the displacement - store in an array these new positions, hand off to the energy routine to do a total energy of the new system, compare with original energy, and voila - pretty much the same as when you consider one particle at a time.
I think it was inferred in class that you would move all the particles at once - this really seems contradictory and not necessary to me - at least in the context of evolving the system via mc steps.
I also don't see the detailed balancing is violated any more than one particle is moved - yeah, the probability of finding the same state is much less compared to moving one particle and the probability of selecting that same particle and moving back to the same state...
Having to store these positions in an array would seem a penalty in itself (ok, you do so when doing one particle - but in this case the memory/cycles go up by a factor of n, n + 1, being the number of particles we choose at once, and the one to store the actual particle number selection). But again, maybe that's trivial...
To me, its still a sort of markov chain - maybe I am overlooking something obvious...
Ok, just wondering if I am barking up the right tree/path!
This maybe way out of whack to ask this question(s) I commute to class, prof is typically unavailable - and thus generally I am doing this in total isolation.