-
Notifications
You must be signed in to change notification settings - Fork 87
Description
A recent issue #554 suggested switching to 64 bit integers to specify MCMC chain lengths. This reminded me of something (only tangentially related) that has been bugging me for a while: are chain lengths really the best way for users to specify how long the algorithm should run for? To me there appear to be two alternatives:
- Specify run length in wall time
- Specify run length in ESS of a chosen parameter
The advantage of (1) is that we can allocate precisely the amount of time we have available for the calculation. The drawbacks are that (a) the actual amount of calculation performed will be system-dependent, meaning that exact reproducibility is no longer possible, and (b) the wall time on its own says nothing about the quality of results the algorithm will produce.
The advantages of (2) are precisely the drawbacks of (1): requiring that the ESS of a (set of?) well-chosen parameter(s) exceeds some threshold goes some way toward ensuring we only stop when we have some useful results. It also maintains reproducibility. The only drawback is that we can't say precisely how long the algorithm will run for.
In contrast, the only advantage of the existing approach of stopping after a particular number of iterations seems to be reproducibility, which it shares with the ESS approach. Neither the ESS approach nor the current approach allow users to say exactly how long a run will take, but I think this should be a fairly low priority given that (a) beast 2 allows chain resumption following interruption and that (b) there is little point stopping if your ESS doesn't meet some threshold.
I therefore think it would be better to use an ESS-based stopping condition (or at least offer one). What do you guys think?