1
1
import Base. Iterators: product
2
2
3
+ abstract type Approach end
4
+
5
+ struct Opt <: Approach
6
+ end
7
+ struct Rand <: Approach
8
+ end
9
+
10
+ const Optimize = Opt ()
11
+ const Randomize = Rand ()
12
+
3
13
"""
4
14
**Model**
5
15
@@ -46,7 +56,8 @@ Constructor
46
56
Optimizer(;task, model, grid_design, grid_parms, grid_response)
47
57
````
48
58
"""
49
- mutable struct Optimizer{M<: Model ,T1,T2,T3,T4,T5,T6,T7,T8,T9}
59
+ mutable struct Optimizer{A,M<: Model ,T1,T2,T3,T4,T5,T6,T7,T8,T9}
60
+ approach:: A
50
61
model:: M
51
62
design_grid:: T1
52
63
parm_grid:: T2
@@ -64,7 +75,7 @@ mutable struct Optimizer{M<:Model,T1,T2,T3,T4,T5,T6,T7,T8,T9}
64
75
design_names:: T9
65
76
end
66
77
67
- function Optimizer (;model, design_list, parm_list, data_list)
78
+ function Optimizer (; model, design_list, parm_list, data_list, approach = Optimize )
68
79
design_names,design_grid = to_grid (design_list)
69
80
parm_names,parm_grid = to_grid (parm_list)
70
81
_,data_grid = to_grid (data_list)
@@ -78,34 +89,29 @@ function Optimizer(;model, design_list, parm_list, data_list)
78
89
cond_entropy = conditional_entropy (entropy, post)
79
90
mutual_info = mutual_information (marg_entropy, cond_entropy)
80
91
best_design = find_best_design (mutual_info, design_grid, design_names)
81
- return Optimizer (model, design_grid, parm_grid, data_grid, log_like,
92
+ return Optimizer (approach, model, design_grid, parm_grid, data_grid, log_like,
82
93
marg_log_like, priors, log_post, entropy, marg_entropy, cond_entropy,
83
94
mutual_info, best_design, parm_names, design_names)
84
95
end
85
96
86
-
87
- mutable struct Randomizer{M<: Model ,T1,T2,T3,T4,T5,T6,T7}
88
- model:: M
89
- design_grid:: T1
90
- parm_grid:: T2
91
- data_grid:: T3
92
- log_like:: Array{Float64,3}
93
- priors:: T4
94
- log_post:: Vector{Float64}
95
- best_design:: T5
96
- parm_names:: T6
97
- design_names:: T7
98
- end
99
-
100
- function Randomizer (;model, design_list, parm_list, data_list)
101
- design_names,design_grid = to_grid (design_list)
102
- parm_names,parm_grid = to_grid (parm_list)
103
- _,data_grid = to_grid (data_list)
104
- log_like = loglikelihood (model, design_grid, parm_grid, data_grid)
105
- priors = prior_probs (model, parm_grid)
106
- post = priors[:]
107
- log_post = log .(post)
108
- best_design = rand (design_grid)
109
- return Randomizer (model, design_grid, parm_grid, data_grid, log_like,
110
- priors, log_post, best_design, parm_names, design_names)
111
- end
97
+ # function Optimizer(args...; update_log_like, model, design_list, parm_list, data_list,
98
+ # state_type, kwargs...)
99
+ # design_names,design_grid = to_grid(design_list)
100
+ # parm_names,parm_grid = to_grid(parm_list)
101
+ # _,data_grid = to_grid(data_list)
102
+ # dims = map(length, (parm_grid,design_grid,data_grid))
103
+ # state = create_state(state_type, dims, args...; kwargs...)
104
+ # log_like = loglikelihood(model, design_grid, parm_grid, data_grid)
105
+ # priors = prior_probs(model, parm_grid)
106
+ # post = priors[:]
107
+ # log_post = log.(post)
108
+ # entropy = compute_entropy(log_like)
109
+ # marg_log_like = marginal_log_like(log_post, log_like)
110
+ # marg_entropy = marginal_entropy(marg_log_like)
111
+ # cond_entropy = conditional_entropy(entropy, post)
112
+ # mutual_info = mutual_information(marg_entropy, cond_entropy)
113
+ # best_design = find_best_design(mutual_info, design_grid, design_names)
114
+ # return Optimizer(model, design_grid, parm_grid, data_grid, log_like,
115
+ # marg_log_like, priors, log_post, entropy, marg_entropy, cond_entropy,
116
+ # mutual_info, best_design, parm_names, design_names, update_log_like, state)
117
+ # end
0 commit comments