diff --git a/automata/euclidean_distance_automaton.jl b/automata/euclidean_distance_automaton.jl index 5fc21aebdab2a6615c16ee4280b2b6175eb7a8ef..2d3f38e70cfdb0c972c2260d3d71ff410d8e148d 100644 --- a/automata/euclidean_distance_automaton.jl +++ b/automata/euclidean_distance_automaton.jl @@ -55,11 +55,14 @@ function create_euclidean_distance_automaton(m::ContinuousTimeModel, timeline::A # l1 => l1 # Defined below @everywhere $(func_name(:cc, :l1, :l1, 1))(S::StateLHA, x::Vector{Int}, p::Vector{Float64}) = - getfield(S, :values)[$(idx_var_t)] >= $(timeline)[convert(Int, getfield(S, :values)[$(idx_var_idx)])] + (tml = $(Tuple(timeline)); + tml_idx = tml[convert(Int, getfield(S, :values)[$(idx_var_idx)])]; + getfield(S, :values)[$(idx_var_t)] >= tml_idx) @everywhere $(func_name(:us, :l1, :l1, 1))(S::StateLHA, x::Vector{Int}, p::Vector{Float64}) = - (setindex!(getfield(S, :values), getfield(S, :values)[$(idx_var_d)] + - (getfield(S, :values)[$(idx_var_n)] - $(observations)[convert(Int, getfield(S, :values)[$(idx_var_idx)])])^2, - $(idx_var_d)); + (y_obs = $(Tuple(observations)); + y_obs_idx = y_obs[convert(Int, getfield(S, :values)[$(idx_var_idx)])]; + setindex!(getfield(S, :values), getfield(S, :values)[$(idx_var_d)] + (getfield(S, :values)[$(idx_var_n)] - y_obs_idx)^2, + $(idx_var_d)); setindex!(getfield(S, :values), getfield(S, :values)[$(idx_var_idx)] + 1.0, $(idx_var_idx))) @everywhere $(func_name(:cc, :l1, :l1, 2))(S::StateLHA, x::Vector{Int}, p::Vector{Float64}) = true diff --git a/tests/automata/euclidean_distance_single.jl b/tests/automata/euclidean_distance_single.jl index c28ad52430d301b9f2566992f5058dffb2d09d4a..f1923c5d7173295f5f1f008ff61784243a72bc08 100644 --- a/tests/automata/euclidean_distance_single.jl +++ b/tests/automata/euclidean_distance_single.jl @@ -11,7 +11,6 @@ y_obs = vectorize(simulate(SIR), :I, tml_obs) sync_SIR = SIR * create_euclidean_distance_automaton(SIR, tml_obs, y_obs, :I) σ = simulate(sync_SIR) test = euclidean_distance(σ, :I, tml_obs, y_obs) == σ.state_lha_end[:d] -@show test, euclidean_distance(σ, :I, tml_obs, y_obs), σ.state_lha_end[:d] return test