Hi Prof. Peixoto,
My question is about convergence of Merge-split Markov chain Monte Carlo (in this paper: DOI: 10.1103/PhysRevE.102.012305).

You check for convergence/mixing of chains by diagnosing with Be (effective number of blocks), autocorrelation function, and ESS (effective sample size).
But is there a way to check for convergence in graph-tool?
I am using graph-tool version 2.59 on ubuntu 22.04.

I am inferring modular structure of networks following the cookbook.
I use mcmc_equilibrate() and pass a callback function to collect all partitions b’s and their description lengths dl’s.
I presume I can collect Be in the same callback function and plot them.
But how do I compute the autocorrelation function and ESS?

Also, should I run multiple chains in parallel–like you show in the paper?

In the graph-tool codes I found the following functions/classes:

MulticanonicalState(); has its equilibration function multicanonical_equilibrate().

TemperingState(); meant to be used to mcmc_equilibrate().

The wikipedia page says that using TemperingState has two advantages over running a single MCMC sampler: lower computational cost than running parallel MCMC samplers, and faster convergence to global optimum.

Would these functions/classes help in better convergence/mixing times? If so, how do I use them with mcmc_equilibrate() and diagnose convergence (by plotting Be, etc.)?

mcmc_equilibrate() can return history of sweeps, will it help in diagnosing convergence?

I cannot give you a full lecture on MCMC diagnosis here. There’s no fully automatized way to do it with graph-tool, you have to follow the steps as described in the paper using your own implementation.