MJH*_*MJH 5 parallel-processing function pmap julia map-function
我正在朱莉娅建立一个微观模拟模型.我已经建立了我的功能结构,它适用于1"人".我想编写脚本来通过模型运行100000多人,并将结果保存在一个位置.
最终我想并行执行此操作.
下面我已经包含了一个带有虚拟概率的简单工作版代码.
using Distributions
# Microsim function
function MicroSim(start_age, stages)
stage = 0
age = start_age
# Set all trackers to 0
Death_tracker = 0
Disease_tracker = 0
# While loop
while stage <= stages
age = age
###########################################################
# Probability of Death
pD = 0.02
if age == 100
pD = 1.0
else
pD = pD
end
# Coin flip
dist_pD = Bernoulli(pD)
Died = rand(dist_pD, 1)
if Died == [1]
Death_tracker = 1
# death tracker loop break
if Death_tracker == 1
# println("I died")
break
end
else
Death_tracker = Death_tracker
end
###########################################################
# Update age and stage
age = age + 1
stage = stage + 1
end
return age, Death_tracker
end
MicroSim(18,100)
Run Code Online (Sandbox Code Playgroud)
您正在寻找功能map
和pmap
(用于并行化).我已经简化了你的功能,以提供一个更简单的工作示例.(将来,请参阅此链接以获取有关在您的问题中创建此类最小示例的指导).
map
获取一个函数(您指定)并将其应用于数组中的所有元素.如果你的函数有多个参数(就像你的那样),那么你只需要输入map
多个连续的数组. map
然后返回一个包含所有函数结果的新数组.
function MicroSim(start_age, stages)
return rand(start_age), rand(stages)
end
Start_Ages = [10, 20, 15]
Stages = [1, 4, 5]
Results = map(MicroSim, Start_Ages, Stages)
Run Code Online (Sandbox Code Playgroud)
如果你想并行化事物,只需要进行三个简单的调整.1.使用该addprocs()
函数添加您想要的许多其他进程.2. @everywhere
在声明函数时使用宏,以便您的工作进程也可以访问它.3.使用该功能pmap
代替map
:
addprocs(2)
@everywhere begin
function MicroSim(start_age, stages)
return rand(start_age), rand(stages)
end
end
Results = pmap(MicroSim, Start_Ages, Stages)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
895 次 |
最近记录: |