In smc.py file, I see a class named SMC and a def named sample_smc. I read the references mentioned in both SMC class and sample_smc definition they use TMCMC and CATMIP algorithm respectively. I realize that both the sampling techniques are slightly different. In this regard, I have the following questions:
Sorry for the confusion I will make the docstring more clear.
TMCMC and CATMIP are both slightly different versions of the family of Sequential Monte Carlo (SMC) algorithms. There is only one SMC method implemented in PyMC3 and is based on those two algorithms, with a few additions (that is should check if they are properly cited).
To used SMC in PyMC3 you write something like pm.sample(step=pm.SMC()) as explained in the notebook you mentioned. The function sample_smc is used internally by PyMC3.
SMC works by moving from successive stages. At each stage the inverse temperature \beta is increased a little bit (starting from 0 up to 1). When \beta = 0 we have the prior distribution and when \beta =1 we have the posterior distribution. So in more general terms we are always computing samples from a tempered posterior that we can write as:
Could you elaborate your explanation about point no 7?
For example, if the acceptance rate at stagem is x, how do you use this to scale the proposal and n_steps of stage m+1? In addition, I see that there is a tuning interval is set to 10, so do you scale the proposal every tuning interval steps within each stage?
The version on master uses multiprocessing for parallelization, this take advantages of multicore processors. I just add it that feature a few days ago. I would like to also have parallelization using MPI or something like that to have parallelization over a cluster.