I’m trying to understand the tune() procedure of the older SMC implementation (the random walk version). I understand the motivation behind scaling the step size of each chain according to previous acceptance rates, but cannot make sense of the actual scaling formula. Is there a probabilistic motivation, or is this just a heuristic formula? My intuition is that this is the first iteration to solve some implicit equation, but I might be completely wrong.
I don’t expect a detailed explanation, but I would appreciate if somebody points me in the right direction (papers, books, theorems, etc.).
The code in question:
ave_scaling = np.exp(np.log(self.scalings.mean()) + (self.acc_per_chain.mean() - 0.234))
self.scalings = 0.5 * (ave_scaling + np.exp(np.log(self.scalings) + (self.acc_per_chain - 0.234)))