首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与池并行运行emcee时的相同步骤

与池并行运行emcee时的相同步骤
EN

Stack Overflow用户
提问于 2020-03-16 17:14:13
回答 1查看 385关注 0票数 2

我正在使用emcee在Python中运行MCMC进程。我的python代码是一个不同软件的包装器。emcee步行器对此软件的输入参数空间进行采样。软件读取一个文本文件作为其输入。我的代码使用emcee链的每个步骤生成这个文本文件。为了加快采样速度,我希望并行运行多个评估对数似然率的进程。但是,这些进程中的每个进程都需要写入不同的输入文本文件,以防止进程之间的干扰。出于这个原因,我认为我不能在主持人website上使用简单的标准示例。

理想情况下,我希望每个进程都在自己的子目录中运行,生成不同的输入文件,这样不同的进程就不会相互干扰。为此,我使用multiprocessing中的Pool手动创建并行进程,而不是使用emcee中的默认选项。我知道为了让不同的并行进程生成不同的随机数,我需要为每个PRNG提供不同的种子。我当前的代码如下:

代码语言:javascript
复制
def log_likelihood(x):
    #update input text file and run software
    return log_likelihood

def run_mcmc(inp_directory)
    os.chdir(inp_directory)
    seedint = int(dusty_inpdir.split('_')[-1]) #sets a different seed for each process
    np.random.seed(seedint)
    sampler = emcee.EnsembleSampler(nwalkers, ndim, log_likelihood)
    sampler.run_mcmc(initial_pos,ntrials)

pool = Pool()
inp_dirlist = ['proc_0','proc_1','proc_2','proc_3']
pool.map(run_mcmc,inp_dirlist)

尽管为每个进程提供了不同的种子,但所有4个进程都会生成完全相同的一组emcee步骤。

np.random.seed不是播种emcee PRNG的相关参数吗?有没有更好的方法让不同的进程在不同的目录中工作?

EN

回答 1

Stack Overflow用户

发布于 2020-07-04 18:15:21

使用np.random.seed设置numpy随机数生成器的全局状态。要让每个主持人采样器具有不同的种子,您应该使用seed参数:

代码语言:javascript
复制
sampler = emcee.EnsembleSampler(nwalkers, ndim, log_likelihood, seed=seedint)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60703155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档