Все процессы пула дают одинаковый результат для стохастической функции - PullRequest
0 голосов
/ 12 февраля 2019

Я использую цепочку Маркова для множества траекторий и пытался поставить ее параллельно, чтобы ускорить время выполнения.

Каждый раз, когда я запускаю код, начальное состояние системы должно быть рандомизировано ипереходы основаны на вероятностях, которые зависят от текущего состояния, приводя к различным конечным результатам при каждом его запуске, что и происходит, когда я запускаю его параллельно.

Я пытался использовать начальные числа для рандомизациирезультаты, но безуспешно.Я понимаю, что ввод аргументов функции, отдельной от вызова функции, является причиной дублирования, но я изо всех сил пытаюсь найти обходной путь.

s = 50 

result004 = pool.apply_async(long_runs,(1,10,0.4,s,s,5,1,None,'Gamma'))

result008 = pool.apply_async(long_runs,(1,10,0.4,s,s,5,1,None,'Gamma'))

result01 = pool.apply_async(long_runs,(1,10,0.4,s,s,5,1,None,'Gamma'))

result02 = pool.apply_async(long_runs,(1,10,0.4,s,s,5,1,None,'Gamma'))


answer1 = result004.get()

answer2 = result008.get()

answer3 = result01.get()

answer4 = result02.get()

В результате получается четыре идентичных вывода:

([6], [1], [3], [0, 0, 4, 0, 0, 2, 2, 0, 0, 0], [0, 0,6, 0,6, 0,8, 0,4, 0,8, 0,6, 0,6, 0,4, 0,6], ...

([6], [1], [3], [0, 0, 4, 0, 0, 2, 2, 0, 0, 0], [0, 0,6, 0,6, 0,8, 0,4, 0,8, 0,6, 0,6, 0,4, 0,6], ...

([6], [1], [3], [0, 0, 4, 0, 0, 2, 2, 0, 0, 0], [0, 0,6, 0,6, 0,8, 0,4, 0,8, 0,6, 0,6, 0,4, 0,6], ...

([6], [1], [3], [0, 0, 4, 0, 0, 2, 2, 0, 0, 0], [0, 0,6, 0,6, 0,8, 0,4, 0,8, 0,6, 0,6, 0,4, 0,6], ...

...