|
21 | 21 | @everywhere quickactivate(pwd()) |
22 | 22 | @everywhere using Synth |
23 | 23 |
|
24 | | -@everywhere using ProgressMeter, DataFrames, HerbSearch, GraphDynamicalSystems |
| 24 | +@everywhere using ProgressMeter, DataFrames, HerbSearch, GraphDynamicalSystems, Random |
| 25 | +using MetaGraphsNext: labels |
25 | 26 |
|
26 | | -res = collect_results(datadir("sims", "biodivine_split")) |
27 | | -res.ID = ((x -> x[end-1]["id"]) ∘ parse_savename).(res.path) |
28 | | -rename!(res, :path => "Trajectory Path") |
29 | | -mg_df = collect_results(datadir("src_parsed", "biodivine_benchmark_as_metagraphs");) |
30 | | -mg_df.ID = ((x -> parse(Int, x)) ∘ (x -> x[1]) ∘ splitext ∘ basename).(mg_df.path) |
31 | | -rename!(mg_df, :path => "Model Path") |
| 27 | +traj_df = collect_results(datadir("sims", "biodivine_split")) |
| 28 | +path2id = path -> parse_savename(path)[end-1]["id"] |
| 29 | +traj_df.ID = path2id.(traj_df.path) |
32 | 30 |
|
33 | | -res = innerjoin(res, mg_df, on = :ID) |
| 31 | +model_df = collect_results(datadir("src_parsed", "biodivine_benchmark_as_metagraphs");) |
| 32 | +path2id = path -> parse(Int, splitext(basename(path))[1]) |
| 33 | +model_df.ID = path2id.(model_df.path) |
| 34 | +model_df.vertex = collect.(labels.(model_df.metagraph_model)) |
| 35 | +# add a copy so that after flattening we have all of the vertices of a model in each row of df |
| 36 | +model_df.vertices = model_df.vertex |
| 37 | + |
| 38 | +# Filter only smaller models |
| 39 | +# model_df = model_df[length.(model_df.vertices).<15, :] |
| 40 | + |
| 41 | +per_vertex_df = flatten(model_df, :vertex) |
| 42 | + |
| 43 | +grammars_df = model_df[!, [:ID, :vertices]] |
| 44 | +grammars_df.dnf_grammar = build_dnf_grammar.(grammars_df.vertices) |
| 45 | +grammars_df.qn_grammar = build_qn_grammar.(grammars_df.vertices) |
| 46 | + |
| 47 | +get_evaluator = g -> Dict([:DNF => evaluate_bn, :QN => evaluate_qn])[g] |
| 48 | + |
| 49 | +function get_grammar(unique, grammar_type) |
| 50 | + s = :unknown |
| 51 | + if grammar_type == :DNF |
| 52 | + s = :dnf_grammar |
| 53 | + elseif grammar_type == :QN |
| 54 | + s = :qn_grammar |
| 55 | + end |
| 56 | + |
| 57 | + return only(grammars_df[grammars_df.ID.==unique.ID, s]) |
| 58 | +end |
| 59 | + |
| 60 | +function select_trajectories(df, N, id, vertex, seed) |
| 61 | + Random.seed!(seed) |
| 62 | + selected_trajectories = rand(only(df[df.ID.==id, :split_traj]), N) |
| 63 | + filtered_on_vertex = |
| 64 | + reduce(union, map(x -> get(x, vertex, Set()), selected_trajectories)) |
| 65 | + |
| 66 | + return filtered_on_vertex |
| 67 | +end |
34 | 68 |
|
35 | 69 | synth_params = Dict( |
36 | 70 | "seed" => 42, |
37 | 71 | "max_depth" => 6, |
38 | | - "id" => res.ID, |
| 72 | + "unique" => collect(eachrow(per_vertex_df[!, [:ID, :vertex, :vertices]])), |
| 73 | + "id" => Derived("unique", x -> x.ID), |
| 74 | + "vertex_names" => Derived("unique", x -> getfield.(x.vertices, :value)), |
| 75 | + "index_of_vertex" => Derived("unique", x -> findfirst(==(x.vertex), x.vertices)), |
| 76 | + "vertex" => Derived("unique", x -> string(x.vertex.value)), |
39 | 77 | "n_trajectories" => collect(10:45:110), |
| 78 | + "selected_trajectories" => Derived( |
| 79 | + ["n_trajectories", "unique", "index_of_vertex", "seed"], |
| 80 | + (N, unique, index_of_vertex, seed) -> |
| 81 | + select_trajectories(traj_df, N, unique.ID, index_of_vertex, seed), |
| 82 | + ), |
40 | 83 | "iterator_type" => [BFSIterator], |
41 | | - "grammar_builder" => [build_dnf_grammar, build_qn_grammar], |
| 84 | + "iter_name" => Derived("iterator_type", string), |
| 85 | + "grammar_type" => [:DNF, :QN], |
| 86 | + "grammar" => Derived(["unique", "grammar_type"], get_grammar), |
| 87 | + "evaluator" => Derived("grammar_type", get_evaluator), |
42 | 88 | "max_iterations" => 1_000_000, |
43 | 89 | ) |
44 | 90 |
|
45 | 91 | @showprogress pmap(dict_list(synth_params)) do params |
46 | | - synth_one_biodivine(params, res) |
| 92 | + @produce_or_load(synth_one_vertex, params, datadir("exp_raw", "biodivine_search")) |
47 | 93 | end |
0 commit comments