aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Kellner <ken@kenkellner.com>2020-02-12 20:30:50 -0500
committerKen Kellner <ken@kenkellner.com>2020-02-12 20:30:50 -0500
commit4594e4705e91d8245fc27010c93e21c783920e7a (patch)
treebaad0da0f64365fd1261e349df19d569b1354148
parent7f970a87931bb4276ab7a190e82f0d8a5d6bfdf8 (diff)
Enable parallel execution of bootstraps and multi-model runs
-rw-r--r--.travis.yml3
-rw-r--r--examples/example_parallel.jl31
-rw-r--r--src/Unmarked.jl2
-rw-r--r--src/gof.jl5
-rw-r--r--src/nmix.jl5
-rw-r--r--src/occupancy.jl5
6 files changed, 11 insertions, 40 deletions
diff --git a/.travis.yml b/.travis.yml
index 17165c9..ade2244 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,7 +2,6 @@ language: julia
julia:
- nightly
- - 1.2
- - 1.1
+ - 1.3
codecov: true
diff --git a/examples/example_parallel.jl b/examples/example_parallel.jl
deleted file mode 100644
index 68eee4c..0000000
--- a/examples/example_parallel.jl
+++ /dev/null
@@ -1,31 +0,0 @@
-#export JULIA_NUM_THREADS=3 #in bash
-Threads.nthreads() #should be >1
-
-using Distributed, DataFrames
-addprocs(3);
-@everywhere using Unmarked
-
-
-
-ψ_formula = @formula(ψ~elev+forest);
-p_formula = @formula(p~precip+wind);
-β_truth = [0, -0.5, 1.2, -0.2, 0, 0.7];
-
-umd = simulate(Occu, ψ_formula, p_formula, [1000, 5], β_truth);
-
-fit = occu(ψ_formula, p_formula, umd);
-
-
-#bootstrap
-
-@everywhere function calc_stat(i, fit::Unmarked.UnmarkedModel)
- s = simulate(fit)
- sum(s.y)
-end
-
-@everywhere calc_stat2 = calc_stat2
-
-@time y = map(x -> calc_stat(x, fit), 1:5000);
-
-@time y2 = pmap(x -> calc_stat(x, fit), 1:5000);
-
diff --git a/src/Unmarked.jl b/src/Unmarked.jl
index 40d6ebe..4f192f8 100644
--- a/src/Unmarked.jl
+++ b/src/Unmarked.jl
@@ -4,7 +4,7 @@ using StatsBase, StatsModels, StatsFuns, Distributions, Random, Printf
using LinearAlgebra, DataFrames, Optim, NLSolversBase, ForwardDiff
using Combinatorics: combinations
using PrettyTables: pretty_table, ft_printf
-using ProgressMeter: @showprogress
+using ProgressMeter: Progress, next!
using Gadfly: plot, style, Guide, Geom, pt, vstack, hstack
import Base: show, getindex, length
diff --git a/src/gof.jl b/src/gof.jl
index 60b62e1..392cdec 100644
--- a/src/gof.jl
+++ b/src/gof.jl
@@ -9,11 +9,12 @@ end
function parboot(fit::UnmarkedModel, nsims::Int, statistic::Any)
out = Array{Float64}(undef, nsims)
-
- @showprogress 1 string("Bootstrap (",nsims," sims) ") for i = 1:nsims
+ p = Progress(nsims, desc=string("Bootstrap (",nsims," sims) "))
+ Threads.@threads for i = 1:nsims
new_data = simulate(fit)
new_fit = update(fit, new_data)
out[i] = statistic(new_fit)
+ next!(p)
end
return out
diff --git a/src/nmix.jl b/src/nmix.jl
index 33551ab..dd7e54d 100644
--- a/src/nmix.jl
+++ b/src/nmix.jl
@@ -85,10 +85,11 @@ function nmix(λ_form::Union{Array,FormulaTerm},
p_form::Union{Array,FormulaTerm},
data::UmData, K::Union{Int,Nothing}=nothing)
cf = combine_formulas(λ_form, p_form)
- msg = string("Fitting ", length(cf), " models ")
out = Array{UnmarkedModel}(undef, length(cf))
- @showprogress 1 msg for i in 1:length(cf)
+ p = Progress(length(cf), desc=string("Fitting ", length(cf), " models "))
+ Threads.@threads for i in 1:length(cf)
out[i] = nmix(cf[i][1],cf[i][2], data, K)
+ next!(p)
end
return UnmarkedModels(out)
end
diff --git a/src/occupancy.jl b/src/occupancy.jl
index ff18ac1..39fccca 100644
--- a/src/occupancy.jl
+++ b/src/occupancy.jl
@@ -64,10 +64,11 @@ combinations. To fit all model subsets, wrap formula with `allsubs()`.
function occu(ψ_form::Union{Array,FormulaTerm},
p_form::Union{Array,FormulaTerm}, data::UmData)
cf = combine_formulas(ψ_form, p_form)
- msg = string("Fitting ", length(cf), " models ")
out = Array{UnmarkedModel}(undef, length(cf))
- @showprogress 1 msg for i in 1:length(cf)
+ p = Progress(length(cf), desc=string("Fitting ", length(cf), " models "))
+ Threads.@threads for i in 1:length(cf)
out[i] = occu(cf[i][1], cf[i][2], data)
+ next!(p)
end
return UnmarkedModels(out)
end