kombine¶
kombine
is an ensemble sampler built for efficiently exploring multimodal distributions.
By using estimates of ensemble’s instantaneous distribution as a proposal, it achieves very
fast burnin, followed by sampling with very short autocorrelation times.
Example Usage¶
Construct an 8-D bimodal target distribution:
import numpy as np
class Target(object):
def __init__(self, ndim, nmodes):
# Generate random inverse variances for each dimension
self.ivar = 1. / np.random.rand(ndim)
# Space modes 5-sigma apart
std = np.sqrt(1/self.ivar)
self.means = 5 * std * np.arange(nmodes)[:, np.newaxis]
def __call__(self, x):
ivar, means = self.ivar, self.means
lnprobs = [-np.sum(ivar * (x - mu) ** 2)/2 for mu in means]
return np.logaddexp.reduce(lnprobs)
ndim, nmodes = 8, 2
lnprob = Target(ndim, nmodes)
Sample the target distribution:
import kombine
nwalkers = 500
sampler = kombine.Sampler(nwalkers, ndim, lnprob)
p0 = 5 * (5 * np.random.rand(nwalkers, ndim) - 1)
p, _, _ = sampler.burnin(p0)