Following another issue #370 , I have been thinking (and struggling) a little to understand how to implement local ensemble explorers. Specifically, I was thinking of Goodman & Weare’s affine invariant explorer (popularized by emcee in Python), possibly with the simple dimensional scaling proposed in https://arxiv.org/pdf/2505.02987.
My problem is how to deal with an ensemble of explorers (the so-called "walkers") at the same temperature. Originally, I thought that I could just use, as a state of each replica, the various states of the various walkers: in other words, the state would be, instead of a vector with the parameters, a matrix, with each column representing the parameter vector for each walker. This works nicely and the local exploration can be carried out fairly easily by implementing the step! function appropriately.
The real problem, however, happens during the global exploration phase and associated chain swaps. The issue here is that I do not have a single state, but several ones associated with the various walkers. Therefore, the usual trick of swapping temperatures instead of states seems to fail, as it could well happen that I want to swap only a subsets of the walkers between two chains. Do you have any idea or suggestion regarding this?
One (probably sub-optimal) solution could be to swap the entire set of walkers. My problem is how to compute the associated log_potential. Intuitively, I would take the average of the log_potentials of the various walkers for comparison: that would be equivalent to take their geometric mean in the linear space (something that sounds better than taking the simple sum of the log_potentials, equivalent to the products of the potentials). However, I have no strong theoretical reason proceed that way (I would need to check that the detailed-balance equation holds...), but again perhaps you can give some suggestions in this respect.
Following another issue #370 , I have been thinking (and struggling) a little to understand how to implement local ensemble explorers. Specifically, I was thinking of Goodman & Weare’s affine invariant explorer (popularized by emcee in Python), possibly with the simple dimensional scaling proposed in https://arxiv.org/pdf/2505.02987.
My problem is how to deal with an ensemble of explorers (the so-called "walkers") at the same temperature. Originally, I thought that I could just use, as a state of each replica, the various states of the various walkers: in other words, the state would be, instead of a vector with the parameters, a matrix, with each column representing the parameter vector for each walker. This works nicely and the local exploration can be carried out fairly easily by implementing the
step!function appropriately.The real problem, however, happens during the global exploration phase and associated chain swaps. The issue here is that I do not have a single state, but several ones associated with the various walkers. Therefore, the usual trick of swapping temperatures instead of states seems to fail, as it could well happen that I want to swap only a subsets of the walkers between two chains. Do you have any idea or suggestion regarding this?
One (probably sub-optimal) solution could be to swap the entire set of walkers. My problem is how to compute the associated log_potential. Intuitively, I would take the average of the log_potentials of the various walkers for comparison: that would be equivalent to take their geometric mean in the linear space (something that sounds better than taking the simple sum of the log_potentials, equivalent to the products of the potentials). However, I have no strong theoretical reason proceed that way (I would need to check that the detailed-balance equation holds...), but again perhaps you can give some suggestions in this respect.