@everywhere begin using MarkovProcesses import Distributed: nworkers absolute_path = get_module_path() * "/tests/cosmos/" # Values x1, x2 t1, t2 dict_exp = Dict( :R1 => [50, 75, 0.025, 0.05], :R2 => [50, 75, 0.05, 0.075], :R3 => [25, 50, 0.05, 0.075] ) str_model = "ER" if str_model == "ER" load_model(str_model) model = ER observe_all!(ER) end load_automaton("automaton_F") test_all = true width = 0.2 level = 0.95 l_exp = [:R1, :R2, :R3] end #l_exp = [:R2] for exp in l_exp if !(exp in keys(dict_exp)) println("Unrecognized experiment: <<$exp>>") continue end val_exp = dict_exp[exp] x1, x2, t1, t2 = val_exp[1], val_exp[2], val_exp[3], val_exp[4] A_F = create_automaton_F(model, x1, x2, t1, t2, :P) l_k3 = 0:10:100 nb_param = length(l_k3) l_dist_cosmos = zeros(nb_param) l_dist_pkg = zeros(nb_param) for i in 1:nb_param # Cosmos estimation k3 = l_k3[i] command = `Cosmos $(absolute_path * "models/" * str_model * ".gspn") $(absolute_path * "distance_F/dist_F_" * str_model * ".lha") --njob $(nworkers()) --const k_3=$(k3),x1=$x1,x2=$x2,t1=$t1,t2=$t2 --level $(level) --width $(width) --verbose 0` #run(command) run(pipeline(command, stderr=devnull)) dict_values = cosmos_get_values("Result_dist_F_$(str_model).res") l_dist_cosmos[i] = dict_values["Estimated value"][1] nb_sim = dict_values["Total paths"][1] nb_accepted = dict_values["Accepted paths"][1] nb_sim = convert(Int, nb_sim) # MarkovProcesses estimation set_param!(ER, :k3, convert(Float64, k3)) sync_ER = ER*A_F l_dist_pkg[i], nb_accepts_pkg = distribute_mean_value_lha(sync_ER, :d, nb_sim; with_accepts = true) #@info "About accepts" nb_sim nb_accepted nb_accepts_pkg test = isapprox(l_dist_cosmos[i], l_dist_pkg[i]; atol = width*1.01) || (l_dist_cosmos[i] == 9997999 && l_dist_pkg[i] == Inf) test2 = nb_accepts_pkg == (nb_sim / nb_accepted) global test_all = test_all && test && test2 if !test @show l_dist_pkg[i], l_dist_cosmos[i] @show exp @show k3 @show nb_sim end end @info exp l_dist_pkg l_dist_cosmos end rm("Result_dist_F_$(str_model).res") rm("Result.res") return test_all