Я запускаю процесс MCM C в Python, используя emcee
. Мой код python является оберткой вокруг другого программного обеспечения. emcee
ходунки сэмплируют пространство входных параметров для этого программного обеспечения. Программное обеспечение читает текстовый файл в качестве входных данных. Мой код генерирует этот текстовый файл, используя каждый шаг цепочки emcee
. Чтобы ускорить выборку, я хочу, чтобы несколько процессов, которые оценивали логарифмическую вероятность, работали параллельно. Однако каждый из этих процессов должен записывать в разные входные текстовые файлы, чтобы предотвратить вмешательство между процессами. По этой причине я думаю, что не могу использовать простой стандартный пример на веб-сайте emcee .
В идеале я бы хотел, чтобы каждый процесс выполнялся в своем собственном подкаталоге, генерируя разные входные файлы, чтобы разные процессы не мешали друг другу. Для этого я использую Pool
из multiprocessing
для создания параллельных процессов вручную, а не параметр по умолчанию из emcee
. Я понимаю, что для того, чтобы разные параллельные процессы генерировали разные случайные числа, мне нужно предоставить разные начальные числа каждому PRNG. Мой текущий код выглядит следующим образом:
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
шагов.
Is np.random.seed
не соответствующий параметр для заполнения emcee
PRNG? Есть ли лучший способ, чтобы разные процессы работали в разных каталогах?