From 5ca5c37886700f5a6db6b6b5e30cbab100e963cc Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 4 Oct 2023 14:11:06 -0400 Subject: [PATCH 01/23] change point model WIP --- src/gms/cp_gm_pb.jl | 171 ++++++++++++++++++++++++++++++++++++++++++++ src/gms/mc_gm.jl | 1 - 2 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 src/gms/cp_gm_pb.jl diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl new file mode 100644 index 0000000..f649099 --- /dev/null +++ b/src/gms/cp_gm_pb.jl @@ -0,0 +1,171 @@ + +export CPParams, + CPState, + CPModel + +using LinearAlgebra:norm + +## Generative Model + components + +struct ObjectBelief + congruent::Bool + physical_latents::RigidBodyLatents +end + +abstract type EventRelation end + +struct Collision <: EventRelation + a::RigidBody + b::RigidBody +end + +struct EventState + active_events::Vector{EventRelation} +end + +""" +Parameters for change point model + +$(TYPEDEF) + +--- + +$(TYPEDFIELDS) +""" +struct CPParams <: GMParams + # prior + material_prior::MaterialPrior + physics_prior::PhysPrior + # event relations + event_concepts::Vector{Type{EventRelation}} + # simulation + sim::BulletSim + template::BulletState + n_objects::Int64 + obs_noise::Float64 +end + +struct CPState <: GMState + bullet_state::BulletState + event_state::EventState +end + +## PRIOR + +@gen function cp_object_prior(ls::RigidBodyLatents, gm::CPParams) + # sample material + mi = @trace(categorical(gm.material_prior.material_weights), :material) + + # sample physical properties + phys_params = gm.physics_prior + mass_mu, mass_sd = phys_params.mass + mass = @trace(trunc_norm(mass_mu, mass_sd, 0., Inf), :mass) + fric_mu, fric_sd = phys_params.friction + friction = @trace(trunc_norm(fric_mu,fric_sd, 0., 1.), :friction) + res_low, res_high = phys_params.restitution + restitution = @trace(uniform(res_low, res_high), :restitution) + + # package + new_ls = setproperties(ls.data; + mass = mass, + lateralFriction = friction, + restitution = restitution) + new_latents::RigidBodyLatents = RigidBodyLatents(new_ls) + return new_latents +end + +@gen function cp_prior(params::CPParams) + # initialize the kinematic state + latents = params.template.latents + params_filled = Fill(params, length(latents)) + new_latents = @trace(Gen.Map(cp_object_prior)(latents, params_filled), :objects) + bullet_state = setproperties(params.template; latents = new_latents) + + # initialize the event state + event_state = EventState([]) + + init_state = CPState(bullet_state, event_state) + return init_state +end + +""" +Bernoulli weight that event relation holds +""" +function predicate(Type{Collision}, x::RigidBodyState, y::RigidBodyState) + d = norm(x.position, y.position) # l2 distance + clamp(1.0 - d, 0., 1.) +end + +# in case of collision: Gaussian drift update of mass and restitution +@gen static function _collision_clause(event_idx, latents::RigidBodyLatents) + new_mass = @trace(trunc_norm(latents.mass, .1, 0., Inf), :mass) + new_restitution = @trace(trunc_norm(latents.restitution, .1, res_low, res_high), :restitution) + return set_properties(latents; mass = new_mass, restitution = new_restitution) +end + +""" +Returns the generative function over latents for the event relation +""" +function clause(Type{Collision}) + _collision_clause +end + + +function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelation}}) + return event_concepts + for EventRelation in event_concepts + # TODO: decide if valid + end +end + +@gen function update_latents(state, latents) + new_latents = setproperties(latents.data; + mass = mass, + lateralFriction = friction, + restitution = restitution) + new_latents::RigidBodyLatents = RigidBodyLatents(new_latents) + return new_latents +end + +@gen function event_kernel(state::CPState, event_concepts::Vector{Type{EventRelation}}) + # filter out invalid event relations (e.g., a collision is already active between a and b) + relations = valid_relations(state, event_concepts) + + # pairwise weights of event concepts + weights = pairwise(event_concepts, state) + event_idx = @trace(categorical(weights), :event_idx) + + new_latents = @trace(Switch(map(clause, event_concepts))(event_idx, state.bullet_state), :event) + update_latents(state, new_latents) + return active_events +end + +# for one object, observe the noisy positions +@gen function observe_position(k::RigidBodyState, noise::Float64) + pos = k.position + # add noise to position + obs = @trace(broadcasted_normal(pos, noise), :positions) + return obs +end + +# for one time step, run event and physics kernel +@gen (static) function kernel(t::Int, prev_state::CPState, params::CPParams) + # event kernel + event_state = @trace(event_kernel(prev_state, params.event_concepts), :events) + + # simulate physics for the next step based on the current state and observe positions + bullet_state::BulletState = PhySMC.step(params.sim, state.bullet_state) + obs = @trace(Gen.Map(observe_position)(bullet_state.kinematics, noises), :observe) + + next_state = CPState(bullet_state, event_state) + return next_state +end + +@gen (static) function CPModel(t::Int, params::CPParams) + # initalize the kinematic and event state + init_state = @trace(cp_prior(params), :prior) + + # unfold the event and kinematic state over time + states = @trace(Gen.Unfold(kernel)(t, init_state, params), :kernel) + return states +end diff --git a/src/gms/mc_gm.jl b/src/gms/mc_gm.jl index dae9ea2..ab38f66 100644 --- a/src/gms/mc_gm.jl +++ b/src/gms/mc_gm.jl @@ -105,7 +105,6 @@ end @gen function mc_gm(t::Int, gm::MCParams) init_state = @trace(mc_prior(gm), :prior) # simulate `t` timesteps - println(init_state) states = @trace(Gen.Unfold(kernel)(t, init_state, gm), :kernel) return states end From e49f58ec521a7b6d88d36e7e327952fd48bf681e Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 4 Oct 2023 15:26:19 -0400 Subject: [PATCH 02/23] agenda for cp model --- src/gms/cp_gm_pb.jl | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index f649099..613af68 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -1,7 +1,7 @@ export CPParams, CPState, - CPModel + cp_model using LinearAlgebra:norm @@ -19,9 +19,6 @@ struct Collision <: EventRelation b::RigidBody end -struct EventState - active_events::Vector{EventRelation} -end """ Parameters for change point model @@ -47,7 +44,7 @@ end struct CPState <: GMState bullet_state::BulletState - event_state::EventState + active_events::Vector{EventRelation} end ## PRIOR @@ -113,6 +110,7 @@ end function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelation}}) return event_concepts + # TODO: replace by map in the end for EventRelation in event_concepts # TODO: decide if valid end @@ -127,16 +125,24 @@ end return new_latents end +# iterate over event concepts and evaluate predicates to active/deactive @gen function event_kernel(state::CPState, event_concepts::Vector{Type{EventRelation}}) # filter out invalid event relations (e.g., a collision is already active between a and b) - relations = valid_relations(state, event_concepts) + #relations = valid_relations(state, event_concepts) - # pairwise weights of event concepts - weights = pairwise(event_concepts, state) + # activate new events + # map active events to weights 3D tensor for birth decision + # evaluate predicates object-pairwise + weights = #call predicates event_concepts for each event_idx = @trace(categorical(weights), :event_idx) - new_latents = @trace(Switch(map(clause, event_concepts))(event_idx, state.bullet_state), :event) + # Switch combinator to evaluate clauses for each event, currently only one + new_latents = @trace(Gen.Switch(map(clause, event_concepts))(event_idx, state.bullet_state), :event) + # alternative: update latents with Map update_latents(state, new_latents) + + # some new events kill old events + return active_events end @@ -161,7 +167,7 @@ end return next_state end -@gen (static) function CPModel(t::Int, params::CPParams) +@gen (static) function cp_model(t::Int, params::CPParams) # initalize the kinematic and event state init_state = @trace(cp_prior(params), :prior) From c15287feb7be1017059abc5efd3c502eb7eca6c0 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 4 Oct 2023 15:40:22 -0400 Subject: [PATCH 03/23] add structure to changepoint model --- src/gms/cp_gm_pb.jl | 53 +++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 613af68..7397d57 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -5,13 +5,11 @@ export CPParams, using LinearAlgebra:norm -## Generative Model + components - -struct ObjectBelief - congruent::Bool - physical_latents::RigidBodyLatents -end +## Changepoint Model + components +""" +Event types +""" abstract type EventRelation end struct Collision <: EventRelation @@ -22,12 +20,6 @@ end """ Parameters for change point model - -$(TYPEDEF) - ---- - -$(TYPEDFIELDS) """ struct CPParams <: GMParams # prior @@ -42,6 +34,9 @@ struct CPParams <: GMParams obs_noise::Float64 end +""" +Current state of the change point model, simulation state and event state +""" struct CPState <: GMState bullet_state::BulletState active_events::Vector{EventRelation} @@ -49,6 +44,9 @@ end ## PRIOR +""" +initalizes prior beliefs about mass, friction and resitution of the given objects +""" @gen function cp_object_prior(ls::RigidBodyLatents, gm::CPParams) # sample material mi = @trace(categorical(gm.material_prior.material_weights), :material) @@ -71,6 +69,9 @@ end return new_latents end +""" +initializes belief about all objects and events +""" @gen function cp_prior(params::CPParams) # initialize the kinematic state latents = params.template.latents @@ -79,9 +80,9 @@ end bullet_state = setproperties(params.template; latents = new_latents) # initialize the event state - event_state = EventState([]) + active_events = Vector{EventRelation}() - init_state = CPState(bullet_state, event_state) + init_state = CPState(bullet_state, active_events) return init_state end @@ -93,7 +94,9 @@ function predicate(Type{Collision}, x::RigidBodyState, y::RigidBodyState) clamp(1.0 - d, 0., 1.) end -# in case of collision: Gaussian drift update of mass and restitution +""" +in case of collision: Gaussian drift update of mass and restitution# +""" @gen static function _collision_clause(event_idx, latents::RigidBodyLatents) new_mass = @trace(trunc_norm(latents.mass, .1, 0., Inf), :mass) new_restitution = @trace(trunc_norm(latents.restitution, .1, res_low, res_high), :restitution) @@ -107,7 +110,9 @@ function clause(Type{Collision}) _collision_clause end - +""" +objects that are already involved in some events should not be involved in new events +""" function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelation}}) return event_concepts # TODO: replace by map in the end @@ -116,6 +121,7 @@ function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelati end end + @gen function update_latents(state, latents) new_latents = setproperties(latents.data; mass = mass, @@ -125,7 +131,9 @@ end return new_latents end -# iterate over event concepts and evaluate predicates to active/deactive +""" +iterate over event concepts and evaluate predicates to active/deactive +""" @gen function event_kernel(state::CPState, event_concepts::Vector{Type{EventRelation}}) # filter out invalid event relations (e.g., a collision is already active between a and b) #relations = valid_relations(state, event_concepts) @@ -146,7 +154,9 @@ end return active_events end -# for one object, observe the noisy positions +""" +for one object, observe the noisy position in every dimension +""" @gen function observe_position(k::RigidBodyState, noise::Float64) pos = k.position # add noise to position @@ -154,7 +164,9 @@ end return obs end -# for one time step, run event and physics kernel +""" +for one time step, run event and physics kernel +""" @gen (static) function kernel(t::Int, prev_state::CPState, params::CPParams) # event kernel event_state = @trace(event_kernel(prev_state, params.event_concepts), :events) @@ -167,6 +179,9 @@ end return next_state end +""" +generate physical scene with changepoints in the belief state +""" @gen (static) function cp_model(t::Int, params::CPParams) # initalize the kinematic and event state init_state = @trace(cp_prior(params), :prior) From 8ce2d2a8aed838d9f79f2210d421dc546db0a18b Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Tue, 10 Oct 2023 22:04:23 -0400 Subject: [PATCH 04/23] continue changepoint model WIP --- Manifest.toml | 7 ++- Project.toml | 2 + src/gms/cp_gm_pb.jl | 122 ++++++++++++++++++++++++++++++-------------- src/gms/gms.jl | 2 +- test/gms/cp_gm.jl | 45 ++++++++++++++++ 5 files changed, 139 insertions(+), 39 deletions(-) create mode 100644 test/gms/cp_gm.jl diff --git a/Manifest.toml b/Manifest.toml index 5317cf9..598bd57 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.9.3" manifest_format = "2.0" -project_hash = "3fee985c9eca9c1165906a81b33e7ff0c8e89188" +project_hash = "6c92244b6b2c576cb0a17ab8a9dd1f5a2f86d403" [[deps.Accessors]] deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Test"] @@ -102,6 +102,11 @@ git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.12.10" +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + [[deps.CommonSubexpressions]] deps = ["MacroTools", "Test"] git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" diff --git a/Project.toml b/Project.toml index 2a186be..0ce58f8 100644 --- a/Project.toml +++ b/Project.toml @@ -5,11 +5,13 @@ version = "0.1.0" [deps] Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" Gen = "ea4f424c-a589-11e8-07c0-fd5c91b9da4a" Gen_Compose = "c1ef4dca-b0a6-4a35-b24b-46cbf3979a16" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a" PhyBullet = "63daae69-5b14-439d-ac6f-096429ca839b" PhySMC = "79c1e2f5-7911-41a0-b248-4858717ddd79" diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 7397d57..525d0f9 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -1,9 +1,12 @@ export CPParams, CPState, - cp_model + cp_model, + EventRelation, + Collision using LinearAlgebra:norm +using Combinatorics ## Changepoint Model + components @@ -17,6 +20,8 @@ struct Collision <: EventRelation b::RigidBody end +struct NoEvent <: EventRelation end + """ Parameters for change point model @@ -26,7 +31,7 @@ struct CPParams <: GMParams material_prior::MaterialPrior physics_prior::PhysPrior # event relations - event_concepts::Vector{Type{EventRelation}} + event_concepts::Vector{Type{<:EventRelation}} # simulation sim::BulletSim template::BulletState @@ -34,12 +39,29 @@ struct CPParams <: GMParams obs_noise::Float64 end +function CPParams(client::Int64, objs::Vector{Int64}, + mprior::MaterialPrior, pprior::PhysPrior, + event_concepts::Vector{Type{<:EventRelation}}, + obs_noise::Float64=0.) + # configure simulator with the provided + # client id + sim = BulletSim(;client=client) + # These are the objects of interest in the scene + rigid_bodies = RigidBody.(objs) + # Retrieve the default latents for the objects + # as well as their initial positions + # Note: alternative latents will be suggested by the `prior` + template = BulletState(sim, rigid_bodies) + + CPParams(mprior, pprior, event_concepts, sim, template, length(objs), obs_noise) +end + """ Current state of the change point model, simulation state and event state """ struct CPState <: GMState bullet_state::BulletState - active_events::Vector{EventRelation} + active_events::Vector{Int64} end ## PRIOR @@ -72,7 +94,7 @@ end """ initializes belief about all objects and events """ -@gen function cp_prior(params::CPParams) +@gen (static) function cp_prior(params::CPParams) # initialize the kinematic state latents = params.template.latents params_filled = Fill(params, length(latents)) @@ -89,27 +111,51 @@ end """ Bernoulli weight that event relation holds """ -function predicate(Type{Collision}, x::RigidBodyState, y::RigidBodyState) - d = norm(x.position, y.position) # l2 distance +function predicate(t::Type{Collision}, a::RigidBodyState, b::RigidBodyState) + d = norm(Vector(a.position)-Vector(b.position)) # l2 distance clamp(1.0 - d, 0., 1.) end +""" +update latents of a single element +""" +@gen function update_latents(latents::BulletElemLatents) + new_mass = @trace(trunc_norm(latents.data.mass, .1, 0., Inf), :mass) + new_restitution = @trace(trunc_norm(latents.data.restitution, .1, 0., 1.), :restitution) + + new_latents = setproperties(latents.data; + mass = new_mass, + restitution = new_restitution) + new_latents = RigidBodyLatents(new_latents) + return new_latents +end + + + """ in case of collision: Gaussian drift update of mass and restitution# """ -@gen static function _collision_clause(event_idx, latents::RigidBodyLatents) - new_mass = @trace(trunc_norm(latents.mass, .1, 0., Inf), :mass) - new_restitution = @trace(trunc_norm(latents.restitution, .1, res_low, res_high), :restitution) - return set_properties(latents; mass = new_mass, restitution = new_restitution) +@gen (static) function _collision_clause(pair_idx::Vector{Int64}, latents::Vector{<:BulletElemLatents}) + new_latents = @trace(update_latents(latents[pair_idx[1]]), :new_latents_a) + new_latents = @trace(update_latents(latents[pair_idx[2]]), :new_latents_b) + return Type{Collision} +end + +@gen (static) function _no_event_clause(pair_idx, latents::Vector{BulletElemLatents}) + return Type{NoEvent} end """ Returns the generative function over latents for the event relation """ -function clause(Type{Collision}) +function clause(::Type{Collision}) _collision_clause end +function clause(::Type{NoEvent}) + _no_event_clause +end + """ objects that are already involved in some events should not be involved in new events """ @@ -121,35 +167,37 @@ function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelati end end - -@gen function update_latents(state, latents) - new_latents = setproperties(latents.data; - mass = mass, - lateralFriction = friction, - restitution = restitution) - new_latents::RigidBodyLatents = RigidBodyLatents(new_latents) - return new_latents -end - """ iterate over event concepts and evaluate predicates to active/deactive """ -@gen function event_kernel(state::CPState, event_concepts::Vector{Type{EventRelation}}) - # filter out invalid event relations (e.g., a collision is already active between a and b) +@gen function event_kernel(state::CPState, event_concepts::Vector{Type{<:EventRelation}}) + # TODO: filter out invalid event relations (e.g., a collision is already active between a and b) #relations = valid_relations(state, event_concepts) # activate new events - # map active events to weights 3D tensor for birth decision - # evaluate predicates object-pairwise - weights = #call predicates event_concepts for each + object_pairs = collect(combinations(state.bullet_state.kinematics, 2)) # get pairs of objects + # map active events to weights 2D tensor for birth decision + + weights = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs] + push!(weights, 1 - min(1, sum(weights))) # for no event + weights = weights ./ sum(weights) + #println(weights) + + pair_idx = repeat(collect(combinations(1:length(state.bullet_state.kinematics), 2)), length(event_concepts)) + push!(pair_idx, Vector([0,0])) # for no event + #println(pair_idx) + + # draw one event overall event_idx = @trace(categorical(weights), :event_idx) + active_events = [state.active_events..., event_idx] + #push!(active_events, event_idx) + #println(active_events) - # Switch combinator to evaluate clauses for each event, currently only one - new_latents = @trace(Gen.Switch(map(clause, event_concepts))(event_idx, state.bullet_state), :event) - # alternative: update latents with Map - update_latents(state, new_latents) + # Switch combinator to evaluate clauses for each event + events = vcat([repeat([event_type], length(object_pairs)) for event_type in event_concepts]..., NoEvent) + event = @trace(Gen.Switch(map(clause, events)...)(event_idx, pair_idx[event_idx], state.bullet_state.latents), :event) - # some new events kill old events + # TODO: some new events kill old events return active_events end @@ -157,7 +205,7 @@ end """ for one object, observe the noisy position in every dimension """ -@gen function observe_position(k::RigidBodyState, noise::Float64) +@gen (static) function observe_position(k::RigidBodyState, noise::Float64) pos = k.position # add noise to position obs = @trace(broadcasted_normal(pos, noise), :positions) @@ -169,13 +217,13 @@ for one time step, run event and physics kernel """ @gen (static) function kernel(t::Int, prev_state::CPState, params::CPParams) # event kernel - event_state = @trace(event_kernel(prev_state, params.event_concepts), :events) + active_events = @trace(event_kernel(prev_state, params.event_concepts), :events) # simulate physics for the next step based on the current state and observe positions - bullet_state::BulletState = PhySMC.step(params.sim, state.bullet_state) - obs = @trace(Gen.Map(observe_position)(bullet_state.kinematics, noises), :observe) + bullet_state::BulletState = PhySMC.step(params.sim, prev_state.bullet_state) + obs = @trace(Gen.Map(observe_position)(bullet_state.kinematics, Fill(params.obs_noise, params.n_objects)), :observe) - next_state = CPState(bullet_state, event_state) + next_state = CPState(bullet_state, active_events) return next_state end @@ -185,7 +233,7 @@ generate physical scene with changepoints in the belief state @gen (static) function cp_model(t::Int, params::CPParams) # initalize the kinematic and event state init_state = @trace(cp_prior(params), :prior) - + # unfold the event and kinematic state over time states = @trace(Gen.Unfold(kernel)(t, init_state, params), :kernel) return states diff --git a/src/gms/gms.jl b/src/gms/gms.jl index db12e91..164d556 100644 --- a/src/gms/gms.jl +++ b/src/gms/gms.jl @@ -80,4 +80,4 @@ struct PhysPrior end include("mc_gm.jl") -# include("cp_gm.jl") +include("cp_gm_pb.jl") diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl new file mode 100644 index 0000000..53080d7 --- /dev/null +++ b/test/gms/cp_gm.jl @@ -0,0 +1,45 @@ +using Gen +using GalileoEvents + +mass_ratio = 2.0 +obj_frictions = (0.3, 0.3) +obj_positions = (0.5, 1.5) + +mprior = MaterialPrior([unknown_material]) +pprior = PhysPrior((3.0, 10.0), # mass + (0.5, 10.0), # friction + (0.2, 1.0)) # restitution + +obs_noise = 0.05 +t = 120 + +function forward_test() + client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) + event_concepts = Type{<:EventRelation}[Collision] + cp_params = CPParams(client, [a,b, b], mprior, pprior, event_concepts, obs_noise) + trace, _ = Gen.generate(cp_model, (t, cp_params)) + display(get_choices(trace)) +end + + +function update_test() + client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) + mc_params = MCParams(client, [a,b], mprior, pprior, obs_noise) + trace, _ = Gen.generate(mc_gm, (t, mc_params)) + + addr = :prior => :objects => 1 => :mass + cm = Gen.choicemap(addr => trace[addr] + 3) + trace2, _ = Gen.update(trace, cm) + + # compare final positions + t=120 + pos1 = Vector(get_retval(trace)[t].bullet_state.kinematics[1].position) + pos2 = Vector(get_retval(trace2)[t].bullet_state.kinematics[1].position) + @assert pos1 != pos2 + + return trace, trace2 +end + + +forward_test() +#update_test() \ No newline at end of file From 082e2ab2a686d256eef1a5918378feaf6e5140b9 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 18 Oct 2023 16:11:23 -0400 Subject: [PATCH 05/23] experiment with changepoint model --- Manifest.toml | 2 +- src/gms/cp_gm_pb.jl | 132 ++++++++++++++++++++++++++++++-------------- test/gms/cp_gm.jl | 95 +++++++++++++++++++++++++++++-- 3 files changed, 180 insertions(+), 49 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 598bd57..7bcc38b 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -362,7 +362,7 @@ version = "0.72.9+1" [[deps.Gen]] deps = ["Compat", "DataStructures", "Distributions", "ForwardDiff", "FunctionalCollections", "JSON", "LinearAlgebra", "MacroTools", "Parameters", "Random", "ReverseDiff", "SpecialFunctions"] -git-tree-sha1 = "9878ff4ab1990f5647e89b4228a3c9da5f0e69c7" +path = "/home/dg963/GalileoEvents/env.d/jenv/dev/Gen" uuid = "ea4f424c-a589-11e8-07c0-fd5c91b9da4a" version = "0.4.6" diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 525d0f9..f673c07 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -61,7 +61,7 @@ Current state of the change point model, simulation state and event state """ struct CPState <: GMState bullet_state::BulletState - active_events::Vector{Int64} + active_events::Set{Int64} end ## PRIOR @@ -94,7 +94,7 @@ end """ initializes belief about all objects and events """ -@gen (static) function cp_prior(params::CPParams) +@gen function cp_prior(params::CPParams) # initialize the kinematic state latents = params.template.latents params_filled = Fill(params, length(latents)) @@ -102,7 +102,7 @@ initializes belief about all objects and events bullet_state = setproperties(params.template; latents = new_latents) # initialize the event state - active_events = Vector{EventRelation}() + active_events = Set{EventRelation}() init_state = CPState(bullet_state, active_events) return init_state @@ -113,9 +113,14 @@ Bernoulli weight that event relation holds """ function predicate(t::Type{Collision}, a::RigidBodyState, b::RigidBodyState) d = norm(Vector(a.position)-Vector(b.position)) # l2 distance - clamp(1.0 - d, 0., 1.) + @show d + clamp(1.0 - exp(-d), 0., 1.) end +# TODO: surface distances, use pybullet (contact maybe not helpful) + +# gen functional collections + """ update latents of a single element """ @@ -130,19 +135,17 @@ update latents of a single element return new_latents end - - """ in case of collision: Gaussian drift update of mass and restitution# """ -@gen (static) function _collision_clause(pair_idx::Vector{Int64}, latents::Vector{<:BulletElemLatents}) - new_latents = @trace(update_latents(latents[pair_idx[1]]), :new_latents_a) - new_latents = @trace(update_latents(latents[pair_idx[2]]), :new_latents_b) - return Type{Collision} +@gen function _collision_clause(pair_idx::Vector{Int64}, latents::Vector{BulletElemLatents}) + latents[pair_idx[1]] = @trace(update_latents(latents[pair_idx[1]]), :new_latents_a) + latents[pair_idx[2]] = @trace(update_latents(latents[pair_idx[2]]), :new_latents_b) + return latents end -@gen (static) function _no_event_clause(pair_idx, latents::Vector{BulletElemLatents}) - return Type{NoEvent} +@gen function _no_event_clause(pair_idx, latents::Vector{BulletElemLatents}) + return latents end """ @@ -157,7 +160,7 @@ function clause(::Type{NoEvent}) end """ -objects that are already involved in some events should not be involved in new events + """ function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelation}}) return event_concepts @@ -167,45 +170,90 @@ function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelati end end +## TODO: add Pkg revise + + +# map mcmc kernel (link: https://www.gen.dev/docs/stable/ref/mcmc/#Composing-Stationary-Kernels) +# set of proposal functions + +# change randomly clause choices of mass +# revise for which event, modify the categorical +# e.g. another event type for the same pair or another event for one event type + + +# cognition: computation around events +# modelling: changepoint model with Switch combinator +# inference: change types of events to help inference being faster + + """ iterate over event concepts and evaluate predicates to active/deactive """ @gen function event_kernel(state::CPState, event_concepts::Vector{Type{<:EventRelation}}) - # TODO: filter out invalid event relations (e.g., a collision is already active between a and b) - #relations = valid_relations(state, event_concepts) - - # activate new events - object_pairs = collect(combinations(state.bullet_state.kinematics, 2)) # get pairs of objects - # map active events to weights 2D tensor for birth decision - - weights = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs] - push!(weights, 1 - min(1, sum(weights))) # for no event - weights = weights ./ sum(weights) - #println(weights) - + println("-------") + object_pairs = collect(combinations(state.bullet_state.kinematics, 2)) pair_idx = repeat(collect(combinations(1:length(state.bullet_state.kinematics), 2)), length(event_concepts)) - push!(pair_idx, Vector([0,0])) # for no event + pair_idx = [[0,0], pair_idx...] # for no event #println(pair_idx) - - # draw one event overall - event_idx = @trace(categorical(weights), :event_idx) - active_events = [state.active_events..., event_idx] - #push!(active_events, event_idx) - #println(active_events) - # Switch combinator to evaluate clauses for each event - events = vcat([repeat([event_type], length(object_pairs)) for event_type in event_concepts]..., NoEvent) - event = @trace(Gen.Switch(map(clause, events)...)(event_idx, pair_idx[event_idx], state.bullet_state.latents), :event) + # map possible events to weight vector for birth decision using the predicates + predicates = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs] + print("Predicates: ") + println(predicates) - # TODO: some new events kill old events + # randomly draw a starting and an ending event + # birth + weights = copy(predicates) + for idx in state.active_events # active events should not be born again + weights[idx-1] = 0 + end + weights = [max(0, 1 - sum(weights)), weights...] + # TODO: objects that are already involved in some events should not be involved in other event types as well + weights_normalized = weights ./ sum(weights) + println(weights_normalized) + + # Draw born event + events = vcat(NoEvent, [repeat([event_type], length(object_pairs)) for event_type in event_concepts]...) + + start_event_idx = @trace(categorical(weights_normalized), :start_event_idx) + if start_event_idx > 1 + push!(state.active_events, start_event_idx) + print("Event started: ") + print(events[start_event_idx]) + println(pair_idx[start_event_idx]) + end - return active_events + # Evaluate clauses for the born event + + updated_latents = @trace(Gen.Switch(map(clause, events)...)(start_event_idx, pair_idx[start_event_idx], state.bullet_state.latents), :event) + bullet_state = setproperties(state.bullet_state; latents = updated_latents) + + # death of old active events + #println([1.0-predicates[idx] for idx in 1:length(predicates)]) + # TODO: think about another death probability function, maybe including event age, or add death predicate + weights = [(idx+1 in state.active_events && idx+1 != start_event_idx) ? (1.0 - predicates[idx]) : 0.0 for idx in 1:length(predicates)] # dying has the opposite chance of being born + #print("Unnormalized death weights: ") + #println(weights) + weights = [max(0, 1-sum(weights)), weights...] # no event at index 1 + weights = weights ./ sum(weights) # normalize + #print("Normalized death weights: ") + #println(weights) + end_event_idx = @trace(categorical(weights), :end_event_idx) + #println(end_event_idx) + if end_event_idx > 1 # nothing happens when no event dies + delete!(state.active_events, end_event_idx) + print("Ended event: ") + print(events[end_event_idx]) + println(pair_idx[end_event_idx]) + end + + return state.active_events, bullet_state end """ for one object, observe the noisy position in every dimension """ -@gen (static) function observe_position(k::RigidBodyState, noise::Float64) +@gen function observe_position(k::RigidBodyState, noise::Float64) pos = k.position # add noise to position obs = @trace(broadcasted_normal(pos, noise), :positions) @@ -215,12 +263,12 @@ end """ for one time step, run event and physics kernel """ -@gen (static) function kernel(t::Int, prev_state::CPState, params::CPParams) +@gen function kernel(t::Int, prev_state::CPState, params::CPParams) # event kernel - active_events = @trace(event_kernel(prev_state, params.event_concepts), :events) + active_events, bullet_state = @trace(event_kernel(prev_state, params.event_concepts), :events) # simulate physics for the next step based on the current state and observe positions - bullet_state::BulletState = PhySMC.step(params.sim, prev_state.bullet_state) + bullet_state::BulletState = PhySMC.step(params.sim, bullet_state) obs = @trace(Gen.Map(observe_position)(bullet_state.kinematics, Fill(params.obs_noise, params.n_objects)), :observe) next_state = CPState(bullet_state, active_events) @@ -230,7 +278,7 @@ end """ generate physical scene with changepoints in the belief state """ -@gen (static) function cp_model(t::Int, params::CPParams) +@gen function cp_model(t::Int, params::CPParams) # initalize the kinematic and event state init_state = @trace(cp_prior(params), :prior) diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 53080d7..5fb2b88 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -1,9 +1,10 @@ +using Revise using Gen using GalileoEvents mass_ratio = 2.0 obj_frictions = (0.3, 0.3) -obj_positions = (0.5, 1.5) +obj_positions = (0.5, 1.2) mprior = MaterialPrior([unknown_material]) pprior = PhysPrior((3.0, 10.0), # mass @@ -16,16 +17,35 @@ t = 120 function forward_test() client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) event_concepts = Type{<:EventRelation}[Collision] - cp_params = CPParams(client, [a,b, b], mprior, pprior, event_concepts, obs_noise) - trace, _ = Gen.generate(cp_model, (t, cp_params)) + cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) + addr = :prior => :objects => 1 => :mass + cm = Gen.choicemap(addr => 30) + trace, _ = Gen.generate(cp_model, (t, cp_params), cm) + #display(get_choices(trace)) +end + +# constrained generation +function constrained_test() + client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) + event_concepts = Type{<:EventRelation}[Collision] + cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) + + addr = 10 => :events => :start_event_idx + cm = Gen.choicemap(addr => 1) + trace, _ = Gen.generate(cp_model, (t, cp_params), cm) display(get_choices(trace)) end +# gen regenerate + function update_test() + t = 120 + client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) - mc_params = MCParams(client, [a,b], mprior, pprior, obs_noise) - trace, _ = Gen.generate(mc_gm, (t, mc_params)) + event_concepts = Type{<:EventRelation}[Collision] + cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) + trace, _ = Gen.generate(cp_model, (t, cp_params)) addr = :prior => :objects => 1 => :mass cm = Gen.choicemap(addr => trace[addr] + 3) @@ -41,5 +61,68 @@ function update_test() end -forward_test() +function update_test_2() + t = 120 + + client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) + event_concepts = Type{<:EventRelation}[Collision] + cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) + trace, _ = Gen.generate(cp_model, (t, cp_params)) + + addr = :prior => :objects => 1 => :mass + cm = Gen.choicemap(addr => trace[addr] + 3) + trace2, _ = Gen.update(trace, cm) + + # compare final positions + t=120 + pos1 = Vector(get_retval(trace)[t].bullet_state.kinematics[1].position) + pos2 = Vector(get_retval(trace2)[t].bullet_state.kinematics[1].position) + @assert pos1 != pos2 + + # TODO: more tests that include events + + return trace, trace2 +end + + +# test switch combinator in terms of gen's reaction to proposed changes + +# toy model for dealing with complexing +# random walk with 2 delta functions (gaussian vs uniform) chosen by switch +# initial trace is changed by a mh proposal for switch index +# static first, unfold complexity second step + +@gen function function1() + v ~ normal(0., 1.) +end + +@gen function function2() + v ~ uniform(-1., 1.) +end + +@gen function choose_delta(i::Int64) + function_idx = @trace(categorical([0.5, 0.5]), (:function, i)) + delta ~ Gen.Switch(function1, function2)(function_idx) +end + +@gen function switch_model() + n = @trace(poisson(5), :n) + total = 0. + for i=1:n + function_idx = @trace(categorical([0.5, 0.5]), (:function, i)) + total += @trace(Gen.Switch(function1, function2)(function_idx), (:x, i)) + end + @trace(normal(total, 1.), :y) + total +end + +function switch_test() + trace, _ = Gen.generate(switch_model, ()) + display(get_choices(trace)) +end + +switch_test() + +#forward_test() +#constrained_test() #update_test() \ No newline at end of file From 9d88fa9204125257e75394bda3eaab28d44d3c61 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Fri, 20 Oct 2023 15:02:42 -0400 Subject: [PATCH 06/23] write simple switch test --- test/gms/cp_gm.jl | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 5fb2b88..d44dd20 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -1,4 +1,3 @@ -using Revise using Gen using GalileoEvents @@ -100,29 +99,41 @@ end v ~ uniform(-1., 1.) end -@gen function choose_delta(i::Int64) - function_idx = @trace(categorical([0.5, 0.5]), (:function, i)) - delta ~ Gen.Switch(function1, function2)(function_idx) -end +@gen function switch_model_static() + function_idx = @trace(categorical([0.5, 0.5]), :function) -@gen function switch_model() - n = @trace(poisson(5), :n) - total = 0. - for i=1:n - function_idx = @trace(categorical([0.5, 0.5]), (:function, i)) - total += @trace(Gen.Switch(function1, function2)(function_idx), (:x, i)) - end - @trace(normal(total, 1.), :y) - total + x = @trace(Gen.Switch(function1, function2)(function_idx), :x) + + y = @trace(normal(x, 1.), :y) end -function switch_test() - trace, _ = Gen.generate(switch_model, ()) +function switch_test_static() + # unconstrained generation + trace, _ = Gen.generate(switch_model_static, ()) display(get_choices(trace)) + + # constrained generation + cm = Gen.choicemap(:function => 1) + trace2, _ = Gen.generate(switch_model_static, (), cm) + display(get_choices(trace2)) + + # update trace + trace3, _ = Gen.update(trace, cm) + display(get_choices(trace3)) +end + + + +@gen function switch_model_unfold() + function_idx = @trace(categorical([0.5, 0.5]), :function) + + x = @trace(Gen.Switch(function1, function2)(function_idx), :x) + + y = @trace(normal(x, 1.), :y) end -switch_test() +switch_test_static() #forward_test() #constrained_test() #update_test() \ No newline at end of file From 49caf3d40902aa09ba4d87209c6df754b109f853 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Sun, 22 Oct 2023 20:40:34 -0400 Subject: [PATCH 07/23] update distance function --- src/gms/cp_gm_pb.jl | 8 ++++++-- test/gms/cp_gm.jl | 9 +++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index f673c07..f38e81c 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -1,3 +1,4 @@ +using Revise export CPParams, CPState, @@ -112,9 +113,12 @@ end Bernoulli weight that event relation holds """ function predicate(t::Type{Collision}, a::RigidBodyState, b::RigidBodyState) + println(a) d = norm(Vector(a.position)-Vector(b.position)) # l2 distance - @show d - clamp(1.0 - exp(-d), 0., 1.) + + #@show d + + clamp(exp(-20d), 0., 1.) end # TODO: surface distances, use pybullet (contact maybe not helpful) diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index d44dd20..d5af53f 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -1,3 +1,4 @@ +using Revise using Gen using GalileoEvents @@ -19,7 +20,8 @@ function forward_test() cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) addr = :prior => :objects => 1 => :mass cm = Gen.choicemap(addr => 30) - trace, _ = Gen.generate(cp_model, (t, cp_params), cm) + trace, _ = Gen.generate(cp_model, (t, cp_params), cm); + println("") #display(get_choices(trace)) end @@ -123,7 +125,6 @@ function switch_test_static() end - @gen function switch_model_unfold() function_idx = @trace(categorical([0.5, 0.5]), :function) @@ -133,7 +134,7 @@ end end -switch_test_static() -#forward_test() +#switch_test_static() +forward_test() #constrained_test() #update_test() \ No newline at end of file From 0667f3c2cfcc1301bab52e8ee6967e0e7fd1e6d6 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Tue, 24 Oct 2023 17:34:09 -0400 Subject: [PATCH 08/23] add event visualization --- Manifest.toml | 2 +- Project.toml | 1 + src/gms/cp_gm_pb.jl | 37 ++++++++++++++++++------------------- test/gms/cp_gm.jl | 36 +++++++++++++++++++++++++++++++++--- 4 files changed, 53 insertions(+), 23 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 7bcc38b..fbd4586 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.9.3" manifest_format = "2.0" -project_hash = "6c92244b6b2c576cb0a17ab8a9dd1f5a2f86d403" +project_hash = "87c0603f65be5921938c725fd12195c48bc0f93f" [[deps.Accessors]] deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Test"] diff --git a/Project.toml b/Project.toml index 0ce58f8..95a084f 100644 --- a/Project.toml +++ b/Project.toml @@ -15,5 +15,6 @@ LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a" PhyBullet = "63daae69-5b14-439d-ac6f-096429ca839b" PhySMC = "79c1e2f5-7911-41a0-b248-4858717ddd79" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index f38e81c..47e3451 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -103,7 +103,7 @@ initializes belief about all objects and events bullet_state = setproperties(params.template; latents = new_latents) # initialize the event state - active_events = Set{EventRelation}() + active_events = Set{Int64}() init_state = CPState(bullet_state, active_events) return init_state @@ -113,12 +113,11 @@ end Bernoulli weight that event relation holds """ function predicate(t::Type{Collision}, a::RigidBodyState, b::RigidBodyState) - println(a) + #println(a) d = norm(Vector(a.position)-Vector(b.position)) # l2 distance #@show d - - clamp(exp(-20d), 0., 1.) + clamp(exp(-10d), 0., 1.) end # TODO: surface distances, use pybullet (contact maybe not helpful) @@ -194,7 +193,7 @@ end iterate over event concepts and evaluate predicates to active/deactive """ @gen function event_kernel(state::CPState, event_concepts::Vector{Type{<:EventRelation}}) - println("-------") + #println("-------") object_pairs = collect(combinations(state.bullet_state.kinematics, 2)) pair_idx = repeat(collect(combinations(1:length(state.bullet_state.kinematics), 2)), length(event_concepts)) pair_idx = [[0,0], pair_idx...] # for no event @@ -202,29 +201,29 @@ iterate over event concepts and evaluate predicates to active/deactive # map possible events to weight vector for birth decision using the predicates predicates = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs] - print("Predicates: ") - println(predicates) + #@show predicates # randomly draw a starting and an ending event # birth weights = copy(predicates) - for idx in state.active_events # active events should not be born again + active_events = copy(state.active_events) + for idx in active_events # active events should not be born again weights[idx-1] = 0 end weights = [max(0, 1 - sum(weights)), weights...] # TODO: objects that are already involved in some events should not be involved in other event types as well weights_normalized = weights ./ sum(weights) - println(weights_normalized) + # println(weights_normalized) # Draw born event events = vcat(NoEvent, [repeat([event_type], length(object_pairs)) for event_type in event_concepts]...) start_event_idx = @trace(categorical(weights_normalized), :start_event_idx) if start_event_idx > 1 - push!(state.active_events, start_event_idx) - print("Event started: ") - print(events[start_event_idx]) - println(pair_idx[start_event_idx]) + push!(active_events, start_event_idx) + #print("Event started: ") + #print(events[start_event_idx]) + #println(pair_idx[start_event_idx]) end # Evaluate clauses for the born event @@ -235,7 +234,7 @@ iterate over event concepts and evaluate predicates to active/deactive # death of old active events #println([1.0-predicates[idx] for idx in 1:length(predicates)]) # TODO: think about another death probability function, maybe including event age, or add death predicate - weights = [(idx+1 in state.active_events && idx+1 != start_event_idx) ? (1.0 - predicates[idx]) : 0.0 for idx in 1:length(predicates)] # dying has the opposite chance of being born + weights = [(idx+1 in active_events && idx+1 != start_event_idx) ? (1.0 - predicates[idx]) : 0.0 for idx in 1:length(predicates)] # dying has the opposite chance of being born #print("Unnormalized death weights: ") #println(weights) weights = [max(0, 1-sum(weights)), weights...] # no event at index 1 @@ -245,13 +244,13 @@ iterate over event concepts and evaluate predicates to active/deactive end_event_idx = @trace(categorical(weights), :end_event_idx) #println(end_event_idx) if end_event_idx > 1 # nothing happens when no event dies - delete!(state.active_events, end_event_idx) - print("Ended event: ") - print(events[end_event_idx]) - println(pair_idx[end_event_idx]) + delete!(active_events, end_event_idx) + #print("Ended event: ") + #print(events[end_event_idx]) + #println(pair_idx[end_event_idx]) end - return state.active_events, bullet_state + return active_events, bullet_state end """ diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index d5af53f..4005a6a 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -1,6 +1,7 @@ using Revise using Gen using GalileoEvents +using Plots mass_ratio = 2.0 obj_frictions = (0.3, 0.3) @@ -25,6 +26,33 @@ function forward_test() #display(get_choices(trace)) end +function visualize_active_events() + client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) + event_concepts = Type{<:EventRelation}[Collision] + cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) + + cm = Gen.choicemap() + cm[:prior => :objects => 1 => :mass] = 10 + cm[:prior => :objects => 2 => :mass] = 10 + + cumulative_active_events = zeros(Int, t) + cumulative_started_events = zeros(Int, t) + cumulative_ended_events = zeros(Int, t) + num_traces = 1000 + for i in 1:num_traces + trace, _ = Gen.generate(cp_model, (t, cp_params), cm); + cumulative_active_events .+= [length(trace[:kernel=>j=>:events][1]) for j in 1:t] + cumulative_started_events .+= [Int(trace[:kernel=>j=>:events=>:start_event_idx]>1) for j in 1:t] + cumulative_ended_events .+= [Int(trace[:kernel=>j=>:events=>:end_event_idx]>1) for j in 1:t] + end + + for (var, filename) in zip([cumulative_active_events, cumulative_started_events, cumulative_ended_events], + ["active_events.png", "started_events.png", "ended_events.png"]) + plt = plot(1:t, var ./ num_traces, xlabel="t", ylabel="average events", legend=false, yrotation=90) + savefig(plt, filename) + end +end + # constrained generation function constrained_test() client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) @@ -134,7 +162,9 @@ end end -#switch_test_static() -forward_test() + +#forward_test() +visualize_active_events() #constrained_test() -#update_test() \ No newline at end of file +#update_test() +#switch_test_static() \ No newline at end of file From e3bfd5b342b40b0857c6c94f2d85080c1da8ba9f Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 1 Nov 2023 11:55:27 -0400 Subject: [PATCH 09/23] improve event plotting and detection --- src/gms/cp_gm_pb.jl | 62 ++++++++++----------------------- test/gms/cp_gm.jl | 55 +++++++++++++++++++++-------- test/gms/plots/events.png | Bin 0 -> 13052 bytes test/gms/plots/x_positions.png | Bin 0 -> 15459 bytes 4 files changed, 59 insertions(+), 58 deletions(-) create mode 100644 test/gms/plots/events.png create mode 100644 test/gms/plots/x_positions.png diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 47e3451..defe8fc 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -38,12 +38,14 @@ struct CPParams <: GMParams template::BulletState n_objects::Int64 obs_noise::Float64 + death_factor::Float64 end function CPParams(client::Int64, objs::Vector{Int64}, mprior::MaterialPrior, pprior::PhysPrior, event_concepts::Vector{Type{<:EventRelation}}, - obs_noise::Float64=0.) + obs_noise::Float64=0., + death_factor=10.) # configure simulator with the provided # client id sim = BulletSim(;client=client) @@ -54,7 +56,7 @@ function CPParams(client::Int64, objs::Vector{Int64}, # Note: alternative latents will be suggested by the `prior` template = BulletState(sim, rigid_bodies) - CPParams(mprior, pprior, event_concepts, sim, template, length(objs), obs_noise) + CPParams(mprior, pprior, event_concepts, sim, template, length(objs), obs_noise, death_factor) end """ @@ -113,11 +115,11 @@ end Bernoulli weight that event relation holds """ function predicate(t::Type{Collision}, a::RigidBodyState, b::RigidBodyState) - #println(a) - d = norm(Vector(a.position)-Vector(b.position)) # l2 distance - - #@show d - clamp(exp(-10d), 0., 1.) + if norm(Vector(a.linear_vel)-Vector(b.linear_vel)) < 0.01 + return 0 + end + d = norm(Vector(a.position)-Vector(b.position))-0.175 # l2 distance + clamp(exp(-15d), 0., 1.) end # TODO: surface distances, use pybullet (contact maybe not helpful) @@ -173,9 +175,6 @@ function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelati end end -## TODO: add Pkg revise - - # map mcmc kernel (link: https://www.gen.dev/docs/stable/ref/mcmc/#Composing-Stationary-Kernels) # set of proposal functions @@ -184,27 +183,18 @@ end # e.g. another event type for the same pair or another event for one event type -# cognition: computation around events -# modelling: changepoint model with Switch combinator -# inference: change types of events to help inference being faster - - """ iterate over event concepts and evaluate predicates to active/deactive """ -@gen function event_kernel(state::CPState, event_concepts::Vector{Type{<:EventRelation}}) - #println("-------") +@gen function event_kernel(state::CPState, params::CPParams) object_pairs = collect(combinations(state.bullet_state.kinematics, 2)) - pair_idx = repeat(collect(combinations(1:length(state.bullet_state.kinematics), 2)), length(event_concepts)) + pair_idx = repeat(collect(combinations(1:length(state.bullet_state.kinematics), 2)), length(params.event_concepts)) pair_idx = [[0,0], pair_idx...] # for no event - #println(pair_idx) # map possible events to weight vector for birth decision using the predicates - predicates = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs] - #@show predicates + predicates = [predicate(event_type, a, b) for event_type in params.event_concepts for (a, b) in object_pairs] - # randomly draw a starting and an ending event - # birth + # birth of one or no random event weights = copy(predicates) active_events = copy(state.active_events) for idx in active_events # active events should not be born again @@ -213,41 +203,27 @@ iterate over event concepts and evaluate predicates to active/deactive weights = [max(0, 1 - sum(weights)), weights...] # TODO: objects that are already involved in some events should not be involved in other event types as well weights_normalized = weights ./ sum(weights) - # println(weights_normalized) # Draw born event - events = vcat(NoEvent, [repeat([event_type], length(object_pairs)) for event_type in event_concepts]...) + events = vcat(NoEvent, [repeat([event_type], length(object_pairs)) for event_type in params.event_concepts]...) start_event_idx = @trace(categorical(weights_normalized), :start_event_idx) if start_event_idx > 1 push!(active_events, start_event_idx) - #print("Event started: ") - #print(events[start_event_idx]) - #println(pair_idx[start_event_idx]) end - # Evaluate clauses for the born event - updated_latents = @trace(Gen.Switch(map(clause, events)...)(start_event_idx, pair_idx[start_event_idx], state.bullet_state.latents), :event) bullet_state = setproperties(state.bullet_state; latents = updated_latents) - # death of old active events - #println([1.0-predicates[idx] for idx in 1:length(predicates)]) - # TODO: think about another death probability function, maybe including event age, or add death predicate - weights = [(idx+1 in active_events && idx+1 != start_event_idx) ? (1.0 - predicates[idx]) : 0.0 for idx in 1:length(predicates)] # dying has the opposite chance of being born - #print("Unnormalized death weights: ") - #println(weights) + # death of one or no active event + weights = [(idx+1 in active_events && idx+1 != start_event_idx) ? max(1. - predicates[idx] * params.death_factor, 0.) : 0.0 for idx in 1:length(predicates)] # dying has a much lower chance of being born + weights = [max(0, 1-sum(weights)), weights...] # no event at index 1 weights = weights ./ sum(weights) # normalize - #print("Normalized death weights: ") - #println(weights) + end_event_idx = @trace(categorical(weights), :end_event_idx) - #println(end_event_idx) if end_event_idx > 1 # nothing happens when no event dies delete!(active_events, end_event_idx) - #print("Ended event: ") - #print(events[end_event_idx]) - #println(pair_idx[end_event_idx]) end return active_events, bullet_state @@ -268,7 +244,7 @@ for one time step, run event and physics kernel """ @gen function kernel(t::Int, prev_state::CPState, params::CPParams) # event kernel - active_events, bullet_state = @trace(event_kernel(prev_state, params.event_concepts), :events) + active_events, bullet_state = @trace(event_kernel(prev_state, params), :events) # simulate physics for the next step based on the current state and observe positions bullet_state::BulletState = PhySMC.step(params.sim, bullet_state) diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 4005a6a..8d84be8 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -2,6 +2,7 @@ using Revise using Gen using GalileoEvents using Plots +ENV["GKSwstype"]="160" # fixes some plotting warnings mass_ratio = 2.0 obj_frictions = (0.3, 0.3) @@ -26,31 +27,55 @@ function forward_test() #display(get_choices(trace)) end +function add_rectangle!(plt, xstart, xend, y; height=0.8, color=:blue) + xvals = [xstart, xend, xend, xstart, xstart] + yvals = [y, y, y+height, y+height, y] + plot!(plt, xvals, yvals, fill=true, seriestype=:shape, fillcolor=color, linecolor=color) +end + +get_x2(trace, t) = get_retval(trace)[t].bullet_state.kinematics[2].position[1] + function visualize_active_events() client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) event_concepts = Type{<:EventRelation}[Collision] cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) cm = Gen.choicemap() - cm[:prior => :objects => 1 => :mass] = 10 - cm[:prior => :objects => 2 => :mass] = 10 - - cumulative_active_events = zeros(Int, t) - cumulative_started_events = zeros(Int, t) - cumulative_ended_events = zeros(Int, t) - num_traces = 1000 + cm[:prior => :objects => 1 => :mass] = 2 + cm[:prior => :objects => 2 => :mass] = 1 + cm[:prior => :objects => 1 => :friction] = 0.5 + cm[:prior => :objects => 2 => :friction] = 1.2 + cm[:prior => :objects => 1 => :restitution] = 0.2 + cm[:prior => :objects => 2 => :restitution] = 0.2 + + num_traces = 50 + plt = plot(legend=false, xlim=(0, t), ylim=(1, num_traces+1), yrotation=90, ylabel="Trace", yticks=false, xlabel="Time step") + collision_t = nothing for i in 1:num_traces + if i % 10 == 0 + @show i + end trace, _ = Gen.generate(cp_model, (t, cp_params), cm); - cumulative_active_events .+= [length(trace[:kernel=>j=>:events][1]) for j in 1:t] - cumulative_started_events .+= [Int(trace[:kernel=>j=>:events=>:start_event_idx]>1) for j in 1:t] - cumulative_ended_events .+= [Int(trace[:kernel=>j=>:events=>:end_event_idx]>1) for j in 1:t] - end - for (var, filename) in zip([cumulative_active_events, cumulative_started_events, cumulative_ended_events], - ["active_events.png", "started_events.png", "ended_events.png"]) - plt = plot(1:t, var ./ num_traces, xlabel="t", ylabel="average events", legend=false, yrotation=90) - savefig(plt, filename) + start = nothing + first_x = i==1 ? get_x2(trace, 1) : nothing # only look for collision in first trace + for j in 1:t + if trace[:kernel=>j=>:events=>:start_event_idx]==2 + start = j + end + if trace[:kernel=>j=>:events=>:end_event_idx]==2 + finish = j + add_rectangle!(plt, start, finish, i) + end + if first_x !== nothing && abs(first_x - get_x2(trace, j)) > 0.001 + collision_t = j + first_x = nothing + end + end + end + vline!(plt, [collision_t], linecolor=:red, linewidth=2, label="Vertical Line") + savefig(plt, "test/gms/plots/events.png") end # constrained generation diff --git a/test/gms/plots/events.png b/test/gms/plots/events.png new file mode 100644 index 0000000000000000000000000000000000000000..0e70bbb710dbc8ed9c5272101797a2bac552c579 GIT binary patch literal 13052 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 QI3$Z)SJ6@~Q?v~EAJ#rIKmY&$ literal 0 HcmV?d00001 From 5359dd172724d735041db155326865be7b135a63 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 1 Nov 2023 14:16:46 -0400 Subject: [PATCH 10/23] fix switch test --- src/gms/cp_gm_pb.jl | 4 ++- test/gms/cp_gm.jl | 71 ++++++++++++++++++--------------------------- 2 files changed, 31 insertions(+), 44 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index defe8fc..d1efc9a 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -212,7 +212,9 @@ iterate over event concepts and evaluate predicates to active/deactive push!(active_events, start_event_idx) end - updated_latents = @trace(Gen.Switch(map(clause, events)...)(start_event_idx, pair_idx[start_event_idx], state.bullet_state.latents), :event) + switch = Gen.Switch(map(clause, events)...) + + updated_latents = @trace(switch(start_event_idx, pair_idx[start_event_idx], state.bullet_state.latents), :event) bullet_state = setproperties(state.bullet_state; latents = updated_latents) # death of one or no active event diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 8d84be8..2bce384 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -16,6 +16,14 @@ pprior = PhysPrior((3.0, 10.0), # mass obs_noise = 0.05 t = 120 +fixed_prior_cm = Gen.choicemap() +fixed_prior_cm[:prior => :objects => 1 => :mass] = 2 +fixed_prior_cm[:prior => :objects => 2 => :mass] = 1 +fixed_prior_cm[:prior => :objects => 1 => :friction] = 0.5 +fixed_prior_cm[:prior => :objects => 2 => :friction] = 1.2 +fixed_prior_cm[:prior => :objects => 1 => :restitution] = 0.2 +fixed_prior_cm[:prior => :objects => 2 => :restitution] = 0.2 + function forward_test() client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) event_concepts = Type{<:EventRelation}[Collision] @@ -38,15 +46,7 @@ get_x2(trace, t) = get_retval(trace)[t].bullet_state.kinematics[2].position[1] function visualize_active_events() client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) event_concepts = Type{<:EventRelation}[Collision] - cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) - - cm = Gen.choicemap() - cm[:prior => :objects => 1 => :mass] = 2 - cm[:prior => :objects => 2 => :mass] = 1 - cm[:prior => :objects => 1 => :friction] = 0.5 - cm[:prior => :objects => 2 => :friction] = 1.2 - cm[:prior => :objects => 1 => :restitution] = 0.2 - cm[:prior => :objects => 2 => :restitution] = 0.2 + cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) num_traces = 50 plt = plot(legend=false, xlim=(0, t), ylim=(1, num_traces+1), yrotation=90, ylabel="Trace", yticks=false, xlabel="Time step") @@ -55,7 +55,7 @@ function visualize_active_events() if i % 10 == 0 @show i end - trace, _ = Gen.generate(cp_model, (t, cp_params), cm); + trace, _ = Gen.generate(cp_model, (t, cp_params), fixed_prior_cm); start = nothing first_x = i==1 ? get_x2(trace, 1) : nothing # only look for collision in first trace @@ -90,9 +90,6 @@ function constrained_test() display(get_choices(trace)) end -# gen regenerate - - function update_test() t = 120 @@ -114,26 +111,23 @@ function update_test() return trace, trace2 end - +# change event start function update_test_2() - t = 120 client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) event_concepts = Type{<:EventRelation}[Collision] cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) - trace, _ = Gen.generate(cp_model, (t, cp_params)) - addr = :prior => :objects => 1 => :mass - cm = Gen.choicemap(addr => trace[addr] + 3) - trace2, _ = Gen.update(trace, cm) - - # compare final positions - t=120 - pos1 = Vector(get_retval(trace)[t].bullet_state.kinematics[1].position) - pos2 = Vector(get_retval(trace2)[t].bullet_state.kinematics[1].position) - @assert pos1 != pos2 + # generate initial trace + trace, _ = Gen.generate(cp_model, (t, cp_params)) - # TODO: more tests that include events + # find first born event + + + cm = copy(fixed_prior_cm) + cm[:kernel => 50 => :events => :start_event_idx] = + trace2, _ = Gen.update(trace, fixed_prior_cm) + trace3, _ = Gen.regenerate(trace2, select(:kernel => 50 => :events => :start_event_idx)) return trace, trace2 end @@ -154,11 +148,11 @@ end v ~ uniform(-1., 1.) end +switch = Gen.Switch(function1, function2) + @gen function switch_model_static() function_idx = @trace(categorical([0.5, 0.5]), :function) - - x = @trace(Gen.Switch(function1, function2)(function_idx), :x) - + x = @trace(switch(function_idx), :x) y = @trace(normal(x, 1.), :y) end @@ -172,24 +166,15 @@ function switch_test_static() trace2, _ = Gen.generate(switch_model_static, (), cm) display(get_choices(trace2)) - # update trace + # update and regenerate trace trace3, _ = Gen.update(trace, cm) - display(get_choices(trace3)) -end - - -@gen function switch_model_unfold() - function_idx = @trace(categorical([0.5, 0.5]), :function) - - x = @trace(Gen.Switch(function1, function2)(function_idx), :x) - - y = @trace(normal(x, 1.), :y) + trace4, _ = Gen.regenerate(trace3, select(:y)) + display(get_choices(trace4)) end - - #forward_test() -visualize_active_events() +#visualize_active_events() #constrained_test() #update_test() +update_test_2() #switch_test_static() \ No newline at end of file From 53f27903f25a1dc30919dea8b15043461b16ba4a Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Tue, 14 Nov 2023 17:34:50 -0500 Subject: [PATCH 11/23] fix regenerating event traces --- Manifest.toml | 4 +-- src/gms/cp_gm_pb.jl | 22 +++++++++------ test/gms/cp_gm.jl | 58 +++++++++++++++++++++++++++++--------- test/gms/plots/events.png | Bin 13052 -> 13144 bytes 4 files changed, 60 insertions(+), 24 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index fbd4586..00fd886 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -738,8 +738,8 @@ uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "2.7.2" [[deps.PhyBullet]] -deps = ["Accessors", "Conda", "Distributions", "DocStringExtensions", "Gen", "Parameters", "PhySMC", "Plots", "PyCall", "Revise", "StaticArrays", "UnicodePlots"] -git-tree-sha1 = "f553bbf8cfdc3a291380ee17f600f818f6cad054" +deps = ["Accessors", "Conda", "Distributions", "DocStringExtensions", "Gen", "Parameters", "PhySMC", "PyCall", "Revise", "StaticArrays", "UnicodePlots"] +git-tree-sha1 = "9fddd996bd0e0fded73a3a15d7f579e1f76cc46f" repo-rev = "master" repo-url = "https://github.com/CNCLgithub/PhyBullet" uuid = "63daae69-5b14-439d-ac6f-096429ca839b" diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index d1efc9a..909d79e 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -118,12 +118,13 @@ function predicate(t::Type{Collision}, a::RigidBodyState, b::RigidBodyState) if norm(Vector(a.linear_vel)-Vector(b.linear_vel)) < 0.01 return 0 end - d = norm(Vector(a.position)-Vector(b.position))-0.175 # l2 distance + + a_dim = a.aabb[2] - a.aabb[1] + b_dim = b.aabb[2] - b.aabb[1] + d = norm(Vector(a.position)-Vector(b.position))-norm((a_dim+b_dim)/2) # l2 distance clamp(exp(-15d), 0., 1.) end -# TODO: surface distances, use pybullet (contact maybe not helpful) - # gen functional collections """ @@ -182,17 +183,22 @@ end # revise for which event, modify the categorical # e.g. another event type for the same pair or another event for one event type +@gen function event_switch(clause, events, start_event_idx, pair, latents) + switch = Gen.Switch(map(clause, events)...) + return switch(start_event_idx, pair, latents) +end """ iterate over event concepts and evaluate predicates to active/deactive """ @gen function event_kernel(state::CPState, params::CPParams) - object_pairs = collect(combinations(state.bullet_state.kinematics, 2)) - pair_idx = repeat(collect(combinations(1:length(state.bullet_state.kinematics), 2)), length(params.event_concepts)) + obj_states = state.bullet_state.kinematics + object_pairs = collect(combinations(obj_states, 2)) + pair_idx = repeat(collect(combinations(1:length(obj_states), 2)), length(params.event_concepts)) pair_idx = [[0,0], pair_idx...] # for no event # map possible events to weight vector for birth decision using the predicates - predicates = [predicate(event_type, a, b) for event_type in params.event_concepts for (a, b) in object_pairs] + predicates = [predicate(event_type, a, b) for event_type in params.event_concepts for (a, b) in object_pairs] # birth of one or no random event weights = copy(predicates) @@ -212,9 +218,9 @@ iterate over event concepts and evaluate predicates to active/deactive push!(active_events, start_event_idx) end - switch = Gen.Switch(map(clause, events)...) + - updated_latents = @trace(switch(start_event_idx, pair_idx[start_event_idx], state.bullet_state.latents), :event) + updated_latents = @trace(event_switch(clause, events, start_event_idx, pair_idx[start_event_idx], state.bullet_state.latents), :event) bullet_state = setproperties(state.bullet_state; latents = updated_latents) # death of one or no active event diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 2bce384..81f47be 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -28,11 +28,10 @@ function forward_test() client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) event_concepts = Type{<:EventRelation}[Collision] cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) - addr = :prior => :objects => 1 => :mass - cm = Gen.choicemap(addr => 30) - trace, _ = Gen.generate(cp_model, (t, cp_params), cm); + + trace, _ = Gen.generate(cp_model, (t, cp_params)); println("") - #display(get_choices(trace)) + display(get_choices(trace)) end function add_rectangle!(plt, xstart, xend, y; height=0.8, color=:blue) @@ -78,18 +77,19 @@ function visualize_active_events() savefig(plt, "test/gms/plots/events.png") end -# constrained generation +# constrained generation, event 2 must start at timestep 10 function constrained_test() client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) event_concepts = Type{<:EventRelation}[Collision] cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) addr = 10 => :events => :start_event_idx - cm = Gen.choicemap(addr => 1) + cm = Gen.choicemap(addr => 2) trace, _ = Gen.generate(cp_model, (t, cp_params), cm) display(get_choices(trace)) end +# update priors function update_test() t = 120 @@ -121,13 +121,42 @@ function update_test_2() # generate initial trace trace, _ = Gen.generate(cp_model, (t, cp_params)) - # find first born event - + # find first collision in the trace + start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] + t1 = findfirst(x -> x == 2, start_event_indices) + + # move first collision five steps earlier + cm = choicemap(fixed_prior_cm) + cm[:kernel => t1 => :events => :start_event_idx] = 1 + cm[:kernel => t1 - 5 => :events => :start_event_idx] = 2 + trace2, ls2, _... = Gen.update(trace, cm) + trace3, delta_s, _... = Gen.regenerate(trace2, select(:kernel => t1 - 5 => :events => :event)) + + @assert delta_s != -Inf + @assert delta_s != NaN + + return trace, trace2 +end + +# redraw latents at same event start +function update_test_3() + + client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) + event_concepts = Type{<:EventRelation}[Collision] + cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) + + # generate initial trace + trace, _ = Gen.generate(cp_model, (t, cp_params)) + + # find first collision in the trace + start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] + t1 = findfirst(x -> x == 2, start_event_indices) + + # in future maybe gaussian rw + trace2, delta_s, _... = Gen.regenerate(trace, select(:kernel => t1 => :events => :event)) - cm = copy(fixed_prior_cm) - cm[:kernel => 50 => :events => :start_event_idx] = - trace2, _ = Gen.update(trace, fixed_prior_cm) - trace3, _ = Gen.regenerate(trace2, select(:kernel => 50 => :events => :start_event_idx)) + @assert delta_s != -Inf + @assert delta_s != NaN return trace, trace2 end @@ -168,7 +197,7 @@ function switch_test_static() # update and regenerate trace trace3, _ = Gen.update(trace, cm) - trace4, _ = Gen.regenerate(trace3, select(:y)) + trace4, _ = Gen.regenerate(trace3, select(:x)) display(get_choices(trace4)) end @@ -176,5 +205,6 @@ end #visualize_active_events() #constrained_test() #update_test() -update_test_2() +#update_test_2() +update_test_3() #switch_test_static() \ No newline at end of file diff --git a/test/gms/plots/events.png b/test/gms/plots/events.png index 0e70bbb710dbc8ed9c5272101797a2bac552c579..f071e247da5431950ba16bad0bbea8030fe9c691 100644 GIT binary patch literal 13144 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 Date: Wed, 29 Nov 2023 11:25:53 -0500 Subject: [PATCH 12/23] refactor changepoint model --- src/gms/cp_gm_pb.jl | 119 +++++++++++++++++++++----------------------- test/gms/cp_gm.jl | 6 ++- 2 files changed, 62 insertions(+), 63 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 909d79e..57a5e54 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -25,7 +25,7 @@ struct NoEvent <: EventRelation end """ -Parameters for change point model +holds parameters for change point model """ struct CPParams <: GMParams # prior @@ -41,6 +41,9 @@ struct CPParams <: GMParams death_factor::Float64 end +""" +constructs parameter struct for change point model +""" function CPParams(client::Int64, objs::Vector{Int64}, mprior::MaterialPrior, pprior::PhysPrior, event_concepts::Vector{Type{<:EventRelation}}, @@ -142,7 +145,7 @@ update latents of a single element end """ -in case of collision: Gaussian drift update of mass and restitution# +in case of collision: Gaussian drift update of mass and restitution """ @gen function _collision_clause(pair_idx::Vector{Int64}, latents::Vector{BulletElemLatents}) latents[pair_idx[1]] = @trace(update_latents(latents[pair_idx[1]]), :new_latents_a) @@ -150,15 +153,15 @@ in case of collision: Gaussian drift update of mass and restitution# return latents end -@gen function _no_event_clause(pair_idx, latents::Vector{BulletElemLatents}) - return latents +function clause(::Type{Collision}) + _collision_clause end """ -Returns the generative function over latents for the event relation +in case of no event: no change """ -function clause(::Type{Collision}) - _collision_clause +@gen function _no_event_clause(pair_idx, latents::Vector{BulletElemLatents}) + return latents end function clause(::Type{NoEvent}) @@ -176,63 +179,60 @@ function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelati end end -# map mcmc kernel (link: https://www.gen.dev/docs/stable/ref/mcmc/#Composing-Stationary-Kernels) -# set of proposal functions - -# change randomly clause choices of mass -# revise for which event, modify the categorical -# e.g. another event type for the same pair or another event for one event type - -@gen function event_switch(clause, events, start_event_idx, pair, latents) - switch = Gen.Switch(map(clause, events)...) - return switch(start_event_idx, pair, latents) -end - """ -iterate over event concepts and evaluate predicates to active/deactive +map possible events to weight vector for birth decision using the predicates """ -@gen function event_kernel(state::CPState, params::CPParams) - obj_states = state.bullet_state.kinematics +function calculate_predicates(obj_states, event_concepts) object_pairs = collect(combinations(obj_states, 2)) - pair_idx = repeat(collect(combinations(1:length(obj_states), 2)), length(params.event_concepts)) + pair_idx = repeat(collect(combinations(1:length(obj_states), 2)), length(event_concepts)) pair_idx = [[0,0], pair_idx...] # for no event - # map possible events to weight vector for birth decision using the predicates - predicates = [predicate(event_type, a, b) for event_type in params.event_concepts for (a, b) in object_pairs] + predicates = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs] + events = vcat(NoEvent, [repeat([event_type], length(object_pairs)) for event_type in event_concepts]...) + return predicates, events, pair_idx +end - # birth of one or no random event - weights = copy(predicates) - active_events = copy(state.active_events) +function normalize_weights(weights, active_events) for idx in active_events # active events should not be born again weights[idx-1] = 0 end weights = [max(0, 1 - sum(weights)), weights...] # TODO: objects that are already involved in some events should not be involved in other event types as well - weights_normalized = weights ./ sum(weights) - - # Draw born event - events = vcat(NoEvent, [repeat([event_type], length(object_pairs)) for event_type in params.event_concepts]...) - - start_event_idx = @trace(categorical(weights_normalized), :start_event_idx) - if start_event_idx > 1 - push!(active_events, start_event_idx) - end - - - - updated_latents = @trace(event_switch(clause, events, start_event_idx, pair_idx[start_event_idx], state.bullet_state.latents), :event) - bullet_state = setproperties(state.bullet_state; latents = updated_latents) - - # death of one or no active event - weights = [(idx+1 in active_events && idx+1 != start_event_idx) ? max(1. - predicates[idx] * params.death_factor, 0.) : 0.0 for idx in 1:length(predicates)] # dying has a much lower chance of being born + return weights ./ sum(weights) +end +function calculate_death_weights(predicates, active_events, start_event_idx, death_factor) + can_die(idx) = idx+1 in active_events && idx+1 != start_event_idx + # dying has a much lower chance of being born + get_weight(idx) = can_die(idx) ? max(1. - predicates[idx] * death_factor, 0.) : 0.0 + weights = [get_weight(idx) for idx in 1:length(predicates)] weights = [max(0, 1-sum(weights)), weights...] # no event at index 1 - weights = weights ./ sum(weights) # normalize + return weights ./ sum(weights) +end - end_event_idx = @trace(categorical(weights), :end_event_idx) - if end_event_idx > 1 # nothing happens when no event dies - delete!(active_events, end_event_idx) - end +""" +create a Switch combinator to evaluate the corresponding clause for a started event to trace new latents +""" +@gen function event_switch(clause, events, start_event_idx, pair, bullet_state, active_events) + switch = Gen.Switch(map(clause, events)...) + updated_latents = @trace(switch(start_event_idx, pair, bullet_state.latents), :event) # trace latents + bullet_state = setproperties(bullet_state; latents = updated_latents) + start_event_idx > 1 && push!(active_events, start_event_idx) + return bullet_state, active_events +end + +""" +iterate over event concepts and evaluate predicates for newly activated events +""" +@gen function event_kernel(active_events, bullet_state, event_concepts, death_factor) + predicates, events, pair_idx = calculate_predicates(bullet_state.kinematics, event_concepts) + weights = normalize_weights(copy(predicates), active_events) + start_event_idx = @trace(categorical(weights), :start_event_idx) # up to one event is born + bullet_state, active_events = event_switch(clause, events, start_event_idx, pair_idx[start_event_idx], bullet_state, active_events) + + weights = calculate_death_weights(predicates, active_events, start_event_idx, death_factor) + end_event_idx = @trace(categorical(weights), :end_event_idx) # up to one active event dies + end_event_idx > 1 && delete!(active_events, end_event_idx) return active_events, bullet_state end @@ -241,25 +241,22 @@ end for one object, observe the noisy position in every dimension """ @gen function observe_position(k::RigidBodyState, noise::Float64) - pos = k.position - # add noise to position - obs = @trace(broadcasted_normal(pos, noise), :positions) - return obs + @trace(broadcasted_normal(k.position, noise), :positions) end """ -for one time step, run event and physics kernel +run event and physics kernel for one time step and observe noisy positions """ @gen function kernel(t::Int, prev_state::CPState, params::CPParams) - # event kernel - active_events, bullet_state = @trace(event_kernel(prev_state, params), :events) + active_events, bullet_state = @trace(event_kernel(prev_state.active_events, + prev_state.bullet_state, + params.event_concepts, + params.death_factor), :events) - # simulate physics for the next step based on the current state and observe positions bullet_state::BulletState = PhySMC.step(params.sim, bullet_state) - obs = @trace(Gen.Map(observe_position)(bullet_state.kinematics, Fill(params.obs_noise, params.n_objects)), :observe) + @trace(Gen.Map(observe_position)(bullet_state.kinematics, Fill(params.obs_noise, params.n_objects)), :observe) - next_state = CPState(bullet_state, active_events) - return next_state + return CPState(bullet_state, active_events) end """ diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 81f47be..7ee8637 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -31,7 +31,7 @@ function forward_test() trace, _ = Gen.generate(cp_model, (t, cp_params)); println("") - display(get_choices(trace)) + #display(get_choices(trace)) end function add_rectangle!(plt, xstart, xend, y; height=0.8, color=:blue) @@ -124,13 +124,15 @@ function update_test_2() # find first collision in the trace start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] t1 = findfirst(x -> x == 2, start_event_indices) - +# TODO: validate existence of event # move first collision five steps earlier cm = choicemap(fixed_prior_cm) cm[:kernel => t1 => :events => :start_event_idx] = 1 cm[:kernel => t1 - 5 => :events => :start_event_idx] = 2 trace2, ls2, _... = Gen.update(trace, cm) trace3, delta_s, _... = Gen.regenerate(trace2, select(:kernel => t1 - 5 => :events => :event)) + # TODO: check ls2 + # print choices and @assert delta_s != -Inf @assert delta_s != NaN From 94f318f59f8ab22c368059e59d1e55e5893beea8 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 29 Nov 2023 12:08:27 -0500 Subject: [PATCH 13/23] test regenerating event --- src/gms/cp_gm_pb.jl | 2 +- test/gms/cp_gm.jl | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 57a5e54..3800e49 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -228,7 +228,7 @@ iterate over event concepts and evaluate predicates for newly activated events predicates, events, pair_idx = calculate_predicates(bullet_state.kinematics, event_concepts) weights = normalize_weights(copy(predicates), active_events) start_event_idx = @trace(categorical(weights), :start_event_idx) # up to one event is born - bullet_state, active_events = event_switch(clause, events, start_event_idx, pair_idx[start_event_idx], bullet_state, active_events) + bullet_state, active_events = @trace(event_switch(clause, events, start_event_idx, pair_idx[start_event_idx], bullet_state, active_events), :switch) weights = calculate_death_weights(predicates, active_events, start_event_idx, death_factor) end_event_idx = @trace(categorical(weights), :end_event_idx) # up to one active event dies diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 7ee8637..40f43d4 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -124,20 +124,27 @@ function update_test_2() # find first collision in the trace start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] t1 = findfirst(x -> x == 2, start_event_indices) -# TODO: validate existence of event + # TODO: validate existence of event # move first collision five steps earlier cm = choicemap(fixed_prior_cm) cm[:kernel => t1 => :events => :start_event_idx] = 1 cm[:kernel => t1 - 5 => :events => :start_event_idx] = 2 trace2, ls2, _... = Gen.update(trace, cm) + @show ls2 + choices = get_choices(trace2) + display(get_submap(choices, :kernel => t1 => :events)) + display(get_submap(choices, :kernel => t1 -5 => :events)) + trace3, delta_s, _... = Gen.regenerate(trace2, select(:kernel => t1 - 5 => :events => :event)) - # TODO: check ls2 - # print choices and + @show delta_s + choices2 = get_choices(trace3) + display(get_submap(choices2, :kernel => t1 => :events)) + display(get_submap(choices2, :kernel => t1 -5 )) @assert delta_s != -Inf - @assert delta_s != NaN + @assert !isnan(delta_s) - return trace, trace2 + #return trace, trace2 end # redraw latents at same event start @@ -207,6 +214,6 @@ end #visualize_active_events() #constrained_test() #update_test() -#update_test_2() -update_test_3() +update_test_2() +#update_test_3() #switch_test_static() \ No newline at end of file From 8afaccc017508c40d84d41aa05a75acee4378be2 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 29 Nov 2023 15:32:04 -0500 Subject: [PATCH 14/23] WIP refactor switch --- src/gms/cp_gm_pb.jl | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 3800e49..0be3a9c 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -62,6 +62,9 @@ function CPParams(client::Int64, objs::Vector{Int64}, CPParams(mprior, pprior, event_concepts, sim, template, length(objs), obs_noise, death_factor) end +event_concepts = Type{<:EventRelation}[Collision] +switch = Gen.Switch(map(clause, event_concepts)...) + """ Current state of the change point model, simulation state and event state """ @@ -182,14 +185,15 @@ end """ map possible events to weight vector for birth decision using the predicates """ -function calculate_predicates(obj_states, event_concepts) +function calculate_predicates(obj_states) object_pairs = collect(combinations(obj_states, 2)) pair_idx = repeat(collect(combinations(1:length(obj_states), 2)), length(event_concepts)) pair_idx = [[0,0], pair_idx...] # for no event predicates = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs] - events = vcat(NoEvent, [repeat([event_type], length(object_pairs)) for event_type in event_concepts]...) - return predicates, events, pair_idx + event_ids = vcat(1, repeat(1:length(event_concepts), length(object_pairs))) + @show event_ids + return predicates, event_ids, pair_idx end function normalize_weights(weights, active_events) @@ -213,22 +217,21 @@ end """ create a Switch combinator to evaluate the corresponding clause for a started event to trace new latents """ -@gen function event_switch(clause, events, start_event_idx, pair, bullet_state, active_events) - switch = Gen.Switch(map(clause, events)...) - updated_latents = @trace(switch(start_event_idx, pair, bullet_state.latents), :event) # trace latents - bullet_state = setproperties(bullet_state; latents = updated_latents) - start_event_idx > 1 && push!(active_events, start_event_idx) - return bullet_state, active_events +@gen function event_switch(event_idx, start_event_idx, pair, bullet_state) + return end """ iterate over event concepts and evaluate predicates for newly activated events """ @gen function event_kernel(active_events, bullet_state, event_concepts, death_factor) - predicates, events, pair_idx = calculate_predicates(bullet_state.kinematics, event_concepts) + predicates, event_ids, pair_idx = calculate_predicates(bullet_state.kinematics, event_concepts) weights = normalize_weights(copy(predicates), active_events) start_event_idx = @trace(categorical(weights), :start_event_idx) # up to one event is born - bullet_state, active_events = @trace(event_switch(clause, events, start_event_idx, pair_idx[start_event_idx], bullet_state, active_events), :switch) + updated_latents = @trace(switch(event_idx, pair_idx[start_event_idx], bullet_state.latents), :event) + # TODO: use funcitonal collections + bullet_state = setproperties(bullet_state; latents = updated_latents) + start_event_idx > 1 && push!(active_events, start_event_idx) weights = calculate_death_weights(predicates, active_events, start_event_idx, death_factor) end_event_idx = @trace(categorical(weights), :end_event_idx) # up to one active event dies From cd870f2f7f684c572ef3fa157e767c1fc5e65683 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 13 Dec 2023 13:08:41 -0500 Subject: [PATCH 15/23] refactor switch call --- src/gms/cp_gm_pb.jl | 29 ++++++++++++++--------------- test/gms/cp_gm.jl | 9 +++++++-- test/gms/plots/events.png | Bin 13144 -> 13463 bytes 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 0be3a9c..3969021 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -62,9 +62,6 @@ function CPParams(client::Int64, objs::Vector{Int64}, CPParams(mprior, pprior, event_concepts, sim, template, length(objs), obs_noise, death_factor) end -event_concepts = Type{<:EventRelation}[Collision] -switch = Gen.Switch(map(clause, event_concepts)...) - """ Current state of the change point model, simulation state and event state """ @@ -171,6 +168,10 @@ function clause(::Type{NoEvent}) _no_event_clause end + +event_concepts = Type{<:EventRelation}[NoEvent, Collision] +switch = Gen.Switch(map(clause, event_concepts)...) + """ """ @@ -188,11 +189,10 @@ map possible events to weight vector for birth decision using the predicates function calculate_predicates(obj_states) object_pairs = collect(combinations(obj_states, 2)) pair_idx = repeat(collect(combinations(1:length(obj_states), 2)), length(event_concepts)) - pair_idx = [[0,0], pair_idx...] # for no event + pair_idx = [[0,0], pair_idx...] # [0,0] for no event - predicates = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs] - event_ids = vcat(1, repeat(1:length(event_concepts), length(object_pairs))) - @show event_ids + predicates = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs if event_type != NoEvent] # NoEvent excluded and added in weights + event_ids = vcat(1, repeat(2:length(event_concepts), inner=length(object_pairs))) # 1 for NoEvent return predicates, event_ids, pair_idx end @@ -200,7 +200,7 @@ function normalize_weights(weights, active_events) for idx in active_events # active events should not be born again weights[idx-1] = 0 end - weights = [max(0, 1 - sum(weights)), weights...] + weights = [max(0, 1 - sum(weights)), weights...] # first element for NoEvent # TODO: objects that are already involved in some events should not be involved in other event types as well return weights ./ sum(weights) end @@ -217,18 +217,18 @@ end """ create a Switch combinator to evaluate the corresponding clause for a started event to trace new latents """ -@gen function event_switch(event_idx, start_event_idx, pair, bullet_state) - return +@gen function event_switch(event_idx, pair_idx, latents) + return (pair_idx, latents) end """ iterate over event concepts and evaluate predicates for newly activated events """ -@gen function event_kernel(active_events, bullet_state, event_concepts, death_factor) - predicates, event_ids, pair_idx = calculate_predicates(bullet_state.kinematics, event_concepts) +@gen function event_kernel(active_events, bullet_state, death_factor) + predicates, event_ids, pair_idx = calculate_predicates(bullet_state.kinematics) weights = normalize_weights(copy(predicates), active_events) start_event_idx = @trace(categorical(weights), :start_event_idx) # up to one event is born - updated_latents = @trace(switch(event_idx, pair_idx[start_event_idx], bullet_state.latents), :event) + updated_latents = @trace(switch(event_ids[start_event_idx], pair_idx[start_event_idx], bullet_state.latents), :event) # TODO: use funcitonal collections bullet_state = setproperties(bullet_state; latents = updated_latents) start_event_idx > 1 && push!(active_events, start_event_idx) @@ -252,8 +252,7 @@ run event and physics kernel for one time step and observe noisy positions """ @gen function kernel(t::Int, prev_state::CPState, params::CPParams) active_events, bullet_state = @trace(event_kernel(prev_state.active_events, - prev_state.bullet_state, - params.event_concepts, + prev_state.bullet_state, params.death_factor), :events) bullet_state::BulletState = PhySMC.step(params.sim, bullet_state) diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 40f43d4..297c13a 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -119,11 +119,16 @@ function update_test_2() cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) # generate initial trace - trace, _ = Gen.generate(cp_model, (t, cp_params)) + trace, ls = Gen.generate(cp_model, (t, cp_params)) # find first collision in the trace start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] t1 = findfirst(x -> x == 2, start_event_indices) + @show ls + choices = get_choices(trace) + display(get_submap(choices, :kernel => t1 => :events)) + display(get_submap(choices, :kernel => t1 -5 => :events)) + # TODO: validate existence of event # move first collision five steps earlier cm = choicemap(fixed_prior_cm) @@ -139,7 +144,7 @@ function update_test_2() @show delta_s choices2 = get_choices(trace3) display(get_submap(choices2, :kernel => t1 => :events)) - display(get_submap(choices2, :kernel => t1 -5 )) + display(get_submap(choices2, :kernel => t1 -5 => :events )) @assert delta_s != -Inf @assert !isnan(delta_s) diff --git a/test/gms/plots/events.png b/test/gms/plots/events.png index f071e247da5431950ba16bad0bbea8030fe9c691..1924a8b8834e99a874bf3ea161ed7df79dad56a0 100644 GIT binary patch literal 13463 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 I(x(3Z54xnN!vFvP literal 13144 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 Date: Mon, 18 Dec 2023 16:37:20 -0500 Subject: [PATCH 16/23] update tests --- src/gms/cp_gm_pb.jl | 35 +++++++++++++++++++++++---------- test/gms/cp_gm.jl | 48 ++++++++++++++++++++++++++++----------------- 2 files changed, 55 insertions(+), 28 deletions(-) diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 3969021..38b03a3 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -125,10 +125,9 @@ function predicate(t::Type{Collision}, a::RigidBodyState, b::RigidBodyState) a_dim = a.aabb[2] - a.aabb[1] b_dim = b.aabb[2] - b.aabb[1] d = norm(Vector(a.position)-Vector(b.position))-norm((a_dim+b_dim)/2) # l2 distance - clamp(exp(-15d), 0., 1.) + clamp(exp(-15d), 1e-3, 1 - 1e-3) end -# gen functional collections """ update latents of a single element @@ -168,12 +167,11 @@ function clause(::Type{NoEvent}) _no_event_clause end - event_concepts = Type{<:EventRelation}[NoEvent, Collision] switch = Gen.Switch(map(clause, event_concepts)...) """ - +TODO: this function was intended to check if some event relations are impossible to be created a certain time step """ function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelation}}) return event_concepts @@ -191,11 +189,15 @@ function calculate_predicates(obj_states) pair_idx = repeat(collect(combinations(1:length(obj_states), 2)), length(event_concepts)) pair_idx = [[0,0], pair_idx...] # [0,0] for no event + # break up to two lines predicates = [predicate(event_type, a, b) for event_type in event_concepts for (a, b) in object_pairs if event_type != NoEvent] # NoEvent excluded and added in weights event_ids = vcat(1, repeat(2:length(event_concepts), inner=length(object_pairs))) # 1 for NoEvent return predicates, event_ids, pair_idx end +""" +transform predicates for pairs of objects into a probability vector that adds to 1, including one weight for NoEvent at the first position +""" function normalize_weights(weights, active_events) for idx in active_events # active events should not be born again weights[idx-1] = 0 @@ -205,6 +207,9 @@ function normalize_weights(weights, active_events) return weights ./ sum(weights) end +""" +similar to normalize_weights but for death of events +""" function calculate_death_weights(predicates, active_events, start_event_idx, death_factor) can_die(idx) = idx+1 in active_events && idx+1 != start_event_idx # dying has a much lower chance of being born @@ -215,12 +220,22 @@ function calculate_death_weights(predicates, active_events, start_event_idx, dea end """ -create a Switch combinator to evaluate the corresponding clause for a started event to trace new latents +updates active events in a functional form +add=True -> add event to set of active events +add=False -> remove event from set of active events """ -@gen function event_switch(event_idx, pair_idx, latents) - return (pair_idx, latents) +function update_active_events(active_events::Set{Int64}, event_idx::Int64, add::Bool) + if event_idx == 1 + return active_events + end + if add + return union(active_events, Set([event_idx])) + else + return setdiff(active_events, Set([event_idx])) + end end + """ iterate over event concepts and evaluate predicates for newly activated events """ @@ -228,14 +243,14 @@ iterate over event concepts and evaluate predicates for newly activated events predicates, event_ids, pair_idx = calculate_predicates(bullet_state.kinematics) weights = normalize_weights(copy(predicates), active_events) start_event_idx = @trace(categorical(weights), :start_event_idx) # up to one event is born + updated_latents = @trace(switch(event_ids[start_event_idx], pair_idx[start_event_idx], bullet_state.latents), :event) - # TODO: use funcitonal collections bullet_state = setproperties(bullet_state; latents = updated_latents) - start_event_idx > 1 && push!(active_events, start_event_idx) + active_events = update_active_events(active_events, start_event_idx, true) weights = calculate_death_weights(predicates, active_events, start_event_idx, death_factor) end_event_idx = @trace(categorical(weights), :end_event_idx) # up to one active event dies - end_event_idx > 1 && delete!(active_events, end_event_idx) + active_events = update_active_events(active_events, end_event_idx, false) return active_events, bullet_state end diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 297c13a..930ecaf 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -14,13 +14,13 @@ pprior = PhysPrior((3.0, 10.0), # mass (0.2, 1.0)) # restitution obs_noise = 0.05 -t = 120 +t = 80 fixed_prior_cm = Gen.choicemap() -fixed_prior_cm[:prior => :objects => 1 => :mass] = 2 -fixed_prior_cm[:prior => :objects => 2 => :mass] = 1 +fixed_prior_cm[:prior => :objects => 1 => :mass] = 2. +fixed_prior_cm[:prior => :objects => 2 => :mass] = 1. fixed_prior_cm[:prior => :objects => 1 => :friction] = 0.5 -fixed_prior_cm[:prior => :objects => 2 => :friction] = 1.2 +fixed_prior_cm[:prior => :objects => 2 => :friction] = 0.5 fixed_prior_cm[:prior => :objects => 1 => :restitution] = 0.2 fixed_prior_cm[:prior => :objects => 2 => :restitution] = 0.2 @@ -29,8 +29,8 @@ function forward_test() event_concepts = Type{<:EventRelation}[Collision] cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) - trace, _ = Gen.generate(cp_model, (t, cp_params)); - println("") + trace, weight = Gen.generate(cp_model, (t, cp_params)); + @show weight #display(get_choices(trace)) end @@ -83,10 +83,11 @@ function constrained_test() event_concepts = Type{<:EventRelation}[Collision] cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) - addr = 10 => :events => :start_event_idx - cm = Gen.choicemap(addr => 2) - trace, _ = Gen.generate(cp_model, (t, cp_params), cm) - display(get_choices(trace)) + #addr = 10 => :events => :start_event_idx + #cm = Gen.choicemap(addr => 2) + trace, weight = Gen.generate(cp_model, (t, cp_params), fixed_prior_cm) + @show weight + #display(get_choices(trace)) end # update priors @@ -119,7 +120,7 @@ function update_test_2() cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) # generate initial trace - trace, ls = Gen.generate(cp_model, (t, cp_params)) + trace, ls = Gen.generate(cp_model, (t, cp_params), fixed_prior_cm) # find first collision in the trace start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] @@ -127,25 +128,36 @@ function update_test_2() @show ls choices = get_choices(trace) display(get_submap(choices, :kernel => t1 => :events)) - display(get_submap(choices, :kernel => t1 -5 => :events)) # TODO: validate existence of event # move first collision five steps earlier - cm = choicemap(fixed_prior_cm) + cm = choicemap() cm[:kernel => t1 => :events => :start_event_idx] = 1 cm[:kernel => t1 - 5 => :events => :start_event_idx] = 2 trace2, ls2, _... = Gen.update(trace, cm) - @show ls2 + #@show ls2 choices = get_choices(trace2) - display(get_submap(choices, :kernel => t1 => :events)) - display(get_submap(choices, :kernel => t1 -5 => :events)) + #display(get_submap(choices, :kernel => t1 => :events)) + #display(get_submap(choices, :kernel => t1 -5 => :events)) + + # the keys have to be enumerated, subsets do not work + trace3, delta_s, _... = Gen.regenerate(trace, select( + :kernel => t1 => :events => :event => :new_latents_a => :mass,)) + #:kernel => t1 => :events => :event => :new_latents_a => :restitution)) - trace3, delta_s, _... = Gen.regenerate(trace2, select(:kernel => t1 - 5 => :events => :event)) @show delta_s choices2 = get_choices(trace3) display(get_submap(choices2, :kernel => t1 => :events)) - display(get_submap(choices2, :kernel => t1 -5 => :events )) + + for i in 1:t + if project(trace3, select(:kernel => i)) == -Inf + @show i + display(get_submap(choices2, :kernel => i => :events)) + end + end + @show t1 + @show project(trace3, select(:kernel)) @assert delta_s != -Inf @assert !isnan(delta_s) From 98cb44cc050e98398dcb85706d006b28ffdf9fe5 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 29 Nov 2023 11:28:59 -0500 Subject: [PATCH 17/23] rebase particle filter on cp model --- Manifest.toml | 8 +- Project.toml | 1 + src/gms/cp_gm_pb.jl | 5 ++ test/gms/cp_gm.jl | 4 +- test/particle_filter.jl | 137 +++++++++++++++++++++++++++++++++ test/plots/particle_filter.png | Bin 0 -> 75602 bytes 6 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 test/particle_filter.jl create mode 100644 test/plots/particle_filter.png diff --git a/Manifest.toml b/Manifest.toml index 00fd886..a6421e7 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.9.3" manifest_format = "2.0" -project_hash = "87c0603f65be5921938c725fd12195c48bc0f93f" +project_hash = "95d68df1d1fba8de2378675f0b447fab215f5eb8" [[deps.Accessors]] deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Test"] @@ -366,6 +366,12 @@ path = "/home/dg963/GalileoEvents/env.d/jenv/dev/Gen" uuid = "ea4f424c-a589-11e8-07c0-fd5c91b9da4a" version = "0.4.6" +[[deps.GenParticleFilters]] +deps = ["Distributions", "Gen", "Parameters", "Statistics"] +git-tree-sha1 = "1009fe501115947ba57a9e9e90a3acd3e8d476bb" +uuid = "56b76ac4-72ef-411e-b419-6d312ed86a6f" +version = "0.1.8" + [[deps.Gen_Compose]] deps = ["DataStructures", "FileIO", "Gen", "JLD2", "Revise", "UnPack"] git-tree-sha1 = "b2ac8a12976eb7e459d39c29e7dbbe5ec64199c8" diff --git a/Project.toml b/Project.toml index 95a084f..af12d93 100644 --- a/Project.toml +++ b/Project.toml @@ -10,6 +10,7 @@ Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" Gen = "ea4f424c-a589-11e8-07c0-fd5c91b9da4a" +GenParticleFilters = "56b76ac4-72ef-411e-b419-6d312ed86a6f" Gen_Compose = "c1ef4dca-b0a6-4a35-b24b-46cbf3979a16" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a" diff --git a/src/gms/cp_gm_pb.jl b/src/gms/cp_gm_pb.jl index 38b03a3..61ce186 100644 --- a/src/gms/cp_gm_pb.jl +++ b/src/gms/cp_gm_pb.jl @@ -181,6 +181,11 @@ function valid_relations(state::CPState, event_concepts::Vector{Type{EventRelati end end +@gen function event_switch(clause, events, start_event_idx, pair, latents) + switch = Gen.Switch(map(clause, events)...) + return switch(start_event_idx, pair, latents) +end + """ map possible events to weight vector for birth decision using the predicates """ diff --git a/test/gms/cp_gm.jl b/test/gms/cp_gm.jl index 930ecaf..be89e13 100644 --- a/test/gms/cp_gm.jl +++ b/test/gms/cp_gm.jl @@ -228,9 +228,9 @@ function switch_test_static() end #forward_test() -#visualize_active_events() +visualize_active_events() #constrained_test() #update_test() -update_test_2() +#update_test_2() #update_test_3() #switch_test_static() \ No newline at end of file diff --git a/test/particle_filter.jl b/test/particle_filter.jl new file mode 100644 index 0000000..c6bc344 --- /dev/null +++ b/test/particle_filter.jl @@ -0,0 +1,137 @@ +using Revise +using GalileoEvents +using Gen +using Printf +using Plots +ENV["GKSwstype"]="160" # fixes some plotting warnings + +""" +gen_trial + +Generates a trial and returns the generation parameters, the true trace and the observations +""" +function gen_trial() + # configure model paramaters + mass_ratio = 2.0 + obj_frictions = (0.3, 0.3) + obj_positions = (0.5, 1.2) + mprior = MaterialPrior([unknown_material]) + pprior = PhysPrior((3.0, 10.0), # mass + (0.5, 10.0), # friction + (0.2, 1.0)) # restitution + client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) + event_concepts = Type{<:EventRelation}[Collision] + obs_noise = 0.05 + + cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) + + t = 60 + + # run model forward + trace, _ = Gen.generate(cp_model, (t, cp_params)); + + # collect observations + choices = get_choices(trace) + observations = Vector{Gen.ChoiceMap}(undef, t) + for i = 1:t + prefix = :kernel => i => :observe + cm = choicemap() + set_submap!(cm, prefix, get_submap(choices, prefix)) + observations[i] = cm + end + + return t, cp_params, trace, observations +end + +""" +do_inference + +Implements a truncated random walk for the both mass priors +""" +@gen function proposal(tr::Gen.Trace) + # get previous values from `tr` + address(obj_nr) = :prior => :objects => obj_nr => :mass + choices = get_choices(tr) + #display(choices) + for i in 1:2 + prev_mass = choices[address(1)] + mass = {address(i)} ~ trunc_norm(prev_mass, .25, 0., Inf) + end +end + +""" +do_inference + +Runs particle filter inference on a model and given observations +""" +function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, n_particles::Int = 100) + # initialize particle filter + state = Gen.initialize_particle_filter(cp_model, (0, params), EmptyChoiceMap(), n_particles) + + # Then increment through each observation step + for (t, o) = enumerate(observations) + # apply a rejuvenation move to each particle + step_time = @elapsed begin + for i=1:particles + state.traces[i], _ = mh(state.traces[i], proposal, ()) + end + + Gen.maybe_resample!(state, ess_threshold=particles/2) + Gen.particle_filter_step!(state, (t, params), (UnknownChange(), NoChange()), o) + end + + if t % 10 == 0 + @printf "%s time steps completed (last step was %0.2f seconds)\n" t step_time + end + end + + # return the "unweighted" set of traces after t steps + return Gen.sample_unweighted_traces(state, particles) +end + + +function plot_trace(tr::Gen.Trace, title="Trajectory") + (t, _) = get_args(tr) + # get the prior choice for the two masses + choices = get_choices(tr) + masses = [round(choices[:prior => :objects => i => :mass], digits=2) for i in 1:2] + + # get the x positions + states = get_retval(tr) + #diplsay(states) + xs = [map(st -> st.bullet_state.kinematics[i].position[1], states) for i = 1:2] + + # return plot + plot(1:t, xs, title=title, labels=["ramp: $(masses[1])" "table: $(masses[2])"], xlabel="t", ylabel="x") +end + +""" +plot_traces(truth::Gen.DynamicDSLTrace, traces::Vector{Gen.DynamicDSLTrace}) + +Display the observed and final simulated trajectory as well as distributions for latents and the score +""" +function plot_traces(truth::Gen.DynamicDSLTrace, traces::Vector{Gen.DynamicDSLTrace}) + observed_plt = plot_trace(truth, "True trajectory") + simulated_plt = plot_trace(last(traces), "Last trace") + + (t, _) = get_args(truth) + num_traces = length(traces) + mass_logs = [[t[:prior => :objects => i => :mass] for t in traces] for i in 1:2] + scores = [get_score(t) for t in traces] + + scores_plt = plot(1:num_traces, scores, title="Scores", xlabel="trace number", ylabel="log score") + mass_plts = [Plots.histogram(1:num_traces, mass_logs[i], title="Mass $(i == 1 ? "Ramp object" : "Table object")", legend=false) for i in 1:2] + ratio_plt = Plots.histogram(1:num_traces, mass_logs[1]./mass_logs[2], title="mass ramp object / mass table object", legend=false) + plt = plot(observed_plt, simulated_plt, mass_plts..., scores_plt, ratio_plt, size=(1200, 800)) + savefig(plt, "test/plots/particle_filter.png") +end + +# data generation +t, params, truth, observations = gen_trial() +#display(get_choices(truth)) + +# inference +traces = do_inference(t, params, observations, 5) + +# visualize results +plot_traces(truth, traces) \ No newline at end of file diff --git a/test/plots/particle_filter.png b/test/plots/particle_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..a7aae34e357694c60d3eaa41a147fb33d33526a6 GIT binary patch literal 75602 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 Gq5lG2XvNzA literal 0 HcmV?d00001 From 343aa3a962da6030926df65ad4ef8abd51ae1612 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 15 Nov 2023 11:44:49 -0500 Subject: [PATCH 18/23] use GenParticleFilters package --- test/gms/plots/events.png | Bin 13463 -> 13685 bytes test/particle_filter.jl | 45 +++++++++++++-------------------- test/plots/particle_filter.png | Bin 75602 -> 76404 bytes 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/test/gms/plots/events.png b/test/gms/plots/events.png index 1924a8b8834e99a874bf3ea161ed7df79dad56a0..82c93fa7329275934ebc6574e75f635300dcb22b 100644 GIT binary patch literal 13685 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 I(x(3Z54xnN!vFvP diff --git a/test/particle_filter.jl b/test/particle_filter.jl index c6bc344..91dca01 100644 --- a/test/particle_filter.jl +++ b/test/particle_filter.jl @@ -3,6 +3,7 @@ using GalileoEvents using Gen using Printf using Plots +using GenParticleFilters ENV["GKSwstype"]="160" # fixes some plotting warnings """ @@ -25,7 +26,7 @@ function gen_trial() cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) - t = 60 + t = 100 # run model forward trace, _ = Gen.generate(cp_model, (t, cp_params)); @@ -46,38 +47,25 @@ end """ do_inference -Implements a truncated random walk for the both mass priors -""" -@gen function proposal(tr::Gen.Trace) - # get previous values from `tr` - address(obj_nr) = :prior => :objects => obj_nr => :mass - choices = get_choices(tr) - #display(choices) - for i in 1:2 - prev_mass = choices[address(1)] - mass = {address(i)} ~ trunc_norm(prev_mass, .25, 0., Inf) - end -end - -""" -do_inference - Runs particle filter inference on a model and given observations """ -function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, n_particles::Int = 100) +function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, n_particles::Int = 100, ess_thresh=0.5) # initialize particle filter - state = Gen.initialize_particle_filter(cp_model, (0, params), EmptyChoiceMap(), n_particles) + state = pf_initialize(cp_model, (1, params), observations[1], n_particles) # Then increment through each observation step - for (t, o) = enumerate(observations) - # apply a rejuvenation move to each particle + for t in 2:length(observations) step_time = @elapsed begin - for i=1:particles - state.traces[i], _ = mh(state.traces[i], proposal, ()) + # Resample and rejuvenate if the effective sample size is too low + if effective_sample_size(state) < ess_thresh * n_particles + # Perform residual resampling, pruning low-weight particles + pf_resample!(state, :residual) + # Perform a rejuvenation move on past choices + rejuv_sel = select(:kernel => t-1 => :events => :event) + pf_rejuvenate!(state, mh, (rejuv_sel,)) end - - Gen.maybe_resample!(state, ess_threshold=particles/2) - Gen.particle_filter_step!(state, (t, params), (UnknownChange(), NoChange()), o) + # Update filter state with new observation at timestep t + pf_update!(state, (t, params), (UnknownChange(), NoChange()), observations[t]) end if t % 10 == 0 @@ -86,7 +74,8 @@ function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, end # return the "unweighted" set of traces after t steps - return Gen.sample_unweighted_traces(state, particles) + #return Gen.sample_unweighted_traces(state, particles) + return get_traces(state) end @@ -131,7 +120,7 @@ t, params, truth, observations = gen_trial() #display(get_choices(truth)) # inference -traces = do_inference(t, params, observations, 5) +traces = do_inference(t, params, observations, 50) # visualize results plot_traces(truth, traces) \ No newline at end of file diff --git a/test/plots/particle_filter.png b/test/plots/particle_filter.png index a7aae34e357694c60d3eaa41a147fb33d33526a6..d687c7cf1436a9ab75bcf4b7ea61742470969db3 100644 GIT binary patch literal 76404 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 z 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 literal 75602 zcmYg&2RIe(+y4=9GLI1=aqR5OQr00eGlWF;o>|#hWpA=qHpwizjBME@NwOt-XZ&y9 z_kFMHe}2E~`sQ%XdB*+R_h;PC2~|^(Bf_V_M<5VH3i2`<2n5bM1Ol4@c?q6r3Lw;i z|KJ)c$;lwjFaDR^To{i)Fd!6Uq%=L!*QPBb$$O>{n+j|w&xfh(0k1Br%XEer%ZYJ% z3R6&cwLaWfyLwesY)_Ly?C!Tc;`^Op3>_Wz#$D1sy)*xB3j zIXQHi?yRb+^7ipj%@7^GtzOF>gAx|Ok>X1nsxXvD3`$N)qC}xk<)|BC-@7Zvto+U8y*Ec!-fmkKJYUX1th;3_28Qb9NshOGO zS5!EB$rS5~rZ?PR!$TAa5VkXug~~8m!Bn<>2Uk>V?Ejt0NKbFkJDl%{fAm)0$=R7- zSlE8~Bf`?0okCGxU*Fr?`@Q}2d^8&~b4OR#Lv{++$GYu2wPLqjjH@k&GmuMQ0lJGr}W{HTA{oOMTB{O8xN?ww&*eU5jF58_3xTxI zgX3)2RnG3OSFc_jEmS4Baz(er`?iThO5 z)Ck_X_55IcI-H7^gOk%@Al2;YQxp|dmwENoO!}mR1XBx(w6wJM*5it2A9T2Uk9V!~ z^k|~y_V@Sg?d>11R!4nNR#NKg?ZqIkQc!fuM%LMURWUSd&CO*L6Py0_?OSgzhlt1l zY(Qsc=Ui8`!%T}9rl_QZgP))O?%l?kni|(X6WF+f3=Xe*!XqQi_^6*WxTxRGjE&to zIokP>C6V^}^@sZUTC355iEqXxCML$l92^{awbl!3Yqky!ss`-Nh(Jk(n9H`7mX>yQ z+kUox*!QNe(%hq9&cU&PMzb#!!$jPSFuEx{;QSXdxlxi~pXU4P+Ap(-mYH953W z@Gc_|t{)ei^Kx^Yot=X)Ir;euF=%N*LPCmO6b>mlxpdT5K0dy8@7^s>y{~|yfngUC z61sbr7M+ll#cN|>Yiql^yGx-GFy{erp{sihvwZsRKyy_hUOYWLy-3sA-hO@QOV-qT zhl<(H20Ly?q-M7S`L}&&9=MJ6@tS)8f;U85+>v-@m-PtePcWsZ%yl{`g>JR4%74 z;q~j+2??5NYT1Q_7Ut#?kPYbQG92&?9zAl0*P+qqD_5@M=jVrngjCUA!3pT@?oLm? z&Xa6oZZ2#&#Bd~KH1Gc4!Gp1pk*fFadAYfp-8T%JoGLRirn_UAdXjM3VFK^qWZ2pL zh3(+P$x29Ij+Jk4-{3(ZVZ6y18FtpzqSj+Ysdm%J%&e@k_wR3c+Os6bS1S+P4j0fYBHV{L-y9kG1X}`!ZElf(MMT-73CIgLFYdBl$`qcHfyfuTfCQ5bwVV3)A=@Gas=^$|O7HbPWp; zIS17MnRCnJ^O(9hWZo*)@HhGSdtLN?-N`q3c-CiHTQN#)#+AK&eOCgg`JPG+xGf&< z{SlHVEh#B6R|rC7ePKfyuZ-j)b0Av~(~Ilx=T%kl2QYk&qT`&=KnKAY=&pNYprFu0 zB5{)K=qx8Ecf{WnMK?M=p2#}{6Z-Mv$40|PgkUCz8u2F@MAT3xjdho>gxHa(hRndCT5%!XHX zA&NyWWr{f5z$|}!fxV5#$;sKXy6x(|@v}T92kqyK8(3*SEqcAn%nTnNABBM$)Z)3v z@tjj}|KPE`p%gdzuttK+bnD<={j0kES&qtdp1EsW5o{_{`eklO65=$=H)%x zU(*fd!(cEJ_LC2b#~}Za#qQlZfz0sy`SV`3 zAR{9q7ttrGs$XViBv@Hld3fyqOq4%h9qsOBmykGDiiMPRvOB7Z%z@l5e)7o32)*Ti zv4pCYmskC4X;3cu#&oOSIaE*_sgvzK-e-&b^^gf*AkNO)P|CZz+|SO=w%H!ZBl9(G zrnp2>-}-%a`fp>V6>0{WzR~V`je<588{5k!Y(blevdzs+*xEwXEc>atfv;ba8D6ce zt=W8io8u>UGp4%;8Ne{Q^7ct1EX@W?@x8-LU3IlIlKXMp12lPyA%d)v;n^4%Fz0QwMy6B~CAMP&})$UbXoE{C!+}{M_6e3B9LV4}59k zTbpfvY1-#D-%YA(RII6Zl7`aL)xC53cKW^NP=B`JykK%-7?2_&@0HVp#XL3{pgf3* zdIByG6%{4KWx91s-OV{i4YK4b6wN)4&FMyW3Ez{8NNj&e(l?XENHz7Yrskf{vEcJo zzfS>|De&`Q^|wz=5Mwc1Xf6&8V?Jt_bn>a?+PBIFtUEhPUxdgpetzdr&Ym>7aYNEz zVOfAPHb0bEYxA|YSHH#k8hQ+-eu4Sc)($piUWSD5=+!Jkx--S9S`x7T@d0)NiVCc< zL96fd=;+Q}vNotKOhGza+ODp(YrlFEIpJr&fBS#mym(y>= zZ!5~nclY*+dTeHggy05#dKDgCI`>#UUt>G->#t9NSrUF{u-GvBl-I8rf*?6?amwy1 z4fOYym6gE}PmGV>fr4((?1>Iq9L(V4gtEj1n>XDc6e;_-$-~LR!$VQAH_PwL%Gz2n zM-3w_ZPp1HNi}a+hid|o;_u(TyZ!Py!>QtLF*7sUPB&ad3mUcI=r$fh&K7NXw1a)c zXy+h5C`P5Q)$2f|nA=%HLdTA&q zT)8tQ({dFTQ5431#YovS+76Dvo6Cyf<6%=(Re50uXNR!Fq?kgL3=LKf zgy#Ju6dBGf`yaP)1GkQLECLw1PaNBVuHZ}NN$9=lL{{azEBs|d@6>|lRSzaE_s|o}V$=Ef} zP+#98q2luFnKV+&?@Zq<=sKye%d*;$D%#8E#*G`UGR~*Ru0a6cGfu?vUcEwARhE>M zF-OOoYTyTx(bMyCY8x2XTUyHJsA*_ubTbK&x79ye%B7LMfP7YhsqyjTN7{_BH8x*~ z(VAU5{g2<cNq7zO^KsnP-d_H&<++&? z6&~J8sCwSDuTxTV;cx?*FeB1ehEpPkwEOl>>MXmiZofZ80P0+(xK9`g%3Xug93Y&} z5O^&@n$ApN&vzEDUAxvptf!}^k|j>pwFOwNk81sUZE2e$DQ@5`i^1zTYV56ApCKW4 z7*|F|N81`>BeHu|ps2ohfi>xbUitIqk(QRwAR`Kx&bB~!OGkST)6)|hk9dB| z1Cn+!ofLAs(&R-;i?|f3!l3y$O3m+d?-BNY58#XYqMp5A!dZ;@VOC0s>c68a?-{kKXSr4nP4XA|hg;XB!K< z9@S_)&OsT@a(8)kRrKjc|Ltw(U?S!p)6+dp_{>k9JfWwj|2<<{&KfF1cKv!;aj^n% zRSa;aRUjmQjiFLu*a3AhF<~c#SI}~Cj5_-q43f{A>zbLF35f()R8P)V-P)rj3o)`7 zOt1IYGKPs78NpFbJbk5aQV_*Zp>V&W)yLa#217&51xJK_IXJ?$bSENkV+zKceHMJqgS`t9V z;PK=M_dj(=4oAkHBd!4iIzC#;;?@7a2MJj!5SNHXP~KN#2ACeO>JVbO?@-rsq+b$W zjitl*J%E~~^L>zv;DJbx@Vrdc; zRe~A&0iF0(X<~+VHOV)TPJQ`d5BwS*=hDN6qX3dPPG0pbFb0970Nm_8@k+^aX9g0o zwj`yq;RzA+*AK8vcAlOMZPC<(P&@zx|2r0~4VnM@*Jpoi639pN4YAbg=AoztK+ABn z7UHF!-;UbxxQ8F?e7w7oD#5Zbjt=s;2Ov-BrrC6N==64Vslt4>N3fT3tuHSyP#_aC zkTdrFeC6TcQO&%kprCL~$U5PKtN^H;_LC=n7Z>*dBLEA2ka=&iyZhBz(O;k&wrmQ0 zN!$X0g7+X@>F7|`n>QpTjsv}>NK!4L5_+5ll@E$meqrHVQBgSg(;q+jKhPGj{l;K} zxqJyLYOdH~2WykMTh>d`3UX!!C%0M8A+^I8SPts(Je9 zl5@YiSV@X3AXfk%bx>eo0?f3=BZhvbT3yeJG)t0_lGNDy2M5naMplt%=klhLlamc( z;yt^8e-`tk!E#ZCiqSxpJeCGC{QVJBR8-Dnu^`E~<6tAyLLs1G#U8xon_V3*t@?M0 zBV{|&@+4<|7tWMwmVu_`F8m81jefne8Nf?fS=rjR&HAk>>9=DuGg~Z&8J!iVHJ(4O zKM52kekq+d{6YV%JhO(*TeT3|UE=GvvmfwMB7~L}7F+=_I4}NPo2<6sj!#ZL07eKp z1gog1o;X#>bJaH>$oQR~iqs#p2jY=HY&1VxQXy=2+xV$WNi70E&1p_iNhwRri;|4Y zdF%Im=cWZvk`kjQr>A{D=?bUh-rnDjiilvIN(U1C=W7LQ_ReIr#rE@zlb{4oDU=NG zW{jSeO_p3{S@oNDD^zzDKuU+HdG9d6EoL^sbD4M<&2M<;?tNHHZ04wj?}0WgCE z`qTSS#wE2)z?upRmmoBI?#J~kP@*vNCO9m#pLvB84Ka1O^Z1|nL2%i2==qd8FaFX{ zlw@*SPF9xVs2=1uIk_%?iCS7(djKmIi9Z8&Wxn1uJw3fpEk)SgB1o^Jq+|n(9$+nC z6***VX+j?y+jKr7%+sg8iXRqQb8l(^zIJzX^w8JgUhLic#l=OA zYb1Ak87?5%FHrvGUz&`Er8Bgc^-((ehTqFklXq*<;YunjEY#t8YodM)swVNv_^hmo z&0j9RJ3=Y&S@`(W&O)@!%@;xc1N;+5o_v!c3_yh>1GR*2lRR_kU3VVB#!J~((6sEq zE6;?c;#12RpC><=5CzPN&Zm{F+JvK!Kp3~y*ZV&Ac2vAgSzp?nXRH{@_7I|ZhSF44 z)y)1`M;^nL2X2yA$ELTjvqJ&`0&a+V>vYA}=y@?fF;v&#%$bmI#1Cfthh3rTf5Q28 zQsRh%CQ|lo(tEop;i|_PHZf2i&qnI<&pUxVnvK38#b9A!d5in)E)U}~sVpd`3SL3G zz$pR-fA<2L0`da_7>p)^1Rbk7)!W+(Y3L?JZ_pKTYq2}wovFfhsWObkwNz}4Yt5c} ztDuzF+H%!5IG4B7x_>{B+#o-RhOLIG1*l;CNB!vc@1o-3z7P{2!dO{ZRq+ebaP#pE zLD-CrJ_A7vwz#&Y24pWN!_D4DRn^ryP&`{)&Ul_QywfS;eDs!@hUWXXZ$m3C?(Xi+ zcYf(zKzk)6PImSpc&)_ACU%ICl#~>J1>4aAXm z2wPQc@rB2r>2-X(bd=;b_$4TSKwb59be8AlOziD5v$D=%2~JMDo#*g_VqheYtqLEc zjI{ds38&fF*!+RG`Spv>@9YE=O3*z2!u%k%?%a7k-Qa3md03d`t3gepjt6oe98ES> zR*;l*RB#bO2?+@@JhBxZXJ)eW(|tg10YM!;e95_9F6#Of0)kPX?DXzW?d>mwe53Xd zV46`qrk}gIDhyk1pqXj8Cu(gTvBp0?+BWm?Ijyss8d=$eRf2!iO?Y_juZ5!Y8r?vZ z6%zr zJkrpBT1HMrhIxx)X==LrZ===A%ZmggCZL)ie%}%jViD0|qFVAN-N?3DfnBGIu0vrm zL|yqooQ4ld6|yN%%~Hu5wx4N%EIa7-_q&;?X?K`%3V$#r=c1s4><-$9fI$3@%TmG$ zA0RniKqoQJn#jn=f`UbW6g_X&|Cy6|LEL<={R7Gfpr^gv-L=s|lJHJZpJSIsx4*KH zG%S?ifV~{S9{~cq;6Quxg4E^bpB~Odb843jO-!`F$3tq=<K7%Fy@dGP=g=z&`lF$jFFu|La>2p?@H?dwL#Mw4Ui{Yu8;A$(v((M@L6u zASfKn_*ZT=&JJTsT}9!3rv8)pd?4z%6}`< zt?r&93pJgrGTYAJV2wZO<8AHU5SCq+{s2P}<>`*NCNT8XZ5sTwDO~6m05lPumL|u?wOab&5X{p$#(^#k3(@+A275?;{s4Uv zm--I{Gx+xLqvV<25u^ZM+z9mUuTR)j{Q;K=DC{fLiZy}aOb&WM;Hn?S508z3%rLK!7H{ed|s(;!lARkaYDBPTK;(b2i;0P(t~s!= zsHv%A(*Aa%aALt6h>2mKzz2!|ZW|pPU825%E;~hB{8f0S=kim00s>bT7wac6@qG)R z({DqHD<~)crwCFKI8K*dd~9nANcWOP;RJqqS6BD8e$xt8!PL~$-u^B8A#65;@&c`U z3he%UIXNKAwbtXkJw3(d(Q=Hj6qJ;T%w&MsekQUlEG@l!`7${%5f%$To7$ONRmD;M z#{KQx-6rRSUN}Arv$I=?rML)78E^5{#dPayw6wHU^?f}(z~z;#tS-D35RBm1}}bCAXnQlg)`C%nW4fMoB&29rt0cyB0@r3C_bQ#P{x-pg`$4% z969`K>gnqv50!zqR#8zAqB0DPjAU^ysDx3wxt(d?Jt+9_;q{lLuiv%Wozkz@SzB2t zL=m&|@LZTcU%ohi>;slwU7Z^gHn1tn5FtjBlapMOO5%CaNLbf!8Aed0kJ9VRE26I> zS!3m87>D7IfI;0{elcy616Zjzqkk`TSr$n|AL=NSpH{iYsInzl@QHAY9?oW zpaWR}1ZhoLg&pi?NU2d)3jFG-D&O-{_aHS0FfF>MDr7)+e?J8h2QF z{~Y9zSn%rX5Y4k7M<~}``)g9j`o_kYMt71V)2|6%fB#=EK!v-bl+-8`dPiV}z(xtF z`LZWc1Xe>8^N){?Zlyf%^7;o@mGjOP*~M_OW6KR&&y=Q0g`>d6sj-`y`1C0UOw=JW zYvg7S>c0^q5PIzLRTrNRkL=)p|L^J7(#VS^hsuC}1_cNA{5(E99IHIP0e=?A7Ig6| z#DJoVOb6I4eP_W&uS=LNA&PiCF#q$aAK=wPg(?=sM@W(*RR5bIA~g*{9-sk;mEaz0 zj#nZOV|vfLFgkjAo=4jYEJ{f+4o=q}efg`149HevFNw-^TlF4BVOF0{|H}2jt8KPa z{tnjqg+R64R`U01h+*GGUfsD<(a!ycQ{QNg4M)K>9v+UxksP3Xl(!8x zYrI0CAIqGL{Xf*_j*i3QV_7-5c!wkJmNN81&Py-+2h2;C&NZyPhGiJxAH zy$`M-D>9(dxL7ns4}P>60Z*0yAOH4sVvRXYu2^|K!qK52HCKjOwW;usxexNpBcT2K z?~h}*>prjH_NNMkE9Repm@}j2^wA#+d~LAK2#zL(hAvcC!}9!`VwQ|167}&d2^&Nz zU-9ebHi0pQTjhI2nyZiEwGN+wDUCo_)&UN71xB+`R8(4e*LhwZga(JVlMckWrE`(; z@WM*O^moa;VVd7RRu6+N+EWk+Z;=<0k}WZc`R?mKRzRb)p2Gr)^?%!12KrD$k0}i; zZC7Wf)9rKuDxM-yMuh+I|3*%>E?B%!IdAgv8djS}LK5ezSnJgP8+wuim#?5N{s0~|Y8QX3iPcqV`1Agu-*gi-0+EW+@2(j1<@Mf? z-({!f&t+y)?z17! zRnw#+Kp;*maL@~s3gJ8N!pO?Xs7u*9ITUZ%=hW21*c*T1dvBCF^{$a9J56t-X0L|^ zqN3NlRM;BMZ0(02FhLwagSyaYT^W>nKQTEpY#eegjclbx1#(xe32@t4Wq6J5DlZo#QP2pw0Db;SHgyw( zRUaQ87=MB#6eUrdp$D&iHZM+#*))x16_iIGdTYJJMj(3QC>AyS9*|kI!U{$|O5o@E z`&!$LhA#a!w%^m&dKx;LA4m{GnzbEp__N8z?-c(~`WNY4HxfCZbuoQ!I-Xyl8YZ2^ zmAPX&_>rHiXA;LJq^9f`+sE)fX>TC>7cY@v5RxV_lnY6j-;Md^EDCCyOH8m3{tfa< z1f^sKnk-E*zGofQGr{9IFZYLvU6=&4x*$M_{(D_uyT^|>|47jr&xF>zibN@)MJ1!= zO*Y5bbFDT4E8Sa-rKRi3lV$r)ND~WIKR}W)g3OMv)cGK@54t6{b}6T|6BajrBTK1K?}khA2)OC)hv7cwV5S&yoFb({Y8lJh)KHZ7EE zD~EXc;5?^G`Vj~2p1K0^fC5@_fS$Q;Ep$lr0_c}RiQ<1kPIn`#3 zCyB@t_kaSE?A6x@grwP185wd`6tWKD$-JN1!eR-?+N2Zs{1$g=Cy0oN*S}SQ+Exra zT#cQXgh#ik<3HL_1dt2-{>Uvl$!cw)lO`H(gH&Tolkv|^-?!J?`W-^Jc%=eKkA z9Yw#zHxPU3zHT?)oML33xB3d^`$Q6>BLM~r;0Y@Wi-V;szrokHOuA#xz*dwL6#-6W zW@ZXl49Xw@#Ml9JhqMJm*p!bN#5HJE0T-scs7MEhIut<^23o1U4i7&Er4h79u!V#j zewO9ryg&iEw1$$HCTuq^G4}D}FCYrWmEWeO9;0sv2vpw?Yx$5q2d>ElmHP1mg@M1L z0gWRoi#}0tZ*!A@Ac9_^1?*X%_c5q|jfYncnzmPn;ul)gC$C=wfaUOJZ&)vtpH|3> z(cOK4(<5r-FY@E05W1c(ob>mYz%K_v35GD#!0DF z0Spg<#0`rI_!o9qOA$p4#9JJGB)9FN(GC&tD=x<+N3ePOAsuKu?<8>qu|@)}?<;16hT0^C&r5|ybY$Pwv6 zHc6S829}n~(8a^V$avAOW9Z+vu)4e)Q&C%6TdZlVpb%PId=s+_R20M!a1|h;!TCI2 z`0byhpz*r>^jY$!{#wEvx00yKh#?GV+-k3d$dT&X(Z=0iArr_6_S~XqZ^07r))sg} zF4~A!uOJ#j^77!wf#zKT=GOBcK+BYr2+$p-{JLC8iHTRA>py;+)-@Mf0Z_V|3h*$n zJqSI}d8%t`wZ!Al(jhUtYk&V5HhW$LH!222LruMTM0~!Qkl}-xMV9_CG%+Hd@p58z$F1ysa zx)Kw}TeTCp81J!XK&oqt1fK3 z$j3D@za!?u(z-|^%^^vfKgJ6}9UrW-K{4cgaVLl^tb|+*5W93=A9{ z9la9p4frltTHUd^AcgpWBsb6o#0$hiWDcCVhzP;}1{CJ&+b5j7yvg#+z`h{eu_lKV zmz013!okiiiG;=!IK`ae;s(rQ01835375@FOiq3o6okaN1a2Qla2E=XD7HU8@`0YG zCvB-6+h6p3CDMZUK#7tA0Iw^NW}w& zZgXSa@%Dw~+q}1R@rdPp`t<20tcjk)W&Z}P6CXXj1e+$)if!7VDb>nrIj_W1OaGkJ*}2a_M9f{mFSzAf0f%lc4!&Q-4;k`o1`^ zY&Lz?)4w%0TV0ZbEo}jmC~CxLxmigh=2=uNB9*_Yjn6{a8lCXCl4IMVKMjI4bZ7!+ z2aR%a2rUG3luI~GdHs+r&`1Yr5O|6x3{+?id?J4b?Tn)+ucPd(06G_@>WXApBwB_+ zP~v+0?~W9#T@I;0Sv-Vglw-vCyy$rk(X@JXjlNv5C>(lA;xQZbYasXYBtKSDdj|#_ za3!#B{yqNkacKuQt!ecf(0UNK^q)L2yZmM(#FKpsAxhxW^m=D@>lgkQO;3pjrN}vVkDn1A~8`F&<(7%|S{RAC&Af|ou@o$!f6;;egz%g38%~8 z!)8|P2CRQuLKE(4ZP(||&^$%g{_e*QedrB=PBk1{T!Tip@|v2l!9jb#S&)|5l(aQ9 z`_n{tZ`~RmA9n?vAF5fkWStD-BzW+kvaYx^ynlZH9e<=4XkLI0i_F_jxot0@g~St@ zY@xWo1A09`h0~TtLfUOL>q~<5ISPa}F-QgTf1sK@emn*Cvdifh^VMV=X!i5+VPa;=2J*O|MvbYEiH-o zop}evfUpZjE%zkgpqU&8k8IPeax-F35dbaYfv8O*&OPBB<*Ih+f5D4tCflnTIu z3sCC+6TlSWS$hT<;**jl@|CEzU6Xm9P>@NO!IFA%(qR?{Ni`{(;tB|W!veQ>Iz;LIT-58mBpCX2i#5b}fCXRJsa z+VQ~hl|i1K?0kVLG*xLLr=#-?Y=QKQjQfo0fJ-3$`UeJR1>gM6v+1O#a3?rnZOCh` zd8u+A3Fu+<&!1`?uF3ZIaDL(P0~ikDpre4r$jKS5Z{P~}+vIbE6!P@!-v+c}-SIv7 zux1N;3VY6Z^CmjW8pNc1FmLi?BUiuI+5j49t5yb6ivr*5iv$RsaQ~p?=Hb}b80e!H z_4WJ!k6ZO{qJT)tM<&DmM?e|tZDlcBn{Iq`0eA#mmWQB?V0YIA=pqmjUGs6r2&xUMY=ODk z;vhtWy1ctOuJrgZZP(WC-^Tptgue|&_V$CO{5#v*ghb~l*RoPlLQ&4op2cSr0&Yj5 zDZ{mPjEbR^?`8Y!mdE^5SQx&E$(#fJHpDZm#nFUbHp`qu3+vfyQy`+4hjlC6RAhOW z%4VJ#qs17aONfN~@+A;SrwD%< z%ch_h**s9gzTR8^^-HqlDIYZq`NFKv3)XCfbQCo={|BHkz-cfZhAjo5^X#H2ISjPO zc;5fqd43_GL~d_ub8}f#2l!3hgh!>ec6RY`abRPkFyJ%H2)1c+BpQ5hM1ysD#E~6b z8b(s#?K@?9vKU9+W2SOV9)UAsPqaOaoLU5yYM^+<)gYO#~8ygth$oc}V`Mnz( zFbj=h7wD0K232jY+qXe7OSvcRxob)MlIfp%sdl++1a+lp57~CTp`PA%Flk6J^b)@5 z{AP*+8Q4wD&Cud$sHvHdl;pNLcGFonTazOLey6QXi9xo%gK(OkHw{t)p&rwA9vyx9 zr=k_Q#y4l%Y1ae%7vG4om7g5b%kI>%w~jSZOV8bq$4gP4aCzZ|i^wi3dDH#nrS>!2 z2!YpU4+Xk$$?H2BM0BPYR@#vLanjGlqRxy7eJZiXUum5;VqqaZ9=vFLxVH!k9}yaw zB50)nXiybc5;RXgdi01geBtlk({>Vx7?RVn@^UCfwU7-i!fttZ4&Vn8Et;Vsz95av zknr;bj~R4ns1$8&#;`I-bfr#uW~K@%s7>z#DhhNvIJ&r)@~6P+&=v(q33Mx$4#svS}QA~m16GWhsgr{b_rzx)TW;G8*s-0Qo`#2ofjn6lwwzi5jV5rK4O_f*YmJI_KJN=6+;_RpC7R${k1$lifs0pO z&HViBS1>D4lQUSEw{NHQ?~?w1TIIuHYcYRga1^1<=*Eqip+lx1YA&Lc95NY)ZB=(H zHC|(^9X5i>cU9=Y@+co0xTM9vXSI?-x5o2!CV}XN(kJO>p;RWTy|`EiNnEN;MeO(L zu0#>ZYx#VyONf{5nr((kJ8UV@Z_(QoZILf0>21oR5JQ3&(#zqc0QSaZ)rI9%&wllm zk?{xKkM2PPDbueLVHQ+W`Q+&C5Mk2=K#be~He%|4#T-A(?nJpB~g z6X8!5R6(zO;`6=Rf?)K!0lW+CrJSkB!*!2zUMU;8Vv!%kgteK3AalE33@KYaJ+qtO zXw;)eoI_5vhvNuiyzA57N;N#h-;tst~SEkU2U0A>*bEC_Z88MunpyoM%tV- zX{$lm82n3!)EvrW6fiKjbC6OJg(-J`qc!D|BGumJw0$c`$1Bch>!&fWGy zGnOvj;pJ}+-TU>mx-^pYu`1cHNRD59smW(mev@W};Q&376mD5&=ac6*%?4+R80^y~ z4yaf4PVu+>N!d-kJ53n^>}fS9k&24`N#V-xGv)SSTHUw)n@S%8C4P(VkGaQFJ7y6e zhH~M6Nrtn+8EV{3%Q-M_P`6qE4fKe^ZaozVlELgNB~kfq zS*1e`4wWA@PvmH=x0yr!+uJ1QQbOqQlr_DX?~rZoQF=YGuc$q%Ftq&dTiD=OsGZTZ zYoPmW_HM_S{HgUMdGy7W&rp6Xs*BgJ!)LAdW<0elO$jla3Qe4g_hHBAYdJd$SbV(g z_O(S(JNB2Q#%q^%*Uau)T*R9zaQd+5GP486QMUt4SFW(Ik{H8FZfDry@3Do<_}i&3 zcB~H5Wo5yW3%U@4FzrK zTxI*!T)EDpd8PcC+7H-_=E{q==2jNcr0G`j>%Ql>%%kfb(A^{U&OU>%>_5!bO|Xjj`_9xfTl&@hPz<)iCDzM zKuiD_+FDnm!ZO4mS9e=NVS`IOGd^+f0D=tn|Kc2=Z~_j0tcrCB(ehG;@o0iWkS6lD z_MZzlOhcDYGLs9ZF47MdL~z=Xf^#<~+Fw;okXAwHJ&{p;JG)^Lk-VPwPE+6uHPcYA zi}zzL`_k~Y#5wiU?}y|9_@P8Y3mZ7PhtW%b=b<%FpC{S-@slT!M&JCRh!LBoEprZ= zrIQR`jrk{K|K1SLc^*2Va!;Q!U@Uv$SdbTZgC?>dC#MpWdM#*$$Jj^B8(tGxP#ATQE zUpr|-O0YxJr`l`FmWJO^0`iy7XP}AbuFJAy3lAr!34h9kUuP!|_3q+84(RT6y$@)# zP)=IUb9PBAbLJ+ONRN<<%3tB96%<5BK9of*h(tfKD4^!uCKo(rZ+myo_>}fRM4s|= zar}1;G?nHMh;J$xqOldAo^_a4Lsx(nEg3>G1AHCHY8LLEr6=D@cjl}ciu2>Neo~Mt zF;)(dx+rlk8;`d_OBD2@gZK`e8xtqRk_<)QwHiWeKIkXUJPm74NY^LrPfx%ua!8LUv+0dgCZg$p(R6$loet4 zg22P<(@Ug6?QlQ_h3p&=vxmC8ZN#VTU`r+U5{tVW^8t#hGlr9i`M?J#`%#y&@3d6{ zg%A=It^OCGS%s?_@LBAm?_XJ3t1G8v$82PwNjy)$za585$xm8+eZT-7DW2*7zg_^w z*dp^vPy(InA?gSw8Pw!%8(iCRkImv8_&7FX@hs0QFjU{Tm&x|?L)%m$q34V~sYDlD z3Tjywr+Pr`XwQU#=81cRd#z^4gXdSGSnnl7)x6(kX0%#J0 zXP~QGo1K*`6mA;>TZYb3jy9ZM;U&*TdMoJi`BG%V-30U=iwwSGb%sRi@!-mqjmYX{ z5gPLEpfFn^E)LueV6HdMURyT(Mrar>T?<0J7;18iP?l@-!jO%qf$%<6Ys2ORX6Y0p z%GAy}=v9FKgNO`wVBhN3Z{HP1c5Sh#X1<%W4T@1?UmMB^w5^mYG}b(_bw;~P6oDg`USa0&$x zw>78D-&;F;xTPS6nk#@gukIN=TG30&aPGd_x>F?nw-P(g$xakqj;Zx7ab6Xv^8{_- z7GddLg+C_8((2}vKQ`i{AKt~TzkI_G?q$_F+{6ur5lg9l&&Trz?S@hLHc}=-F>v{! zbHUln0qi^YXTDlUKQ1Yz*>ewQ);HkIEllXKp&{gzD{$cqi5AbQC@<&!M{4oAZR1Ka zmOL{VVLOeb`}Dc|Y;G~h^{)Gju>}p{&CGraXL+iZj13umZ_yo878WSytc-Ut%^!!A z|5RtE5Kb%4e19K-;3le(K?st6@P9<}LD}KN+nm;mrL>8iIjOnhj7C<#OvKU>ap&$` z__72rU@pFa!3={5fG*f%d~%$vl~FdI)6YLwXc1aBNpoBs-r0-1LFUXW5VmIS#e>*@ zP{U;oLI~pFuyTu4OIN>4GmriR2YsGAGrDpoa5-al-07Z{fC;q5f(Nv)u(vrY&C6Q> z*JmcDrkH}xpnJ2@q>C{K=p{4=QC+|84M`U=0C*)2QuyzWt78xS`e0nMPGs(<#n`5{ z&HOn>+|dtuDQIXT$gs2Tu(!G;loXc>7>C3y)Ef)(Q%wDmp|d8Qe9CkMAAfsi=Ptwz zyd!+mhTILfiN+LSghb;84#Vv+FcDvM{)S8m{$I*#_Pgs;{sphtr10W4nKs^qPK+I1 zaUtNg3G&0i6t867S?Em6ii7L1k7iA}{`;GK7QV_ZWGe9@Ic^&TA z!9yAex1WhJJh#DZB{p_oFUE ziDgyLjL3t|Y-c4$_{%bP4rkGC{&n(rguQ#Q23lmx|*=VAiIZ5)b9st#YXsv@kc z3QZF^uX%j*`eu3wG34QR>B*Ni5t+HqG{8l^f1LPlgq|-9&u^ zB$kmq!EkwnPSYzmlt_`CdFs47ZN8H}t z&ZeAd>fj(@HS&fxu^#%$p<4zT14>J6K=;V&#FZp(BO#!)XcgH#zO0_8$4bF86s`J( z=X1hB2AUQJA($=F+3`wkCEem%6Y*F_=&r(rpeFfn$b(MidY2p^LZ{yya3e;K06HEA z(?l-5iUi!G&Q3EZAd!@`2<2eDeJeB5SHn%^6qJv9IBb5ZG2a%Qpb}1jq?h2n(2*eb z?KPgp`w3te%hk5U@1kzOFRp^L2(6MsU0sD>Y#DMmLc{l?M_)ldR4X2Xo3}@x=fVZ( zNXi?CRn_#Zx|7dNOj*FS__w;edaD_G6VWcB_vm2w{$!+jn_;(Z%Y2^-id*T?`6F-k zY5JlRz zmZ)f|ci++u7}Fu^RexYcCwSHg zF(5g@mtw?KfX$n)VKr6POB{)vJ=wN3BH_-jr~8L6t-zFsG~}~*jEaM5%CJG?*+(qI zKzp&Kw-VRcQ)VA85}F58IG_q-Zykrj?!)yla1Ba}ir|}ql;q_ZqN8a=qWZA`>>WdR zzy%vBO3Jr}tv^RcA3l2Yez*-=QY>*s^aWq>8HE|uGz%(~Dk{ZBUD*9)CXndN;CZq% z<9ChiR#CXCx2s{uAKgI>=3`zwh{=*0O#+!GGTQM=H$v;rH@5{&t>d8YV9FR8N-KMRonIc;=w(n1R zK7M&Kt8TJl>zZzP1!37X^1LI6Z|w(zrvv!~(aqLN7AtkQ-4>oUXcoKqP1|$h5B;-St$H(~-Ogjsc>wJ6QhTKY5t3V9~mE{o^mc%c09+ zC?7%6uCf~#Dh3TI+AQ~(r1M+$HF@tY3qTDJz=^zzSPd?sOwRn#??hKV=@S#DRq|%} z<;!m)Dq~J|zj$e2vc9UHr&iP^L@_&%&<4l}uU(eRK;azx7MJ}a{Cz#McS6!~@L5^B zxS2B5@>}4cx+&CuRgWe1*Y9SB?wn&E#y1jp@m>`P!++&pbX#51QS<)0LG8-76VrO- zu49wm&Hj|oO_UqT)e@KG5zBO34#+JkB9zkY&3rMxesmgpR&-fYQl4k_^!U&Ew*L12 zU`}utT`FTCB=e}QeI_EuH*R}Uvd+oJk5?_2@EE$tx)b^ktXr0ZarsLlec;A09 zaKI(+oB6+Ffze<$)_)I$cFR%_o_cnAgyMS^yi=0q z^-eUqTNiKYHPy1wK4;RFs*YzQBm@`}*3GzU!r2d!LAA z`^a5+Tle}7-y5sRzB8@_VmC4va&X(@W|t2ARI)+a+=T(TO7x4+0EyssAlehla46F0#3wOQH2oz_?tTv|7Hs;lx#0g4VyV z-`~~6h!~Y8ms($GE2hv$kwoGA8Gq;$F>BQLM-s!oj>p; zD%!1|79YMeG}`K4Dw=Il!r#y}|0L^HZean1R@SJ9m9ODy(f(K$A<#*;rWg_|I#f3H z6WQMT3mz*|6L5Ox{4%S^Nt!O7-6VoVt9n@+{pHD#FwxXBhVdbWnEBs{J$|lFDZtI( z7s7_ozEudgQ!4ino$>dWJy&99ZJ*wL{(Op|?M-#N%@2drD#z6wgx)H?8G4N)oHTM5 zn70sm54ti@7TPTI3aK0nDa+naICa9d$?U^H2BqxxVhzgFeR71tQz`{ciGTcj{`*er=7tB>C zrnVJW{SE1U;xF^-t6h^E+rpVw0!<-OkE&QjPZNy4+qbrUh$7|lVYLyKcYb5p(wnl* z5IU#Ab+6&R#nYPG+tfQsf3*HS7Xhl8xnrltM(u~gW;(X#@##|X^jmtbCAOGQ5nDXI zc_e$iD^A`i%;j&=^YNJML*9%t1T7BJm>)AO^+T+MbXaI-3xl@wYG_D_ot^dnHm2d+ zSyCL(e%DK*GPz{=Rry^)&YlOJbY`Dro>BkU4UFkyw_LSsJh;zAf)Jv=Y%#g$n1R}A3-5+g6h}6AO@{GG@yEc#f&v0y{E$`OA`*~=Sq-sLgazP8DO8BLp8V^|E^&?H?VK6r1vR$(d6L5S zo}LQM9804m6hBcjz4iS~#?RvYOoeiSf}4X^mE+I$7T)Biori(zY{@?+8cknLGzGD2B#mNZPUW8SvtqA$rMMPt1(-` zL?v#p@3?Rx?k2O_ezcQOY=L8d5ol;*^$ZTyRL>@4WCS6iqqA17wEkst!}7D^7A*yK zc6Rd>c6D|2_=`HtQ4uUTJ6dOLC67G+GV=b2g?Ok+T*#%&I$11TBP^~T=XTVl9`#>o z{-r(reT4j@MQa6eJ;X}D!LT3lckL_gi{cAWc4|#fjbeqa8iJvzc(jWceDzqq-KSP$V=mtWbtk zk_?@#UVQk$%qiv3Um`leFz(c^5^_!KXCJwrUudpN9oL#eQ`48A;IL+kR^U7uCDxcN5H~V`)Q*#PV+J z4^{65WegfyF3`j{H%JyB1R>DaUzfmd|6Bq^h+}`%yNJJx-!{#Siwh0bq&(@27=ASQ z&%M}6uz2zN_HdVAOHB{Ag%r4S_$k~^Pw3wETn3^w`v_3U$3%qd*9oAO3Q-&d)u{5m5m2SOQIM7#Ts7`P+FVd z@pAX$K|?8G>o1gU`yG z+kMJ)p}Ag7V3tN~-A2Fp8A*K`p;srz$s+&pr>p~c?2se9Iu%5Vp}^+Fbqw-yUM+j_ z#0D%gv>60Af~=2~+Ix6*E*|DljFrX1U9*aGx)}b3%(lmUaDMN@}X9fk?p=Q$CxsgY^N3 zgn|#zG*56%sx7-*uzT{fSTkCfgy@(lHd3l{V7Am}4$APc_Rv4r!^ykQ2KDy#2Ig!H zCd7kf5n!@lH8|JC%BH_*Z;x@dBGEc>7I_%nEvzAxo~+2%#RT1Lx?KLG$sgCetqxb& zzAZ0lXCpP2#U6doWD(rY-%&2!;gXV2Ms%vB@h)TQIAN0NEK;z!PN}Q6R$%cbQ8|>G zka5?X{{bilwN0xHNC?VI>`48ECV3c9n(%XRxp!FbfwFzYb?{~j3YX=htDM;?)%*(B+tXphVhn%wH+&!&V%CKGGx5W#EzNRAWbfIzs5>oBB8#a zp|-X*rKJu*9szng>CejS=31Sj{tsLqxE!vO)O#=wog@jj;+czs*8e1%xSllie0gze{0 zj)C?98O4FZjP0X0nEIWaoD2jSiD$67w${|#9CN-|JbIv5Kcq(e)amOpAlem*%J13I zdt0mR;_DbziG6!B=%(VSbUiR434n-K`a~GCWe`>&OoCyC1)p&AtT2so5u+fWHX`-e zBlWO)oACjJreV&y8V4E%`$bz zjmwv}_(q|2VF6RmKIFEiivRh2+HIr)qFetD0krbAWdVlegvWMUscQxdeg4vxY-Ten`p4s$-2 zF7@GbjOccfy86wHfX1}~y33%wcKk^Yv-UkuRj6=1#1lO2B)2|of9e%#{E3a>7jr8X4Nk!8Mb^sWj%0wg}E5Yms zpXvquq1R~Y7_>$huD=pYoPTJt@=guJ*2>Jx&naS-?eQSvf#`o}p-srQI{!P`iCvh2 z#dia6gYp9=_VpYb?y!`DHmbR~p2Px$zISN*%+_sYe_sPm4HaHy9_7a~UnxBH7%v1W zZyq_V7jqU%1BAo>dh4lkaayLUgDIYE$rRjg0c(W_f|MUv&7MD7M|8Cjkf5^qFW z((&WRu_K`f2t6~htdIYl&)}ne3Hj@Rb}_VD0j+-t-KNG(dv5e?Jiq0#i9c7#_Vj3w~>gA;;yfO@_5xY>H81OZ`5KGYz zM`p5RKL4!!h-KB2tP5zPW?Xuj zMuX>A-f}8P5?IokZoZ-S|6qP_$Q$Dtey?+s!$QY9+6wtMq8^pxaa}z{5%!!?u&3f= z+qmNMvslU!I?O}@F~XRnK|A_)z@WKO?-B!{vA~@FPUQQiyi`md(E%v*z}?akoi0@* zm}_l*q^YANuw>27(jIlm58bOh6pnA&L0aA!W_$5yUEJ4F=CKP_zEN8Ua}I5hOD!+f z`-neyC<$Sz;k&l=`dbM&4IbF|nC;GR>M*(vJ!|5JZ;iJ0XMWv+1?am)J;Jz@F1g0v zMCQ{`*%}q@g9NP$kM6xskgqP-d62d_77djwEdkD{r={l@stTN*?kCr$KWLMKgR?dt zF`SBSw!!7fJ#W+c=PQ%4u@J_*GLi3!QRex9KgJ2NPKU*8bAjzK5s48&qP4fKGk^16 z{>HuQqze-v`sh&+s~xX56~Y=g@c5_LKk?>jn9@4+QZ+?QbIvvwo}~!ml(;c+DN`=1 z#48TVq&jjpsqjYX!37?j9WU-`QxY15RWo;A7tvb2^#8a3JMSLU?*pxd;HtSV!g$tJ zKljCM@{-yiF-zdrNKUY_T=BSb^?k;5`*yyYe;xDB-d*Ps`5_voXWfV( zsi2Bda>b&eT4Euo-(_j-k6q^xdS;57|6_V5{3zk z3C1_X<3{50$Dc5*KA|Dpv}S+H>`9zF8FztYxE;Vhq&^U6kr!&Nj$DCIpzlFS!q>4ibLNkyVz~13f4UljkWxfmX86CqN6a&p zQj^F}BC$vPJ%2o(g3x#<$LWK`M&{d+f=9T+&XwVdvm#0mutTnoGd6cPfS~mTQDs5Iy@ux&PSbe1KE3?uDQXN<8%Wwej0}Q!jrt;4!tj)b z2QL?w)q@@it>yneN>MRbbbsjvCASPupE!Y~)TnfEyS1F;j_1bO9%KRIYukk`U%5h- zL-DH4%Nv72(A8~Rra!|ev^slDq}16+-7ZE9lTPF-@qUqPAXU(Faj)0GtDh>+sX(Bm zrlGO1v3an62Z2RlFhuKY848B(=ro!;mxZSW z-Zs>%uHWprq0ll`L(nP_CcZD7GaTv{yy{v-9;QUO@*IpAfJBh3K&b~YWGtUFv4rew z4d?b`WE*lqLM@odL1v8PyW&vU!uq0%1MCp8qa>*ORP+ObD{Bs2{wXI-%u3T zMhd5zx1no}kz))Q{(>liZ8#njIiJD!ws?o6?Q`-N9cm9z2Ih+9C9#^MDklS*-ZFw# z4Y1FVwJbd1T-mWLpc7N+bmCPEPE6e4b~{SPe0M z4b<4b-=@mW*cd~4VO-aiTfY6Re|R{^gHv#v5LVb()ok?m^q>qFiiF-HzRTahm?=Lk zf*H`X33q3Jl-3olCeLinq${;UuQEO!s@i5VrUrF?rXCm zez~Z8PAgA@QdUrZ-u`S`x68>lWfX*V@oi%?iZ_=$#hYai8;qHY9{pCsNIa&-$uj5| zw#19Mt?FC6@Vu_BPL`QR&gBhx&Ku)r7+Hf{A$UHY$f^5ixSkE?+b3-0?Yv0`u+kr? z-xo^!p_JuahGki1JQT*Esaf~@xiThj3??C#g;ss88dQTyf(3Ka(+98+H2?m3(xvgY z1e~W`itff%?m0b7jdTaIyS*HkVwWkxZl%mQ`OwxC?YeR>AAupD@B(!Ms#Zu5JIsur z{O))L6chuQkJ=No-Ve3ieNs9f$~^vmS;N_f(c@VX`$8n7%Q0%IOKJ8=`-*cK%jV)b z6oL+l4>1wG?nu}6S7ST(*YLks@+veZi%mX7tL^XWn9)vw?Z4(vZzJ42CYo@KxL*C} z|KbLsZ{eXU_pF1Gq>izabP@<((RlGZBhK}ie#I6Gf)@?OxFs}KG_!%;@Jv|}_|H|! zPX3PK6i4*i6B)rG-!*+$bxbt$9LwprNGF2Uph18v@z$5_IFGQ`cM;$We%MnmCfOej z?wZf6F5?w{oUn}$J+z?zGUb|6GVjbY{E8`hOGozXZ2iICH2!Rx8@?mtCf9|PQ=_ST z)ClEa0lCK*Gn{_=y5)+k)iZ`x68QaOvupU?c>cG?S(KJoE;sk{?4`S?{fOz5j5#}@ z(bGhE_M}K)r2zM1WQe^u1znW?B|oYas#3ef>G+F-5Ir2p9;6(uw>Bn-zTe5HiyW?D zG%E5ViC;r&T^UYQJlz`BKaq+l4%4U@M~>1g-A|5NP&^|sb*q>)lMaUTKq9iJ(==~WD!Fu7QQ<7$3h}6=f65;9GXE+4rOPEW5 zwf<@Qi5nNs3!0KM8O#F|23`?1Cf#!w<=C?JRA{#fEg?fY$B87ZS-174;}zlzQnR9N z9ooB(#V^-o9g=$4aHvO*g1~(;a9?RdLg2Lb06vBBY6MH~Y$fNY77rtDJD1}d4%bqQ zenTSoOYOyv0|RTQ{1m07g)L8j@c@O5b`L zCZ^~$@(NXIu>h%170=Ah_{{~UKLcOuu{5|*nG_x|-@zNGUG^pR{1e>*`Udw z`Cka;JIF`$xxvC)EC5g!kQ5-&;gW-!WD5A%9CYXOOv@i{z1okAToEg1iZ%1#m$l3< zy>ZjAf_~jQph9+;KY2gY8l6s@K+^^qVpe|LF!NDRcxu~*`!qEGFM9=yS_n#F3Rp*{ zVX7J8?Xr-Yj~}BY(nkV1I|Yf(zRml+5;wr>D`Tkv`F;#z^g_1R@!@R_KsA7?0X6ekTH>=sOwC~ zfrBo|yczx47curI2LFb^*MPl(F?IrQ6_D?*9AKRN6wjd_KGBTXY^Wzb#*xgujc-DE zX2}0b-~0D_BiMKD#1L}yna<4Vch*ffbuOZ(Z6-$Up;S@IaI6{`2f)-5cXy_#kD#_PmYg%}T{hLgbLdEn~GKQP(mQ)oaDc29((wRMrcZbu?l z{PT$L-*cdge@ zF-aCNL%N;v0t`A#%y_CXy!WD*I*M!aHG))BlEIfbab>jCaDk8@5bt0kk(~qp>cM9U z^;oJHv`%E8|AQV3x>+er)P2kRQA}zLU4AFO?aw>SLXdx_WKv({#4SsibcaIpW3}&3 z$T>i;!LsTsP8JmA%}=^(wix>tFYGFzz!!o3ilX({|Lfo7=O-J|V*DiG)-BcBv0k@1!eN=Qg7udK{MkoR+o!wXCV>+W&nlyNbWP5-sbNXMF<$huQN zY{*qhtZCC|&76wddE#lg=6z;RDdfzQskJrQa^}}1o|Ue>gLfaA3^8NjLC&5fa~)fW z7lhBoYs!aNjwnAugo1$J6b7uOj(L1|h&5s}X(~e=yZQ7~tU(%a4(Gh~fX!+-TAUNj zkR3$h5u*8@5IEeLat?E1>MNPdjD^Atho=7Y@l_6Rb8@Vv-7%Ax61UfmnHN}PF6s6S4RgVrdcS7 z`}b!$Tj4$Y#~!iBq;rJ!7KEtm=bx7se1ZD2f`UaLL<$TAlOSO8a_S-U4)D;%zJ4vv zWSN?rRB-J+feuvr5O5OJDeFsy5Tzt{--zbT$0iM5@G&qntmgfznqllUj{O>FU!fj> zXVq&spf3EjU-xf8xZjKU+ehh5cveO~rGuILkYoGy_YW+kCj7vRfu2dnr$JO#MV-}8 zb@zy52HN%@z(E<@%GC7kg9m^OdeBG!NU@!?TQkJ{#EI_b-lrl-CdWS3!B_*5KF88n zQy6>dn=jTk`5PmPKjJGC`zPCMy({*o%axy;uBhVgL$k&AASmA2zF893w~sLq0DiBp zFWi_$a3UnPXs(TK2TNHB=n?jxVX8O`6w}(A$hKQ$Cl3IMH{Y?lhT5pD-f^4w};DD0Y4bz3XOkD?~gsS7P(Ps^`sdE zHVY!DCNe-sivo>@RtLoX^_I$#w1>Mx!z0|pCb{%S$H3G#hU zNK?Lv4*lUk>vrPA4%>Y7kkwvf&lNw0@q?db>VE5zPmifUnR$)Q(D7Hn<6#UqdbI*i z+CFA&9ONP=iycN6de$b^l z%l6KDGk?JI3QH9Uzt!7}+#AHb59Hks+9x1D*0&lmVIk?mwlh5Z2e&dx`vJsy@=};% z-WQ=oOSCx|F~Pb%qjB5+)S-}<)p<~`ENa~HX_j5{{mr#}^>Xc}Rxg7Cp|%DNLN70E zZnD9?uNm7mk^aC}4v3{C8EsyNE7T>Sv9_q(^(^rqU(S#3j@$Yl!OZEkw%o06=NMF_ zpYYsdEKcI5y>sdJ0A%QUd80Y0sHtIec4P?AaGjy@O^}4*4L=6+xnx_e7?9iKZFH%Z zRf~=fvkvg%l_-onvI^xjVh_qPK3sA7_isnWZi{V%3~}WYCe^(D!7Ew4)GG>j*lt?8 zjrl|<%jGX?vK+h-cz(Cy4^9NO9k+xJSG}2C{Q5_!nF;O772flWnFq+hJdSPQ0Oh7{ zGRrzsELk)z$E926xC6Ub>-W+1Yx{!UWd6MB2m;-x0TptB(Ax(~nI_zq`grlpVa+7c zaVcG=ZttCe%xBwpL*MEblb6HrQ9rtQ&CeiQ5R= zQp7t<8<{I-#H~K2I7<&wO!WhPg}^yz0S^Yr*fB^p_L5#0phF|ixXRAd6oMbYVEDr= z0(~>2ovJD-SWAU)(nO0;7TO=aO9X;NScGwA)3=^$X#u=fBi4L6Qh*KG9bT|ozmMEhkoAgwrvlRpEGTtwp&Vt-H@+9?I9+zHNmNdBR?ht^ys=yblD zKnX;{b`|^Gjc~ulT1_K*Rq@nYW^#7+>4f2RX+iz67fMm?k3)bP$HAButvyJCpxs&t zOA$!r19bwGuIsjnnbkLFR^yI2eW z)YR3{7PMB}a{)#uNVp4EtLP)Y;?zbf@ZzZm^5w~&N%VPv=G?Xh7SaV@-|6XTi06IT z*o9P(;Rmso1dKYL<)zk9N#==98GAS=32~P7N$HkrbN?N-1u~LnGsb((tP68I7ny2z z$vXd}rlO%asHx*-U;q`w(Wxoq6(5jTKqYIU z@=HkU_3KNJ-}{kw<9Mn-1Z3;^MMYt3gz+g~L^)jT-Utw)#zCjp#xE%7@-F`nlxk5x zpymy-xc?Oi2rT0?$xYc7Xr%G+@T^ayIlSyl!;$Epz~aUcp6I|wE4F9N==MODs2NmsplY>LZgH_ ztz>l)uro{^s${2mRD8xEDvyyByEC`(3XlsaDJg}noxljqojYG(#`X9Skg^@;9)8-Z zc;o1cH)*u{0%*UxUbST*RJ<-Q{}UpuITUUM*Dfb{=Do!I7oR*`y^18o`7=m1on2j< zBUhM_Bx1M~{M3||j&Jk^1!S4`iRVWq9@$D-o`boruo6%QEN+LzYuHZh(4zeZz=5oZ zn6g7mLV}E+!okE|18Q2M)6?pBworh-Z*18HHSl( zxa)3Y*-nnSm6JOW7)Z24wzj%Z+W#giW-_2798;$1$2XZy|Uj5ch7E z6rrCO|K|1f1Hn?UP!}uWB{(~9eS-{@;J$t4KL^1)k$3Bb>bE0#oQFTA&T3|-5J2;(aS>^*Br5f3IW*jYB0QmI~~&@zn3?^%&t*pS$FR{glhBagXF zsBPHWFF6C@h8X-8kpHlyQ4K(C&ybeP6$9U`JPa;W<<9UOh22@X`{gem9YQaWGuDr# z*f-vA6llK!B^@$NqKbL?{rxV~<*>2AL=*%c$r9}?Teoa!zely8Haj-92nteN@K+GP z>@_(#2wMBF74}7HDSp{`?910LXFGLoj9ky3g6u<%Vk=d-Y~q*s=$Rj#f8_OA_}9sP zQTD?g-8rvu1$K|FEhlAh>e&(!9eK~DN%KrTi zc_q&oSEA$B%L|Ys8s7jcqWsT}I?bc2z3C|Ne|-41XPDfoy<;R4IhUMxHsFU^?^O^u zn0Bi@|K%NNfcgzP8K;uH?-#N$F^Dhi9)RMJq58nq^8l0)@uJ`&gJn^C|Gwq#cVq=e z^`LQ3a6CO7{)K`x8^cdze=%sfFlM*$ou*#*;6%0`%eQoD#vIQ4Ztv zA%oeklLSWMu+$V!yb8nVS99+Tj%1jPw+lpo(MAq@jBNF2Q^Dy{*fQ_Thmrv>L)$ry zg9nLTflY<$JW^pOWX@l43sAPCp{6Da*P`!6Ry6I9Ln~XCiY_;RL$uXsC4w(+ zP5a0#FNa4|+;1tgVh7vv-%Boj_(SQ={(C#yGYD7;+zmWgY5In@UWkT9RPHZ2!GMxd5t5)7P4K{jh_Y64dY1icqk zRYz_~zkc^_A?^+pGMih)L_GnufdHe&n>xGG4@uQFO#kY<`;3xcz1QLBw=Yh^Yc?`n z=_(3@0e2dc@&D23mJWSld=#C@LA>+*qkYAcNcJU}vX< zfIz|EUrH(}Tz4%R$k5%zlPFpkiDcMm-*+tynFELX|>EC%_&=s9xq=(CCnxTL5P^I`i6 zTny0(tU|nA043xsAX5sYy%{XsST&WkiI;N?cEb&NK5sIo-QzF~T+zP#9i0O;fpKQ3 zcWtC@9mV5(#@4|r)%;>5Yy0*0l|;tL5=(^D)h~e?h2|-;3m`4@kt7u_vXxbP{0ks` zfB*ii3pQ|dErf(HUMhT3iTPkS!-Mvi#-|YY`*3KIB~SpZMvxt){4j#=P#1!TDrI>O z7Y(!M!}|LDC@%H&qmdoK+`;;pyNWxUJFigls`$VFk+k7wB?CzkZBk)~(ZZzBN+h@t zj-Bb~S;%r=c)axGA2;Y< z(?^~}8IA|l9?{*}s&CcY->)nsH9PSH@&<732oA3C`G_Il&dzCtJ9pnePy_1*y-G#~ zhKm*?eOkDTAAjnWQd%n2Q4UQzvilCKZJ`?o-CAdKPF%lFwT;^-@~{PVOUg8 z<8jMo!`4hE|1u%Rf{o#aWo2ZZQAFU|U&9(DyLYE=^#m*UAPhz;v0_no%ba<)kJL(D z*OEZ$Rh(K;N$KiFzzVZN3N!ZKzkP#}ciy0nEV}q24K+Rh<{*qXyET0 zQ$(79Q$oo2{sUdfyaA+72u;PCU0}ac?Tc_T&gZ{4mi}cdVv9=p=j?$#8@K39sN73- z#kSq(S^vQ4Xt4iVkN)AE5uZk9W?*iXicA8j8kQDnsnh%Yex2a_24|zts(yfRDPqxN ziUO3DgVqE9*aMVd#FB;OB~MFaWF$m-;e>GlDIQ)v*1&K_BpMPXyg?I zP!b0R2a^8rk}Gp5ko=BL*ps=9r-aqgtDFK70%yFD?|S6 zGmYr+qc4nG{ru?@=(ei+_ltG;`uo@UOwhM@L$?@Ov6V3|`3YfDI;28+D}iz2%a5mX z=W1>pcI(hxJO3?T-@$=guvWA^{SI;!$*WlUsl@qByP~+4h)E9{%1g>`9Bl)Sx~1h{ zRjt=3Y2vC6qbUMjnvpvmtd^G6z_}&?Cm>E8K2>CY8YGnuIrZ?~5Ycl6QE&JctPMk> z8}HDpAd~}aI3lq`r-`2J*1lh{d1j!VcuwM&?N$N{N0nB*5WVIw zM|MYR%XE4cCp9yQR28rHk1idc_ffP`PSi5mN4Hxs(fi>o^-KBWejrxk=iTGo)69|T zWtXp{JB84=1e~WH8v*Ph&%jo1y-3nKx{t19`x&p8?j}7@!4_+yDk$_0Q-pnJ6D1zJ zL;IPJ?i$s;SN3eG$!9$->!K>w+Djw`iwUSzB_8b(V)$5P6Z`%bRJ% zTCs6sRRIGza8HE#eT^fx4oLpWxyQC69W_6?fu!ReYd&lnm+dbe)iI4c+f|fQ)%c>! z=^@SMKE1n(?JYYg2(C!6>g~H3M3&yj5e1`|&b0%ekH08K{rn=}aaXFrcV9~MwP&2) z7m9P=)GodEel>W?O=QwdB7L-Vz2}C^fz$j1*PW4CcgufF$OjP*Jio0seO=(6yFkbO z@=M&g188JuedZ^Mml|t>kaMtV$x-s!+q?eduBJqf)1s3nh?A}YYdMT#E+RMY8X(3- zuqECy+ABBt^g_@WRc*>48*alO`GmudPx}SP1|;zJYI%7*#wd$F`$@303uf??HuACs zBMP>(CEt9*_NO9DO)TGt;mk>jKx?g2i>(Y?9;ZalkpE|}Zmpl{@AN6dK-nn_`9Gz> zyV$lTqzqeKzHbRMDogf?acu=Vs@ZljT#JfxI&kpblc$ZG40{`FI5mP-A^g8*&mQ16 zH#;WU@At*FL-V>1N!+VC^E4KF7<6X;tht>kOpTaCA~)t4i1MR3X&aL zjcFTyCV#aewk4Zz8HxK|i+q${#Cpa}_>9}Wc{kk*ZkdPI56SJNOFcqEn3h`<-Lzyo zB6fF2b^f*7#t+8tnj-=f6W@3_eM&zx=gL!f03bSkrsCmI4{Z-{-uieC2++@~og}a@ z0_jFvK)A*H-z2)fViI$pZ!l}Dj{I*(>lXYHkel7$Q8A6B@Y=Tal;%MftC+g^C4yET zs5+~2j$oi8^XIy^U_t|TmMS2npj}m?NdHL@{2_d;Wa}BHu)r`ZkvXZpJ_a1f(h4q8NLOL5Dk< z6fmEGB0u=dNE}Tbwsa5bzZ)b^tpVPOivC8nJ9`egfBQ6=m2g8uu>>ohV=I?{QontB z?A%Tcj%(*jXbHVy0MQ}%ncU`tGq<=x%iDV%6$*?Ldhi~g2@L`?ME_7?={I=;Z`HbF zmPt2?1~H1I<1_pX(iq8j*glDZPQtoE__KnHOj~<<@wsj2G~)=wXGgFY6p?aQQB88lJytoBEAoNF4U0OPjrgVD^Mh zpp{u{A-v88KYp~_Q{?nkvOyZu<6`Eb8BTl;7ZZBg!15Ju_TW1-?6$ zAztB?%C&C1zw10I3m(I{@xUn&uKlNa4-JKze??mWHN1F7@&1Gb`6yn9 zmfaPG0!WX+lmWO19ntcUZMtUY2KYq}{tAlD!FHC4l5+L$-v{`3Ha0e7zw&;+j*~wg zgIM65L5klHPe>@Kja*UyZXy2>4r|O4^fg6PR4M`U1_#RK`0>L1EGGI#kA?(tJ%pQ; zCPp!+XY-7OpPd^jCKsQW{Dc95H}WetiFRur;QJ7#hxsn~^YCh)S65?h!yI4b4>Sh# zk7(w$Mi(fXV->>W9RpG|D4-tM*M5TTJs#Ofq=cAB!Bb0lX)Pv}N7mnmH#Zb|Fcei* zSsD6QiIU(!ZhDaOP(VXt?;#$A(5f-vha3w4h2PQ{F@vINoo=<&cf|}}ZndkSTnFi& zQe1r_Zs zbkUGrA-(mH?1TYEnz+?hn4hDC2HcTXEuj1J=Zg?`L!K&+evMTC;MzQ^CoVvvN&;#C za9OC-BHh705dM6`$f$H+L<>qjc-6bOxL8SK!IHoQCsvJ!xH08a=jElw)mIm<>7v0R zR^Jbo71ug2^|2AGh@l9-wKz@1h}P7WDbe|;o_CghQjr{EwpaR!;L zMgZLp)LG^$CCICtCB8H?>_zWOQIXuMM9G12ufHbnyj>$5!CDIDD#-0%6VpC~e3sNmM(0t3nS#HYFA`@(_JB5M78 ziBd0D@4~r9A!HE^B+TX{CbEGvO=`tF%uA42!C{?xdE?iFuVWeq)YENKR(QhzRQk z72yIDe_w6e7QuH!rPW^MbuuX-p}X7}oNSY85W>&?-lXC?uHeAkAdMHA;j^m{Wn38| zLpcCWyNRh593y3Le0yeNVgM*P;O7Sk+$OTr494X_B)wJ~W)-2SSRq&~V2F|*BlaQr zfTcZaD4Q-0D(r2eJ%v7-c?o{s9Fxm_op>W9fi05PX2^irlF|*XO(9L36)cf(H zKMtaZ1mH;6%1~h<4QXQ(KQ{`w5JBq!7U>dDWvmc9$eEcLq~M`zuN4UdDV_iP@^U<4 zVq>x3&YU|pj3GJ9=MnCLr9%FADB;wvB45Q%SP(r_+{iy#>Yz^k_is7br2jsFOc21} z|9}6j@V>Gyjj<(~5S8u&fYGPM#^kWFm#Hzed7eD&<39`T4I1*5zXHyko53xEkQ1~r z^Ka(GY_Y~;)O(;$cXxL~4IYMZ{$DOt{!%%Bnh)CtPLR75+>((>Or1h8X##RG8Y`HV zf=|*5u*TJnijZMnfG!{;Bc!;Xa{trczGtA~j2U?CSCNRRC8niSqT)l?H!|u1AXKc8 z56&7oAy3@>$6LvUeeKf_tVaQZ>g8yrVkgd$%yZ7%=Bf(R&7b9HgSBNyUwzXlN zumcmIwKX-+-|l0(^&7Hsn6s+8xbg^z9ulhp(<1IG@JvD`i1|>gUg)NZ@0X;l$C(B< zA{hLTtzBVO^r!zE5+2aPp(l>T2~?Dui%aB2+P~C`%ToYyh5Kk=8{`WGf~d`w;Y-xI z-oDIR>s~BL^6sFdyjdK5cgvnFdkQ(5Vq~Zd&9CcSFGFGzFYud<)rQ?&I3~ut=v}_f zk6MG9!+ziYd2OcqXIt4CUf8+3uJL;4#go%6r(M3k8C>YnJS=z~odDdDkkMNtH^}pD zCMH?~vU>JRar4yPAxw?e)C|6VzkRb~)C*^LYC?iE`rXJUA-OcCk_{>YnnyP`F<}k1 z)$Yx##6%zXY5~%LOEsWz4H~_x{^*Kfb3;cDJp;f35iFUVFTuw5@hJ}vfBmk&kjjUh z_L!YrR%NBqS}9gdRh7!aqbP;(Et_lK`QWsP55rK$M)RtssF)aH11wM<-M_yAmG{>6 z_IILAr%yXn`4qt8;>GOCU5F-Hm-mt5G!UI_)D18-L6z8>*6;2Y5U`3Djnf~~tumMk zb9B@eqynN!b|0LYf=lFW;Hr0g;RXRgdB+ncq@CN@HKGpo_4baBjgfuNi;Cb&Me_Ca zwWhkv4?K*QgF^sgyKrU3*%jWnX8-byPy}FYoZtZWVE>KsS~YZ|=ENA;{R~9(V6?YT zAS6ceFr9{V7rq9 z59;YHXg(_}EQBr7I;O9G1RyZmz66Gbdxm2oNFXSdB7g!TYhOgdu9{?kcFU5@q_wUoBp|$V{okieBkh}tL@1&y1!Op&oPXj)0Es&)E23S(E zjR*x*^xXh(;B_Fr2A~15LG$~7^~+!=4RnDIir}o>`I_=8+@pQ`{c+7m+LfOM;|}4v z#s_gnWG<9G2TN*ehx+=SmX(<}IB4?ozk2tsJTGr6QJ19=Q}XbR27X$N+sC!eYd*s< zhwY0P1xhDar<)5MQqR@kUxr5s@p}AsG}eoYibg}-k3%gbDyjvM>}cwUP5`&?mGIDQ@9dlibw}_(`G(u-{`m1AErP@70*;n! zRbMxJ5bO{9&z~O)J+Z~o&aU=!*Y1VW4<0;-eGv~H2r~M4CeL%{Bwr1I!r1ZVO-W&4 zYj^i!yrbgcm}5jKDVSy(z#HMvp)&wafQ4?kw*50Y$T&{mi7qcMpRE~s^r8Zh=!g`V zmS|@;gjGQ|E~z+)J_YEp$T5&m4CW@rBjZP!jmH^#rwoqHy(j@>1qGY&WiSN8Q1$4e zMX*MvAsLBe12mQBYu83Y6ZkH#vJKS)zK6GJ!zc^oJaP;ml4S$#+B64{E0kbkudiSz z0NWT-wn4{z9@85ox`5~050n(Z6O8{{IdKXlrGhj;t z8+caAo==}dg@k}#A7+8{Kw3yuN+quDqjSShiTq$DNnF<+8damyNRL!w12=dy_IU z+P^2j9<{0t+ZZ(tHqCYZXe2&oTwQ5@AHNs0Fn+DNT6KdwFoPO@)e|`yGEW_TB8HbS zOZ*LW94`EMJ{B)%#6m(*{Ly$Y3%Z>~*c7zHV2xa$ajy}M=Dxs*eHETcXOb)VI@I}Z`A>3CuTQZMtq<_bif30 z+`&i`gHkrnwr!FbKeI3Y#!GoG6XoQ9%a@mw{5ryc1v2L=tIdKTW7=FC4Iu|sG*Mq; z8FTRQb-l1YdNdw&!TtN+5zkh)AHM^^->I3Iw|VubkB*BUgColq(jQ^+`Gv>@Yhsw6 z(B{%@7sL)pOG{%=6|M%tj21sgd=UvxpZbFOaHo<>Lj><}VHV*6AsbPTCo?Z^ujCzR z$IDvTEQ!{jT!C2lA{J2&F<~%U7wsvsS$9^xQ9Iy8;0sP$BI=y%dhIrtqK6<*3P<( zr8_$^B7L%vwtSz6$RQJxo>#93#C=4f3<_WTIiyYea7IogrGrMu5S&LYpn$28OGf|% zwzfQyXc!>*0ZRhNIDA*&7yP*H+2wZ#TG+tI9*}W*)sYQ8a&vDcB!sbuqT5_lgoi$Q z@j5NBx2K17_wJdmU&&7EsH8{zB;|WMgeZ3B(&i!^RaI7oVasl1uMxEEc$lJ&Y2(Cm z5ZW7ob29=Zb05ujwCPZGvF+TsvanDcwCr}r=$Z=8TWBdDB^H@;>BB#OImF|1NAmP% z@D!hBh#JBrZif#ai$S3E8*>f8>2!`T=td>6VT10Mp5DFka?{5|?>y=@Ct2iBl$=fo z1_(tE1qhSsd{A7BeLHU`Dk=(2__?!Z$3o4qtbj=12QLF)L_XEkQ)A~IzotQ7g6u7^ ze54>GcN?`1ze6E9@+m3glmG_-*wYs-$dd}ItFgYB?*Gx(+Vv2j>ctCWQGGxv0NA67 z$7!#-`2rY01Q5f&qq%cXu+zkK5q7qNF>pa|5;y?X%xWq~2H zC&KHB>QtK*e>l|Yp-nN}Uv|a1pYJ8=mq~~S;AI&bL)OU)xhZ)r08aE@7T^K4 zL%$Ha7MV*!!x%O_5{c*ADIYRkw`p6Js++A`KBLv(foJ{m| zbh&*Zl9C}9ghb`Vwe2d-3Y@x>Y*T;#$kL>+a&S0585plauetZ2<3HU^y2MVG7cX9% zb#-+gs^&;Tk-YT#cVf87Y~Eth|H?-IZ|x~!z&ff!H$!kZ$V&6<@(-OcdRSac<|HY9 zygSA0P>6_ATdTft5uGgL(##ADW5cfN%-g=Wf;Ndcdm2)7!)QQYAY{pFHQg(um{*jJ z4m17G{9};-4Uy9)PK+R>oBy{EQf?D-?HZC6KpW)vhuj(&ZNT=MpC7(>k+~U;^8!dL z>hokpm&2jTT`>1a;9WiqkOl*IkdeS&HaWGuRZj=1({$(}-&Vi4gNUh;@ySV0E*3(3 z*=b_{3c>Dm<05iq@)}((a6fw%NYXG?_IH%{+1WFrqX1(h6JA?mu_^Ps#jHooiPu{q zjKKp#4hN#t!G}7v!8mw#u(A^G)X#GzwYhtG0&dNH{(Kd=u$A~R0|WXMzrD04fmcy# zlYO=Lz4zeLB5)vrj*Ofo1h)<7162#QUlIq3IrQRr`S_#?X%DTQZ0_vz!0M$Xo;fp# z{OKkmORFjpfmgh|cDA-?d?9{I!oxEm?8{KvT0}zA$(z#?ppl`~iadmJ7n_n>0u)^U zJ8mJrV5#GebKnWv)pdjCgn^C@s6<;f?MzH^FY<IJ7W7jeTupG zk)Ogto*c(nS=Dq|NO(K6O3!l7RUj!q8XXc)7~)rG!$CB+w;yJ%6xC=;Sb0muiHb`I z8QyMgZi9ICk4Ev%)c+rIZvvI$-}QZ;#!hqQL^x5AC}b=Rr&&^n$dFl?N}@EYGeVRp zvkDDLWlB=YJcULgX;4T=rIg0!bM(Ki_g(k%zR$Dn=Uwl;*4?_+|3c?*9LMkX+xxq} z`@8q{1Z?S9rVhkP66SFsB#%k*mpnh!^wbs?w0iX?JTnlPIP`61Ca7i}Pi6Hr;)>_% zty)e@F)6r}c)PC8fydo`uob`rCdTeu7F#s)o{8IJ)4$KbstE~aPY)R^BO!p-6~+g1 zRN&cYhRkkgKSYPSU#ar`ZfbL8l@F^*08EGsK3J-yqn4Gk|43!onO{{4GbDdi@8 zbsRKH=RPzh41pqLwXx|zA*Xbp0o3p(tw&p4 zB{)QgNu4{9)y!T5`jGam2PEUbv%rOJAOG&z+47j5pUJ|7)5J!?aZ27it`4u6d8W8N zC^GUKzQov_em!S!KLG&&d-gnG8Dw5w+rD4Mc-GW7KtJm~o&Gc1MxaS|?b6X}5tk+} zB|lT2XDJTChq8@7B@x?D%*^{B7o8j(Z8jte>WX8>*vP;2#@)Z*vWb_~&9nQ04pOtEB30ZsI+bJyGsETrtY>4PYU+BX3>f0=xF_&<6gdb zGnUkKP*4kr(EM!PyxnKAkM#8)D24+eXrPX~olRQ}St_teTU#3)ySx;9#Zhs1NS$O&kjNx0 zQSQFay5HZ3W0D^|60i=@E9cIm698olY!%LY(ZYp@A&RiZHh+&O8`5l`f|!LnBYRM$ zr>V2y9I?zZH>$t^?dj>GL06P+H_vukXkv1&>D?3G0oKd`rzPc~{*zB*!CJljTU!ge z25F|xEmBs}w0qvq+`DJ`tvfc*8@&AO`}abPN?dKd?*=vxXb)zJx<{0<^8L$w2YTn{ zubejRF<=O#p!lz>x5jvW&ulO=B=w#CK9#_r$$g1mWjaB$3)591o;7MYnnT{}AF z=FMl_^T|k+kss1f^=zpA`2N*vd8%+wT!fddr>Wqa8ckuYQYJY!!hh>%q zyBh0}8xA#)r(}kGkH9YV?OXVyF-?UNw|$cF_>k@N>(>wP2uX1;dAOPymIp)p2^HAd zwWbypDNXO#7|1NvSz9OJp-92#oF8Ez-+Sb;do%76IzoOuZo1ccE7`cg(|v5VZ@+Qt z)}ndygl`^6-G^@fF5qN_jvAYp*~5F2TL+U`ZQk6&^dE#BA(oAYbEpcK7ZUyIRshOWrgL z?2?t4xs1WAK|$z-I&3T8IRP{+#}cg%eK&7<`LY*48d73HPlp#T1~n>m=|FOYi8R&9oRbaL)C)8;z3NXy>;s?-R+!S%+!sza^=#W9$BfW_gaYt z$q+D=U2@B;%W%#}O*Jt!ojQV9oR1rZm)#qJdxSQu{}sAdextRu@ywZFk&(Cvr7`O} z#$?Udwr$k;pyUS+JlKN#E6QxYqe&Otl2WPpM=`;A?RkYztr>cEUsPuy1C1y7b&% z)Kgo*Z8g@;trnv_893PkeLMIxOc|tKWHVYw>1b&5&b;<={S6{UAj7(~YZ>@xFx^X@ zO}yXR+waH`VVb?Zqy16gBHFhv6NfD}Fu2d&B<{WawbxhA+}vC&6(E1flJ|%KhpMR^ z(I8j_V}qF9fB4WL+-e!2{nmyFB)>|=M3EBa^-MN5i7m>y2u}i`M|TEnGOld&=+U)n3Te96a6X(;G>I;9Xnay~Mf4#(F7>$Si z`E&m8HveMSMIz_mf&b#uMefl({+A!_kuqz`mYI;Dv`OLCu z%m{Rz%j!QAH zw@U4Zo};L>!C5FA>P7~*(CE_l0y~=0$C8o~P%T6{?CJ)lpoE8$gu{Gz2-D8mVODul zF5ozFtc!~a)}m?H)}Dw-z?fBcb1Uc)N3aX(a;;q1`a53_VWBZ}XwB7Fg!IKIVR#}5 z5z4BnFj{oIba@x*OoC9*vBloHRS`v=qpUQdOZN=7xe6VhV7JihnW_AC8~qo1c;o%% zwihkt3>po`Q<4Nc8as9@=ODA)G3?gg{=JisYez*!{=BFG;-YR9I+ta0sq|_kYK%t< z+1OB>2P#DwGg?cl$YuhlmZ%4$2!&6op@*HjNOT`}`!+p&wWb0Og)AqwF3+v0AwEf2 zQ}ZhH2KC4TCM(>(!;_-wfn3sM)HcP7TMO_fEe*$0wOnnAv}R%-CS#kLn$k6!nz69Y zQ~wP9{Uf{KW}L7rg*oeL~_Q|%>=e;F(5-|WJq2nVa>XkVm(!I+6?I>ejYtm0&uRU z#UZ);Z8SM5jU|mq3rJAjPCGkGD=QS(1}j#aUj&_scRYLcEY(eI+IVqyD6D~(N3Nuj zhw9mL;o`+LtS)Gcl!-6B9T(R;v_DTp7j_Dd7ZRe<>i}w)r>n2!n#SQ|iKn8X<{BGY zlLW%4|Ehq<=m{c)tiePgg&aU4Ui%5LRQG=UmMvV!o*2)<(iD9Bn=9er+&^>Cj)Sg| zMWVT=dV_5lcLr}W*U5~?68fB(TOJ+{D3-u`lZC zQ^oj}!v`NgCgtA5X9VDnBr=rheK(HtmS?TGi<~MDIjKTwyWtN2Vw6g7!IyjD(1|yR zHN+kYqt|*fx#p+oQSd37gs4$nyC>j+;t>QCfBR;1cEUVn zSoNC1_0mO``7e+)pxfYJ2}_U(gw zb>LARIg%b|;K@5lbM2aX{_I(zaUC?$+&tNI5Ce5>RLcoW>&#iR1nm`L;Xx;(RzHG| zx3X5P-X)O)LA#wj+mE9|+*R?8R}p7`#yGtpckdEY!3cs(QIr8oNw~~W$$0yACuG^L z+wZ@Zln@8vq+oZr4A$sR$Z3IfH%xo;=A6#1(LYO+5vSd_vHg*E*PDA~@QBDPYD(6T z7qi|t@A%Q9-TU^fqn!uHqI>tF@S=lcm`X~QCia_aZLP8EFbv|ux^7{x0x&d~Fd&b0 z_yQA?RL&k6T@{sHii&g^8#a8nHW|i>ZwqKWN5D^GW9~36z71RznscFvm6;i(HDrCd z$<6uAA*J0LdGfZNL07J9CV3g3FpOm1?AegQy}Nf8=G@%6^`*Rqa;V5VcN8TY{Ha?z zk@s`%JVZPQD>Y`!(WmF9f1HYX06--iy`4K(?Hxy*w12)xg7wEw>gfgCU&-=e{y}Dg zTRL|Z$RBw}tQF>mA`v#-vlIU6OFZOXJb&ItAicwG-#+PV1qXrJKJ%Quxw&HO5>-wP zz%1>LCN`Yh$})+vavP0P8xi3DQkb~)rVZ@I^&&~v?LJx(m}q`>CcBr?om36Ubr zze`pHMns%pl=t#Pv`AZr8{$pO<7}13TCCGl!0?v*_)(;!w)f%tyH4YOhMgI^X%TI3 zmZ<9K4UkYM&6(+Fy}S9 zZNQ`*Y6kKyxh8howiVo^=SJd0$I78nOMoN&08yn54pVZm~H_RC*L#tLB5Zk(@2%f5|lyCuW z!BH#98c%=&J3`xF-2HVEbMr|+J7L%#GSw$jv7v%{{WB-C6EMrZH(cl)JwV%)m_TVKf zYuE{5ze&XUnbQh}9IOo@q{h45j5r~vk1k&HtbIbJ6ow;v5hV7Wy^}GmyP`8m zR?ACiVpK3sE>?xglyB6DJyT|YATZ(j`yX_r^~ydj^yCdp96xg8+-cLiwDXZ zvMsNiR!ZYtkH1`Gof{M3q7xn3L3M|*P z_5E}5FpDJ9%OQra+GH^5Vd?>-C+DbCIetRtFhx9K*=6WvOXPOAcux3}r%wa4?Y9y&b9C&bc!O^R1?2!UTmz<=B3Jm>lG$CGRAdD0I7oC8 z7;1DC6_u4!#a0_P&i}otRAvKfB9;sv9)XX8RnS3c@YM`G>1U-9JakzF#eRpO#(VYJ zQ#S?UefYWBTrsDZ5-TcEO$hQ1AHKHwaeL=S6#4iWUR0L#>r7w7o)RtY5k170q9UOl z>fO76GCCbhTSRJ|stTzX8fmze)=hFUqeoZZ4D(#7l?>$Zhlta}k{vs$HZ(ahHdWiT zH@Ll1>?vk`k(}=LbM&DvJP`6l=H`wh8Cfe}8k*pG@a?m;S8m^Sz%z7gyM{zMzvC>B zdDt-e6nS=Xq(!zi(y-v*u~bTsMt=I}QBK0HqXWIsun_0AYq!q=FbJaLjR0BP8Ens^ zl)mje?iH@-)3>jlLs=ko=Htg#<22dZLIuX!rDA8T2@+C}NB#YCshUHr$red`7|%1o zg|Nt^y;&;KVf~x#%=@KxCqABT4`0X`a6x<%jQ&HT9jJ(AyhX6tNoolnbbFq$qhl>v z!u2WVjaG~=?2y5+hcqDNr=p^=;*OmaIgo_G=%SAU+)kXZfImU#XlGZ+Q4)JFH*LF( z&277H^SK(ZH5b(QQHYBYl~jcUA;Gpo8xnT+R%((`p+e1L=J6Kj8x9R7_ayl}>8w09473Qu*Tx)b zYuC{Y^uAtBX69jS$)l__FiF(-xKb?51?k?oY_<%hd4inHwr$9zmhcr^KjL~yl%~l~ zH8OgI&V^kj*HJ-##Sq3YSFDI0;8x#Na_r2Rit+0}ye1S6q)^DlYMz=y`5njO za#+~1+cpyBy<}ze-e5qnY>^W)g4x`5>?jnL@Yn1+XCrNDn6A&Ian#Z0+$`Cim-IwY zSMS)ROCFwwrQ6mfN4yo{kL(b6J2o0Q(U@s`65yC_J`p;@l2hxsVUJSmkg^m%##a^bwzGe`C#w)h{?Aav&ZjF+Ng2F?OS2JENKf<1q4q7tb z^YWZLJ8L$(|DGZZ<*8;&Mk)dkSn_yci^IJ-*u#+d>5ve}!c2<6n45)7q`4^gYkTBV_ z%XOK*py5}L2uK;Rn$2h9*h@iS=AQknE@X0-y}P4^&n-L!^>+J$ayJ^SS=<+ckR{swhTM9M@hMzP~C>co@iq;kjG<|KZJw6|*Kk#94>p-X6^R-x8r z0Osa#XVf2Mm7?Wlwbm98F4{QG@z0l;%$WmL^-)(JJ{dzczAEKy1(6RQ-gm$N zV}Ft;vCX_s)e?(Ei)gsjt4EK79g6-85fbtuT7dq$ch8xR1eXQ0KT`HNnaZ)en?rRn zE65gx9UKWn_t&s^U0_qTDkl_q#jThaqw_kufTe4LE?pYZ+5OKx94L~%3;y{Jt0H%& znQz#)e?RjBj=fr6_|^4MQkPD`gx~QaC{7F*rQidWXry01Y$HsYU{9D0LXM8uYlla_ z9F6Sf&-cZdig@ea65y$L5bcp^-$~P8lrpAwa zK#f&Lsn{YPO1W#pO4-J;RRlU=N6R-_TIRRtDJ0D|*4;tvHCRT>yD}@w|%<5c3;u3Gp^d#ev68d|>l*d1=f} zD5pc!5omM2e0lrk&Eqw5FH>aAnWpPfiAf3Dx#rt|pIH_N7T^Fv{1Xb_B$J2@le>xq{;mMEB&9U(^9-lS9ck&iwADJViycPl7tK?)uW8+`j=M@wb5F0EAnG;lXbQw{A z=ly|6v$qn~!XOZK)ZA)gMZq<;08=Z-8*Gh@jZ1PXUX9OV_6LJuKegWd0XIWbi`B83 zyq+}dzLh4YQfO*$fLc)p-mGls&l6K$eAPYs?wRnIm@29-_%xzm!mc7?-71Hr)WlPM zK7vS{A0;KKSyw_LoVTQU=j*F8)r2#JEtX?TIm%6i#do<7oc`~ssu5~xM8F|!$wTNX zz1;J7b=sW?UHXpmdCrxsPqZo!)Ggx4$Sg;WJY;_8>s~>_kvKL(Rg3`m0TN7CDS&?NBo46NhLQMp*=?Y6d-h2HtO zjy$}zvo>t_iauIkpD|IWxXwxLA{PDCmKIz4e0*+lr^wOBZ`s+=0;9*NJq3+_h3Z#L zO&h{n8yg#2TgRtX!5p001b@0y>)IC0BohUyo-spiNh5K*`72$svdB#b4=Zh*1=}bT zuKEtxR-dlDLJ)|h-;pCJ2xF2j=i>6kwq}rI=uq!*2Pd4L+Sy`=7U19CpCo@qZQG{a zHP_O$Rb(z(SD0(w_H&-UpBw`U<^UiZ8^Ogj65NH?j;DhMN@Q5^pFe)6%so4l4By*& zdS4)ANF<{R6F2v~&imJ|4?Q&*{%eqm$`>{hxSh|)4DFiZWFFvT2xY_S2TW;S5Pdx= z>QG(fa8#g$Qkv%V=<;i7-=CG0AuJ*TH7 zZr5~T_n_T@XeHR{`Q_8#oY>U0SKhvVKM`mS=B3dXc36lF25$hfaRS!H2ope-Ecq); zS~)-YVajD5edp>`?Xv%^1sI?^=e4opw{&Iv6yYFvrLghEKcx7lQT@7GBd@Bet`-Dj zJOsjovgp@1I)Q3)a=JV=&PhUM24jtQ0hw3zMDHb#bJAysQ0ipE5z`hPQaqn`w61&k z#Jj=4UiK@2;4ptTH|Fdv2*iGdd&YW~&EuS48XX569{kmZlL!4gSFHUa3W_QHkL@QzMS z+B;eg?54Y(_Oh=EOWFjCzdhqXg9d$wQdVDsg3ApajlyhRTKl-zza$e#1P?{V$UrI{ zUt#oEx>)Ar1=O3f2`v&F$Qm5tB4IrcVK0D}%?^~=x0OgvluPl+= zA8ei*+5q8|t!gW`$1t}Ctn6SZxOLdz!JdDP5WWIdgJBL_d5jn_n1z~eIlnH#0W_9kMG`5pwbvJcs6;<@NhL<-A0#R0R^E~az?Bv zUp^B1lDnJe1NlsP|Gw$|d8w(iCw{T!=4xmEA@N=?L>&POTzLGpLcthq*@7&tWNDY3 z&eK2Xz6l(E_E@cR9q5umo#)!)pjbf*Fy+KL0K?@84&@jHwC@h}9m|5-i^bR{!O&F} zcddGVkL9r(ON2!0lPefieg|gFr7s0LnP{x$)DgUH^KX}s4eq9>=!mO9Pew2k8WK`* zz9cZE?grJqIDKS$nR45R`i1&HH}j<HsdF+cea3t!hYS{wnT4a=e;+qGE@*l5>%M<9b3;xABW9t zj`;h(CDcF>LkP~JCozOuTZSlELBV@Cj1%>g;*_P}wW6Ot8)!3fdDw~f}X zT{|RZVd#kyy-U{_Em*qLaFa*c*AsIe#0#A)@?z^!>dyZ`tZenrq)_RM{Ys#5?zJ^? z)e)(C%WmAHngcQ!W)J%_|3m760+m^W!kL9SP^GmFezTV^Z$NKSA9xux!MPZoE^n$jEA{-^aA4oQU3vG) z($1eeIdk~aPB~Tqi#fnJ^%3{C=vapORCk&~d@^lXFhn>7Mn*dnI_@FcU9F@p(s!GF zzPzkYUyEO#_MCG;DP?AA>ReT_aMrALF$ui<(j_{r`c(h8SR;d)Hryij%#)bs?%f71 zx?A_|r{=5=@XYemXxBL6{Fn`$$Mz+XxD-=482%ai{o(0T#EWCZlG4djmo62I9Yo2p zn2ifJY*6)m?O;tV?K^TmW?GrwnA3mnbGe6GzTVdJdith~>o+BhZlnV&W1Xyo+3D$@3j;#9WF(-l@i&bsL!uW>o%$#{ z+Y!+$_5w&s_$)c%uGB<*Pl|Bw7B|s7Rj92u8^#aOx!{AOURREy^?7I`CQMKm zpZWC(xNJfN1~t^*Y1b|~Y#5&zchLT8A2uWh9vA{}_ODx5q5jBa()>k>P?+w{NbVh- zk|*?=OAp`nOLBXieC`yerE=fiZ{#c_aL^DjC~HijzJvTZnlg z-DB-2@UMUcQp!{%Jb%DpLB};P>OgCvyU-!ZcdG`q@KtlB@kvgUFAi*P&UuHM>2RK9 zx3ew=1yQB)=;GhuLi=RC!+J|zodvF)WQp0rh4bX5?(_9U{VIu3tUgb5hG)R(PcBzd zmLI;qvMe{FtaNtgWxfUP?Jb=Y&(9A|@j9!s>xlUnkR3~#np$R*A_7W-dEln&`aSb= znl_VyHlb5X=dX|unH7{aTz|ir<6=G|iA>*uF8Xe6O;iOC=#3wHn2v(o4m<{RJjfWF zR<2OrqjEse&F(rSsUhd?RnKkPQNae*l*&T1s1%jsc7!Yw^)!>P{Wu1SJ8lDHi1Nw! zMJ54bRx$kU|(T@P;4$i z6TN?b`z@soif5fEfgXk9QLs|F<6KV)i04%Zkv3lFba863RAYD?@(4h6oK3;y4wuL5DKPl^`}c3F!`v5~^rx;{sk{`Z z;VDxPQ-3Wko_XGw;dI|g+OSwusObFsKwJCN_*ZhG)`!lXJiq9W_L0;tfe*I0Lqxkb zJjZjEK?iH{xLh43kyWB;ttTL5 zqOty_O~YSL;oMLe?RWTaS4G7;RHKx5y+BvjRZ8K{1lyu#Abx(G`n7~4Jx6sx^hk$$ z#$C&=lwJZ{4UYQTH%|5GgY83Jo}I`*ZxuLP90*CynoY{8-?MLTyU4srumrXKNKsG= zCJGvOKkP?TKKv?nrLd4>NdxM52*}pm7$6N-cR;EtZh?D0#V?y>|179i=e>LWyq&L~ zvHT-SHp9lO2z2{e1ZP*I^cM>0@|vv$3puDkRd1FN8d1hvGF;M;a+*UbY7)sdvKA#X zY*b~f4P<-wZnu|HBJ4%W^GZ7(&M&ag1lG{erk z3K=(b7tMP_U#eGIBXwSpoiDyoz;s^wngE>JBHIK=sx1)jiV zp>un9_+oW`zK23Z%nfWwA7^swR#x<%m~h}RbfUO(XBv-C(D*qqohr}LpFcmB&dtcq zR;1Wu{`^4@S0N$eoNLPL`<;xqc5T$4K`o=Nux}$D?}TAPF9Jxtb4TDifc)^y6g;4I zvGT0|zu^{de{e-nNd65?i1&d5oFue`)e|pJ1F{0QLF?uH`(MDN-~RmvX)5oJiW$Ir(xQp8Vf?Ab>u(em z7Q!UG-+T+L2R#;lntB?acj#ZF>&dCbWq>Uy_ry#qPP82|_6P_T9{~zLp3v*SSmuSA zA8KDaV%(X7ZnG_0CBTkxjM7K8ML~|DCO9xqU#b2I4un(#khrFgw@fw_y@kDfEc%39 z;{~D8#EE^n*aeYyr20SGuP47HmBgz2Q~V2iVy#qlEi6nhK;X8zVD1^QMnZxPG#v{D zgk+!dIlR$!YN>AZUtKf5hXs^x9@xMCh*K48D?LPuzketG&LM|K-wo%b{`R5E!rAjg zh~NkUYd~{$-|`cXP9Z=ySfPIXd^GL>f-KJL0E z@f2*EvTa*7ZhYagFJ=9WZ4om|C$|>l6*OrxGU^n!YS%rpAXX|f27pWn1f!cpTa)z< z8qu|8l57QR58_J$gWVKEk?n%iE2|FXmRIznkPcy1@18x8%~Lx=Lz=YHx-2LbJpbcT zhWg~>)PJ0@&W+{+E-sU$-pksQoL}GEGJCICXv*Y+&)4cgxG)fz28U^Bhj+ezi>e#a zGbCiX;TL2(I2CprI$^{ssFMUu(8$8-tM7lX)$8k91^ltn8&EXr^-4{kCgNz+FT~zf z4~?wfUA>>2{GFaMH``h9IY`Rj*UpEpKzu}egB-Z59K(Z$?xUz^>-&>tXd=<>Kowcb zj-D_RI{V)qJZepd4(SP;YFO2(wMU9ae0&`Y3>$Kr+|b;W+3iHSA#gs}L~?lJ&b*rJ zIYRi9M00Q`kr0{!p5*Om7xY=heAQDP?M2S>F%TGQSYCDylIUL*y^tN(oP;SO*()#Q zc3oaq3Q}eF=mm&eO2bHp-exGTf!F=Dqw|7;ht|xQIBC+C&!5o}fcDEyES9m3CI7A13kw}je2x-~flctLUP_WRll_JF^Yb5M)8TGa5*>O&VQv~fz?nFGF=~F%J=ouFJErf3iN;8^*X&PJ z{5I*lJiKuH)vJ`h3qO&OMyUnOFL!oDNrToSyGCQ&nGwa_B2j}`lcUsI-W<%#BWo5+ zBT@FjrqC?KB6Xffq}!@tq@=RE9H)j{#Rtn5$XpeEYSce}{R;WHbop`@67Q)idWh~# zX__sDzonE12mJ*BDxigW-GpD==*7m$Abfjvgj_v`xZE|1$B>cSSNCIm-_{123O>fS z9Cq)ns`bflx4tH6MMv45jcT+PxtkZSfZy0>+#~(OPn2&U}0?1Ch7K3s*UdMJ$iiTCmrv&>) zP472UerV|9wO=>FQZL#htcfWZ%9EL3j*wtK-rw_A)ku}2&-+tJOo)|Fj4YiySUSjVnrO=)T;f>Y_>?I$rd9-4rv*+sB8)gU{%( zd1mt-3sABR6I>7M7=1V9TrC%gYHzq!$}}N%--IuO<^A>JhYv)jZIL%;yjfJwW_n30 zH0V!c5J}E|84gnmPvvn)EJ}5&x+t>&PjYMthsc@n*^HeNzRTGi^MI$vAJB3(_rZft z2L@b{VG=A3Mn{0GS0Uh_|<9>nkeiQ)rOJw?;z zgPq@92rtQJ2VT?{2O%tAT*yq}nA~fk%s{v(i$w4`kN-7&-L9_U(7vOa-PKY2=3nIz zHEM!_6I?j1ExX~q@UdE{&0UIwxBrJ@|NpI8qUIT=+$_?3-I_Hw=r3kKDs*w=^5y24D+d#5b(F}<4 z6{uh#JC_n5lt`6!xdROdazoC6UdENVM2V3DMfn#a!opTwTZ|1xis5mH0tJWW=ac)1 zpa=|wEClSaR{AbGyM$f=SVxwMlFrzhH|fpTPC`7i+RADdO^8u)(QJZT41qMf1B#}(L|>1X&F@DGJ->t|Yn*)Qia5|Ch+;M% zILCX|a#Q|FQ;~J+J|k`cs>Gwr27h;0A1SIyud?;4&6^xONzb|6oVJenLw=0*+bypM z4M})M3jQXw(7+hN9-%1U=HeEj{0vWF8&h?(XoG4)g$ZdE^jS~iS0p-<#D_%!H z0cN#zQ8P(pf@=_-lqKOI-RjHb8sj4)58hvy@T;Ys#??a>d!YS12I|&sWc};+YIc7! zLjJF}A$>ezA|k${LU?_Cay**0>*l}MzO6Y3fZcz4_ooD2MTpWs6L{Q zrkV#K5QnpHNZ6DaHV>>oZdusjB-N^`!AezJHy17RN`itRRgZ9($3r?3fYm@oQY-<} z@x0lh+`26Ycs>gTmouNrww*gWw`&)-EWO@+*Q@>9^(I+=T7OS4QU5`E| zh-gym)>c$|yyx&m>J0E9NF@P$`%-gqM!@@c`m0w>{z(d7HDDlnK>k~X_c?pNd^rb_ zQ=WSL#BGIpXiO!wq!Ti655O&aDourd8oG6CJD37o2`b)Tbl_Bfg@pLiZ0*a-J~BTNDWoV_EXoDPaItu6 zxXEr3bmwUH9pRfgbT}Y1-iL9-1&f2=O7;l4E_6wlkeIC>C$Z$@Z7EzS85$yTcZIn$ zBAkI%UAr$LVpEI9Fu83Mz;0zCBSx9#kDyrUb_b2+wQfH?ZqV=X^}(O=Gr3*mP4*93 zX>d*Atr#DcHg(#SYmc`680A0J_sNlWh8OltKRCkQ(ntAEuG79Y*T(O6cfSzUZjLy$Vb$6zCJ$4!9M$UbMN1W*os3$&fOA}Zr@AfVBJG1 zdZr3<508{kNQOMRA>Dg5_<^1Bb!ODk*@Rd#Lr=C$9n9><5@=oiuZTgbe+`7~`Yefm zNmgnhs_@;^T-B!^G!!dK8$A;~mmia%?VIbphW7Ac6??c){)+T)tlv_47!z&gG%1M6 znzo(5shU(G=M@NN+t8Y5VzaoxqI+)J{_(Rt_Wx5p*nZkSHG*CjnyU=mrStw1U&`11 z7r))^n*8*sQ&H#*h3_sM$ZemSHtXBJwE(rVFQy5_&}dg}|CoSyyq|*RFNGtKGugbqTHIE?!(ic9>$T zbH9!cQBm2-6d+bU{ULN@^|y?#t=hEq8}Rq`)BQvaK?T~KTa=`Z%z}od%mk?$f!y!A zN65MH0|2p_L7wK%>%`DB%Zi5mjIFwumhfxCNMR$!qSqkuILrKbizrpj>cojl;*C-7 z-j^$OPpBw&D?7Kvq}WtaPcu1T5ZUDgs>f$5%Ziz+LVX3yc-|&utP2@T5)&@b!SAYC zw?9N!L<`WIVIuuu+^R&TFv%`V{u68(_KwgWUA{wJ6<;h2s2wt-=;4gkej06VP6?he z&61>e`Xf^NfQ~+tiGKPt$a)A5x&gy6KS$ld3BNDg);X6OU-+;q(_SK>>@4sI>f+m01oHt1Ro41W41>swl^=_5_)2@8- z0|s0i&`9*t22i=XMpz^z=5!SmPx@Hfzxib82L=8Aa|rq*GorlmA$N&13)27QV1jjM zb8G<}SjLQNY_bj|7wrSc0*X{ryolSwI@10{fg+%q8ihW6KD+FLU8dmbxcZWGy4vNB z$?IwQIwEq^^W)`F&rJ8jtVl#svxu0)p z-2Ai_;`42Q3t>b%(ksRTJg-xObpBml&IXwSokDC&lA*(@3?9z|3_-pUVhlT?Q;41~ z{RktGZafDC5+4f?0OEL&;s9!>Sa_O#+d>O-zDQrM5FbXfOK(T2iu3O5K-s*Rn*X>J zgGP>~OCi}$;wJgK1HydGVtqiEzfq6Q_in>eh zjg^V~jLB57B)-1BNo-|E*GocEB82x@px<(OhOoc5D-{`}MU)!slD zWSDwcD?vvDhh_f3%+g6dHf+txm6RQo3kkBQWlO|e;Xw``=JvF-=-}m0{>h7;RPckm zog_XvK{xb9B-G^Ew3#?zf~8q-nk9_(n~gEkFOJgEq9&5mL9)}p@^hp$$X`X=U1P)$ z0@Q!C8_vlkRDST*mfNxXjthm zq1-9lG@Kj&&iCvl;UQ8lnAtYC4GN=j>p@U2_1&BI8Ce@rht$)sy~l7cX$;p99tA%^mShhQzAS( zhCvDD(-#Pf1?9N~oIP8QD5Aj__#&&AL$q+4x-MSpdujNWr5up#+rDG$O z?!?EXUtTS!j}}FqmcPJb;9j0Tdv+4_4q+nLMrG`D4tdMRU4=7;5)E@aF>9qs^H1(6 zFg;CW{q1w!ys1K4`+Dq9C9`9E@E=B))Ml;XDdx7C@!tX{{O_>Qe;rK0z~?uaTsEca z5w(;RfBumFKCa!FC%R()!GkW9#fNcM&>T5SM8#T4YBK2b<7x|e9h&O97#~nZUDbD0 z`=O#cbR5SleCLzcIOd?l&xcxx?g$|PX}ggN!^vcsQX#|6{+ypbkatX)y?1V(5%Vrg z#WImmq9&f6^|gfO)aE`@YVY28qD{VgXy^v)IYAYIzhN?>dCk$IiSy6qq>1$RzC1nl zJAfVsbI8Z1hg9AC=FHNmBD)j#T0lBb-Rh3%<@sp;;TbEYw+z&Vpr+JhDGEW5{oBh6 zW++nWb;T??7ZYFfs;y|!G^dXT!331?YnzI4rCi`~;7|ieOu)%w0d0v=kIK3(0nrp8H&X_RJZIaD@*x2D&BnC!#0**Zx(5fGphf za>cK#E~06(*c!pw)`DJ>xxd+{ulN10Ru`{UZ8+3j0L?$jsCU49<=YNhT_JSn<4wehxO51=?>Tz&7=pqDMS)bhG@np zcs?$1moQ#v(vBnAy+y_TNDI+_RKfuPML8N#OJk#Q_KAu|a=hR)ft&)YQ;Go$ki4hL zd@QK2R9zI9;Yg5wV}mi6KefvwQ&7!_&P=lG-+!b%M3VcUX)~KIc z4XR=2fLKKi2ssGPWJ}tG#}ssKq4Qi|w9vsFAR|TVtos`VaHl!tfwFiAj{g;(VPV|Ms0l#$x=E%^ei@Xt9oPhkCiZ@ z+sn=}TqT>EaVg|3>PjM_xhmCz?6?BN6D%>#c4KB(8s5lDo~`hwX*(N@#rwR`Q|iq@ zD}8?>6ibQPq6_3p>Ihg^KN}fO?j2j7{|VFam_hP0pJy~hDkTK}Ln%wI977@VB2L47 zp7jiHCL|1S9%Qs(-8x{N1xL;_;tf$>=MEhr=x5IFt|J)&3h-%hG*ilcOvCwf9^Nty zxT09>Do+&t)L8fLqxbK*z+@qldix+3Bi~QbI#2^7`<77f>=qMo8i-&|R;K+O*)zy@#MvE$2$zxfSH7SOowV#PW*8yZ_D<%D7bi4G6WM{YPKe(kOwnul>#KE} z0}qUb`vD4}XxJ1z@t8VuSr{pkmNqIY9H|W0HOd8IO9A4`x6>?R<0e*=^wOohofNec zCOh8LI(PcC+VanfW!L^6kn#8VNh4(l<{W-HDT#W>gK!&6=VJMT0?@fEMBo*H2YowZ5pG(?%WVm%%9$_C$oA@A6E>GM zjjy-9yIR2NK{Vj-F#*iM879k8qO&@z0!G)4cVa;`mR!Gt%@X_;1-?Rqwl!-Os=c9l z&r2Sg%zZM9&VZdjen2Kqosi!mgu>h5^qCa%dD(CJ$Ax1mPyth(Ol0T=v<2SdY#=A@ zFltV+nNdL|6WCCb*U&_ha@PmWkA)!f!*`iH!G*k(V7?Tv3e+HZjafw~mVSc_Y5k`I z8U&@AP&0l19x++@Wo~XGyN~`v6SL|OTc0|8dUl53N)ltQ(s*^E?{H3VkAA||wPD=} zs^~$?7)>MXlcWs56a!pqg!ELK>h$@oUOq;~-aIN!_16L%`Aer>5kzLW+H&YCK0Bk? zsm~tX5j);qEUaf2oD(*6ef9l<}>%5{Q|4z6YcN6@Q%qN31fkjRtXlOHh4 zUh)J~_|}t*K!VWEfoBs{cEd~MUTq#x`t~<}6c=%SeR{DB5i7xR(I`GTs4+)>M*<2q!pqSKT7)mY!jYW=-i28as z=dU0$h;OMkW{JdK1fY@1x+Qe&vzP;4?WcEkbbEb0w0FSaS*IChvI&jli4jZJZ{F-o zaWd2w$%(nS%pMZedc%=adYVU$8`t=2!(yJ)_->sfpUy zu~lqfuAhEKaaxVEA%(Wxbwjv|VZxH6qMU>}g*M?RQU5`^#YN(vG)qB6&4e}p53f{? z!WRrcFgTLcVTd6P9M>@`ZyX66yvjjb^z(B>2l^V2D#e{>Buh;HRq;Kl#yQ)#qRRfE zK5R&civKM88huU_H~_Y8G+E|mj+tW{Wgb(~+roJsf$oDYpqRjkl;`|UJ|ocp4%@|VK3CKg4qIx0f02&Z2D3F{+z)pCypGs&UT%BT#ao04^l%F zdmyq>HH3FabaZlZb9H~+rl^37uS}j#Kw37Uav6`p(MQ-D$A&Es3e`w(Oq6RPcLdjf zq^7+D=MZ5ZS`50jZmnd97H034Odu+oH$-p z*;BxKaxvx~DUcJQd}gI%KjCkLw6HL19CQx|TC$Xk0A#;@Q?orFAY$uoWanepvpO?P zqJ-MV6%>QAGV5M8Uyxn-u{1JGQ2wbC3G^`Wt6q;ADhtB^!^LptBh1u9sY`yCw5U;q zyG6;A04M{NQ}`IU_}V8>)#tgb_4mT2Q76>A#qh3WzeVn^&2OwX3Z8wOe8&1UYlIRa za?G6j)a8I{Wa|V7-6)5G2(eE58$!)20mV`69-`%4<>hT?{{nXT(k}t53}hqCQ#8Ac zXcBUGOCmxzQD=lctXs(3b87a3M0X7LMoH{;?(7f0to4z1A{X)6yO-uM&(5@WKUAC^ zoSd-h_oW-tS$0%|f-zv9(afI_*i(hbW{N=Q8BNgE-Yb*Q+-*g!PBW+c;4C4)O2S8c zjI(;gqKKnMj@<0BW%FjAgFEcTw5Z<>i7jZSQrsGE5Lxq?VhPv-?w#$iFu`G)5a^7Y zAMu8}Ct>;g>2-`78O3ZDH6rNJuN`~Ly7TTB>>Tzd9{D#-PO6uWLk~}+kL}Ms45+9o zPAmLrNYI{OKU>r^=YNVw?K#Dtz;#q*Z3B{%yT;^E3!`f?M>N!fZnXi25063y>8viO zad|8*%%D!60v9F_g{gL;+?2XflXjAquU_Tt+C1lL`&Fpm=oW?HXA06u-^WTyN)Zbq zc9QF=Hh+PI^Uicm=;v-fdhFPSs{_=?)e^J2-0Rs=|F9N~H;6C#^S&7SBF9k9R|Ean z{%YS52M+9!I?wT=nhdolyApuXL_ARRx~0DA%<5?lbviK{S=NX}1w}1HcQw)P@@KLw zFOfeIn%SN1-17l3xk2$s+!MTHN z!%rj%Z7I%-NA&~S`S~|Apx4(qSqMI51xE+rQ3blJtkK1+z(r zP|F;J{ywRxF}_j&1DGP~3sbyOk=y}3Z9_$YO9`Kg4q=17kc2&|-BNTnXiBpqB0`(P z%lY{aNw|t%6mLQQrdw*oJt3XQ7Ra;TvN2{7zJK`e@2!H#p*ujK!t~MDi}SI1!-n4S z@_|Zpq8+**#0Rnl&Vgp8oSEQqbd=ETGzCb+nUgb2aI6ZK7Y0kWZ91{jHBxXa8pyWw zP!dQ#{9nAe9C;7gqS9we_iG?Y1+evbT^Ggf-EVNOyayjSM?8ulD+i||lXpR!LUx#| zX)k%$M%w%Mw(ZF^y1#$;z4sepBs+6L3qGnX(vHQLQN#4 z4;K1octC-{Q}R&qIc^}hr7uGshn>Aj(@~kcAbLs-dI-~i+Jdhe$A&!nn{fqKERq_r zk`Bp}P=baJY5zJfq&Xlv4?k4RoLQnr#%NbEhD5GL6J zEJ8YZsYEQ>OOe&~3<>?-* zJRaUk7*=LWSf6f(=tp-^n8mv%7bJ+QC}sHBR8_eg-5R2epn~tlnJ7?(73qkM;p9Xl zrLf#bc0J9DGejC=BALp>A^KJF9FVmq)|NzI!)PvUB)&!zLKH<02CJ+aBuRLZcdaxu z5m<1nD5(cCJ&djZ%KP_Ajy8h4jLa_z3Py$w1udL3Tx>t z9L`Adv3Um&YG74op6GyLj;w}ZAnq z472>zp2hn}>e}5N6*1h~BUmfs7rX=&(tJ`%!_A`p>8ojRF%1e&f^q|!D)kmtj?#UI zQGr}1VnNn&Y4RpJzL{>9{v*d8qx1Ue7srO7?C2r2LmM@E^mY6OS<0?b(=d~QJUde` zlbZ(*@mCq|hr(|sA!A8jp`x!}@pO|(0zi}ql1-)=VYld@dSq+ANvj^ThH0ZuG8I6X zSC(wY2xeDt?g;lLeLW4q7}JmnzmuLmUmzm@rwib^^$kGp_q1U~*9pn2w!n9xS~FqH znNz0@Drx_T$x|2fn#+V94IG*iAr|q>$Ae;j^HQ)F|L^Jh|2m5LKZ_*)Tgw1^K6fs2 z6F4>kVPQ@$aW$(yZ0YqEhySewu&1%Fs6i>pbPjeE&%HysRhOo z!F+xV$__k%&7qBKD`-}%*7I|1+@mrg2g{%|<)!@y$eQ!Uwc$d%+;=?Xboqq+f=kQ# z_Lgi3Kl(vwyuN7#gCAff*atC#f#KiYMt=BkVz#ldM*cE)DTypNaw?PXu0T;bPP&tP zYTQRD5+RTcOj`OBcBi23-9F5yMQF=oKV0m?WJ0kB_QyIPG_0o-c`S^R^@m$Vg08?M z+;rHQLi^1jw0@AcY7@}eq#vG-guW1V!6oDxGfI$9^8;MQH^vM6)Y~;?{Lp+;_ai-1 zJ1?9!TqYI6Fl%UN{3CuCMK@9yj;qFPdhEKhqthxBRw%Iu1Tj=~L%YFKB_rZrk{Gwq7g2ee}-1%Qe&4Gm4)$Du&-x;rj)#J~3NUli3*bqDB19-kj7qTKB%)Qs#`~)+oUNDuQ3=%tzr6U$;%nR* zG~E(KV?#rz59SC~&ptMk&&6BQ~5i zV+PIhO7V(-?eC-sPn^gie@ck(2HcBzr)Ra|E1(UK+>;Ifl26Tn1QEH_>MZbmMW*v zIj1TNZeX$#IuUye4EXaakJ%=HXf-f%0);CjXM2FSB9@B*f|BOoU_4tWHbc_F`;l7| zE&qThhFe+4qPTUZal#rh9PHZkDU>;~Ub8dQj?dO!VG4EVIXjqWX0+ze7kM^O^DpCw zaw}Icjd7RcYm4TDzdS_Fu3yipnbvS{fL`MW!?9NBMU)M)@(dR)Bhf5`=V#C6uvcgs zMZ%S_jO)-fU}b?<>Giasf5*-c#>Pc$!)<+mckDyy67AP)m1s(!&!YD2U;k1E1m$h0-O zAb<*FLFq@@BfVZA;RQv(@8tM!$WBUaTeog4mXIJy#7`pP`xaK{Gzw|!huCOB%iK^X zJAQKQy=uL-s4HIDB9N2W)A7Q~g*{U*^s)W(G6mORXg^?wjg14fpx`NzPXwLF#NS;F z+IbjY#e%ASo!v-VBeaY#fiO}-R80--Nu$-L_f4LF}>VetN$q$zVNm*PM9c6a!#-{@jbLE} zJcgj*wP7bzi=2CscOAC(C7nI`pRerLhncP6F2yA!YBC{d4tE%!vnw5j7jf;Z@w*W? z~2=G37bV1a84*2Kg%s?M+F^c!(_B9*BZvQ`^R{mQ%L>>S? z|5aGx1?o0Vgl5V0=btaB$1Uig9+RE<%zI0w)BE=!d-iM;{$S5b#ccX|+t8tlnGS`fMEFzt_tRnJaZhocJp#?5M?3#`C)X;lyTh24qG?0dT?YNW zaC#^8E-Ko5>za7xthB{T`t}s-spmD7Q=0}8SiWjOi&O)F{=gfL+e}GRI%W_YEWD+3D!0-`dNHj>&I`&4 zNFaq_YCnAVkQKR9=;zs{+FVq5uJcFJ^_){!0HKFFeWtc=-$VkCfj}=`?ys3#&S&Ue z;l#jx$MRpPH_6BU(b~BOQkk}EylGD6tBj61j45h5P^qkmsN|4B5sAp5bD|PCgv3{r z4pfRlq>&_~nISpX)TC16P)ZR)mPM>SIV58LUVHDq_dnYo(-doY*ZV%t{ap8TUH5&b zuu%aLZbyg4#k)7j)N!UDl&Ds(OW_=&REsp~JjBb8fTe~eCYX&4sOCiA;mX?+YlnVP z=QW#{H4kSc+ReP-)9d1HHrJourDO>w`s(QJ{;TrXi z+7y>yQ9t=p1TuX1lHc<}vY%jBSW^A;$-F9{HtDp{q4 zzD9!godda+@ARCRo{2+^)&(XcCL%1tBhQqs#URHxdcpKmm#8e_;;9s13`*)7oqs(8 zX9*e!?L)jy4;3;5>TCxPwB5d+wG5yia{RarL`h8|2Mk3jYv2P9q%Brd)RDPdEl=t7 zN$LR#eULJQzJPY8;3lcEBI9%!F+9Lq`qe%E;;Je^ZJ(?;aY)lqtYQxpz6yA9F(wA$ z3J^E5GZXE#am!I7nfbu#9~DLf%q_co>NuF#AKH)grFfsp2YVQE9EC*+g1&KyW1B-i z%`V4M23LPOB6x<&Tl=;(_*HcNUDNr=5BIba6dmdp6QCh8HuOLJp@Z%6*q!|ZlVW*o zjUrw(#yXI2&a6s2@ii+y8QGFFVDh9%8z5XUXOjj9{5*eY=IH<;ct62L9CLM_V6zr< zDGh(&&;Q%{Owtn9O*;rdc-lGnAjVpOCit}kHl4~P7U@?85aLU; zO5iRTu{Gx@^OKZDfUDt@J`&p@j#(YB;HGuo`5)z3&9Tp2pJPWln6>@klP48RDH>&7 zpgvii;(e$+EEb5D$p~c7XQz7>3YjD~AJL2{b&f_75LEVF19ys}#b8 z`(e^WYFp&nwF`0HqqWzDmXu9m@p*>XUDgdE`{H5Ft{i^JuZwQ?-2g=|RvCZLNSo26^LECPoN+lE zeje~j3%bTB>O-LCBOD2ph5~)9=HBu`Xd1`w$iZ^TA0PWKtBL@$lhHpBVch%zVvU)< zLGp@Bvcd6g`)4|XftR!RC5V{$J4<$B)nheMku%fkhEVyHerdXVK4o;PVl+Ex6|Vt1 z>Ad3;W|Ys}QYnR=ZEZA17K3QVy6L7O{7GN_es9n@OW!~!H5KV%2fxnen2gQI0YUNp z?EauwGa1Fe?*U1I2xFX-VMAq?1AQMtWLZ?h7OxnhmUb9e!WWZSJD2hTY zqK1o{ew=QVe{o5P6tAaG(QqM^vtw^?3k}Qh$&ynlzufz51jL~*=oMJDCcU5zZHP3R z>j+af)ls3dJXssxnj(xDTX$VVJ_R56FeYJH$Kd?sS8j>>LwHm^`}gN|B_VUXs;au0 zkN|1I^IUIZGo1<3PPZ3R{HI0*q(KF#5tWcqZ7;s)E!Y?z@;Jc( zS0s4fytSRZQ^}*jkF@DYgI9Km6k0`4@W6^F4Sj=b4QdtUJ<1+jS%9*~awVVZW8+bB z{ZQ*3Z^j)|UX8(%5-QgpX$c#6u{byp5!9TnWg5~Dyu7Byvbe>ZGf<8rP=8WUPDN$9e-?eV$N zHo4{$)HmdRq9k|P_`KGmn5Nyz>}0U^`}eytZ2b5iaLB{(Y20z=frT`zxm#VG$AZz7 zfrlm38~ervoz(s00-^EUx8EjNT<1{y{+n;8{+uOU4AzIC7do{QsnY+RwREYyZ)X%w z-zN27>%m;xU4s%3k6!38$7TT@=j{|M&5SMBX&Q=cWh+tSxl8W=plc86WlJ!>>Z3Kd`>DLS2w&>%n~;aX>I6NdmI z3Jir*K746d!OhV^A* zeHLjiKW&Eqm!aSSHv)^fm}uiHw#6?BpD<`7gHa%urHQHu?W8%zGjyAV&f3a%3qCii zNa{G8_r;XNbc=-vwbUdioO|HWd=xqKig{9gZ(9yg{0Bv$s)@S1+^!#=Z~zN-6@mtC z2E(b~kBI3$-E9za>d2rlnPY6+YVUofGrSQ0sdQ=8G9RhN&LdxAE!^N(Lw#Q)^;!1~ zb=q5z6(|}wueI{7(BDQhf74%qoaNkzmHuJw)-~FP%Iv;&f5pudXgDlmEw!s_(+TL> z9?cd=N(^Vs`ZM?NnKPyAAC65z_c}#=k|>_&5m^OguN#%r1zhC&SQ#-|@Nb%23kHhE z7iKUblIRJf>+0?<={y(OC;msK?x+Rk9k{2=i#^sby%>-spSSbh)}#xB5@=!S{DQ`G zEWsbB#o&qz)4vM~;d|l$hSHq4*_e{S8R=fu5F?vwrtZu-IJZoR4#`Be(%9E1l2hyL zirU>^jCA2n%zQpowT{w-h>jzzBIc%GQ>objgrdbwe}vwNfY1$G4t@>x)O(3!mRH0f z3d$uEJAD8!*DMWp^O$C^9X*VmLZWZ|oEb6i%QJGDB54sWN5Ah)x|2f zoqVyLR_JF&L6N9WovN3;XP%OhkY2PO_-cLK+rq2C6YwLF@=?rSn`okdhC>5vqk49@ zP|5l0#HVaAgubz(MwM~ik}6T!wo(n8BT;cjU8OO{?4l(>HA>8YB#;AOt;q-wDM){2 zg!K0IGMs!_RK(|d1k-(U*W+Ghy?fH?j`PeLxeGG}$dLQ1$|eI=vl{-fI`+!q(;IcwO1sx8zg& z9MOb`Pdm{UepCdgO9%9HnY+!RL(fTv<+JolX4<>j#Fv6uE1HzXz@F zYo$^bZ0iJ1u9z7RU|KFI(-;!|^JzW_C@hOMF*spWqco z1xS!^F%dJ({^2}SU3a~LircM^cE*+dp0>7J3(FhZ2Qb1CMt`VU`yAf^1U<(#D^D=M zROc{<$2QN$LvkT!8r~1yk!J|ymY$h;e&;ZI)kTYX;1}5cKvZ(Cs?kwW788{{elNlz zBk2ciNwL{Q`HEi#r|mF$F9Df~-=*pCa&0>}43`)Z%mIvIFrm7^XpGzqi)72yn%U^k z-aI~fMSxHn`+Qo2@@8slAn?+@Ot*bSN+no9;hqLqo@84=azYX6$&=?yy6Lv;RD8CA znhoP{tTM9u_C}5g%aLzzG_YTy%(i-_T$|!QF&I|H7%y zvYgtgM^jex5Zj!eMui)B5cG28FN~d-VH5Ll*E;kw$>fh5=iD{!eA#W!6*K3}Tk}96 z7wZ}RIH$>U;l-XRej^^Kd%v)dYQfTH&oFF$>X>h75Qh`7w1P7mO+>*<(fx{_9G7lW@H@sV_pozE=|y3w9n1HyVqkg;%CK ziABTH;zaZRRK}A*RNMddj*u2Tic|wTl9{+fEy5WKrJ7)#*YzrM*STp}TObnNnte3{ z>@G7TKu#Ce`bOk2-C(MGpgZ}ZwKxTzC>g!lYYHM$z+mR<@dc|)HhaurSdr`cGnSrdL2HR=kheSRCpfLPgxJoT8+Vb>^ zwFe-jSlfcfoy;OWz8)gcEw72DFcLbv|FP8&&<93(x2pgPEg#$54fP&u=Twpkb8zkO z;d_u$upC=Ba@eNg`nQvZOc}N%3+*XxH1L8cqn*q!rBw*tbbFaPc6=ah8JUo50BYp4 z!+t~)Ack7CH8*E(D;h_W2_OLMSt3jxN8*1vJICsBJ0X-xa7%KIpd{=^iR89j`P!ZB zMdij!A{Lnst||Vti(w;_j!+<|?ZTky7#bFGzVdCvxOTEsVj}u;32#WF#~?Y{VU&3M zq$&Z3JI@4 z(2&DME!cLPc5xN+@Ky3d8#iqdWE1X-18@Y%g8WMG-wh`0*nu4ID`k5S$ZT;M{QJu} z#xh5JcW1y^x<~i7{q?lieV|}x<+Z|UbK;xB$CGZ_k29R7ZzUIU=f&Y`Tfgb?9I2{w zC|J&W<&Vk=ibhh;2vj>FCp5ssCpz6t>o%1gUcGkvDH_V+TqmeI%d3?STJrOF@_GPoxfo z*V*)VIcAS5lDKB)xIg1b68(w{qdX#B)};1K02B|_|N9f29+ z>2|dfFI&4lK7qi$@!x~TcgQU_v%_-z^zq|S-zf6K%tI1;$BM&OJK&6dSyfsN=h7$^ z(+9CaC%*JHGe@N_cKt_r^q4XF`u;B;GzQ|kNVQCE+cR(cIbasMwYhbZzFC8Y$*eyr zFe#KeW%w+PrFucTqz`IDd~rN?NMUd;dU2e|*vPHcQVC_dUXfp!HYEIf>S!<+ak>7XDG2O8g6b~!9!tc&UOCiL zm>I6|U};>8_q@EKcYmy(ZM5*yyCV7XMF|yELc34JPV-eB>-_z-jnn6r>{_VOVsXrI z@7@o6;`Krc+ZP``+%%{DBHl7N_C@sY@xm-e`SN-r$kHOABGPXY}0q{1XQ-ztzYlx?7YQr zqn}@1iI~Z6Jspy>l`S4QV3cZPCi&=A5-(CDj5Rsg+0E{n411z-UUlJ^_;Lx_7ZU^V z6`+8=;^ecnoh>tTVTU$mzK$^g=YXvv2oY z>Y0f#{Y&5dDiU$jKpEmEe7)-y%X34jWdhB01K|54ou6^{Ha2dzjyT3-kju=l zV?6tkC3b0*D+U{hP*!BWi`wc8)J!^|O+TA-^QHj83BdA`j3Rr${zBQ$yz#`1_nyAA zp-x^9{q)P1F9z{vzAT<~e6y$Lt!akuhfpeTJ71&gIQFlAkL+}}EL+ZUh_mJxn+j&) zsxMrK2YDpbO8*RK8iu{ulX-U|Mw%aFW%Hk`Vp%dZX3n^xUkc5bVQ0E}^|9Z^j~(lg z{i4;=IPCtYYS_2}w-uC)PFBQAB7A*Xu_*!1DPMQAo8{Byiw>K*#;OQ^H(YL_e?xcU Gq5lG2XvNzA From ec7f81e79898cdf37a29421b623c5321c65642d7 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 15 Nov 2023 12:13:37 -0500 Subject: [PATCH 19/23] draw scene randomly and add log weights --- test/particle_filter.jl | 19 +++++++++---------- test/plots/particle_filter.png | Bin 76404 -> 77586 bytes 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/test/particle_filter.jl b/test/particle_filter.jl index 91dca01..fb51741 100644 --- a/test/particle_filter.jl +++ b/test/particle_filter.jl @@ -4,6 +4,7 @@ using Gen using Printf using Plots using GenParticleFilters +using Distributions ENV["GKSwstype"]="160" # fixes some plotting warnings """ @@ -13,9 +14,9 @@ Generates a trial and returns the generation parameters, the true trace and the """ function gen_trial() # configure model paramaters - mass_ratio = 2.0 - obj_frictions = (0.3, 0.3) - obj_positions = (0.5, 1.2) + mass_ratio = rand(Gamma(2.0, 1.0)) + obj_frictions = (rand(Uniform(0.1, 0.9)), rand(Uniform(0.1, 0.9))) + obj_positions = (rand(Uniform(0.2, 0.8)), rand(Uniform(1.2, 1.8))) mprior = MaterialPrior([unknown_material]) pprior = PhysPrior((3.0, 10.0), # mass (0.5, 10.0), # friction @@ -74,8 +75,7 @@ function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, end # return the "unweighted" set of traces after t steps - #return Gen.sample_unweighted_traces(state, particles) - return get_traces(state) + return get_traces(state), get_log_weights(state) end @@ -99,16 +99,15 @@ plot_traces(truth::Gen.DynamicDSLTrace, traces::Vector{Gen.DynamicDSLTrace}) Display the observed and final simulated trajectory as well as distributions for latents and the score """ -function plot_traces(truth::Gen.DynamicDSLTrace, traces::Vector{Gen.DynamicDSLTrace}) +function plot_traces(truth::Gen.DynamicDSLTrace, traces::Vector{Gen.DynamicDSLTrace}, weights) observed_plt = plot_trace(truth, "True trajectory") simulated_plt = plot_trace(last(traces), "Last trace") (t, _) = get_args(truth) num_traces = length(traces) mass_logs = [[t[:prior => :objects => i => :mass] for t in traces] for i in 1:2] - scores = [get_score(t) for t in traces] - scores_plt = plot(1:num_traces, scores, title="Scores", xlabel="trace number", ylabel="log score") + scores_plt = plot(1:num_traces, weights, title="Scores", xlabel="trace number", ylabel="log score") mass_plts = [Plots.histogram(1:num_traces, mass_logs[i], title="Mass $(i == 1 ? "Ramp object" : "Table object")", legend=false) for i in 1:2] ratio_plt = Plots.histogram(1:num_traces, mass_logs[1]./mass_logs[2], title="mass ramp object / mass table object", legend=false) plt = plot(observed_plt, simulated_plt, mass_plts..., scores_plt, ratio_plt, size=(1200, 800)) @@ -120,7 +119,7 @@ t, params, truth, observations = gen_trial() #display(get_choices(truth)) # inference -traces = do_inference(t, params, observations, 50) +traces, weights = do_inference(t, params, observations, 100) # visualize results -plot_traces(truth, traces) \ No newline at end of file +plot_traces(truth, traces, weights) \ No newline at end of file diff --git a/test/plots/particle_filter.png b/test/plots/particle_filter.png index d687c7cf1436a9ab75bcf4b7ea61742470969db3..008844ea9392729046f6162dadb04b7ff99c65c7 100644 GIT binary patch literal 77586 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 literal 76404 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 z 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 From 44e9d2fcf6f755f664763670f8b2d8f9a2a84b20 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 29 Nov 2023 11:23:03 -0500 Subject: [PATCH 20/23] update particle filter impl --- test/particle_filter.jl | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/test/particle_filter.jl b/test/particle_filter.jl index fb51741..aa14066 100644 --- a/test/particle_filter.jl +++ b/test/particle_filter.jl @@ -14,8 +14,8 @@ Generates a trial and returns the generation parameters, the true trace and the """ function gen_trial() # configure model paramaters - mass_ratio = rand(Gamma(2.0, 1.0)) - obj_frictions = (rand(Uniform(0.1, 0.9)), rand(Uniform(0.1, 0.9))) + #mass_ratio = rand(Gamma(2.0, 1.0)) + #obj_frictions = (rand(Uniform(0.1, 0.9)), rand(Uniform(0.1, 0.9))) obj_positions = (rand(Uniform(0.2, 0.8)), rand(Uniform(1.2, 1.8))) mprior = MaterialPrior([unknown_material]) pprior = PhysPrior((3.0, 10.0), # mass @@ -45,6 +45,17 @@ function gen_trial() return t, cp_params, trace, observations end +@gen function(proposal) + # something like + # find first collision in the trace + # find first collision in the trace + start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] + t1 = findfirst(x -> x == 2, start_event_indices) + + # in future maybe gaussian rw + trace2, delta_s, _... = Gen.regenerate(trace, select(:kernel => t1 => :events => :event)) +end + """ do_inference @@ -52,21 +63,25 @@ Runs particle filter inference on a model and given observations """ function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, n_particles::Int = 100, ess_thresh=0.5) # initialize particle filter - state = pf_initialize(cp_model, (1, params), observations[1], n_particles) + state = pf_initialize(cp_model, (0, params), EmptyChoiceMap(), n_particles) # Then increment through each observation step - for t in 2:length(observations) + for t in 1:length(observations) + # Update filter state with new observation at timestep t + pf_update!(state, (t, params), (UnknownChange(), NoChange()), observations[t]) + step_time = @elapsed begin # Resample and rejuvenate if the effective sample size is too low if effective_sample_size(state) < ess_thresh * n_particles # Perform residual resampling, pruning low-weight particles pf_resample!(state, :residual) - # Perform a rejuvenation move on past choices - rejuv_sel = select(:kernel => t-1 => :events => :event) - pf_rejuvenate!(state, mh, (rejuv_sel,)) end - # Update filter state with new observation at timestep t - pf_update!(state, (t, params), (UnknownChange(), NoChange()), observations[t]) + # Perform a rejuvenation move on past choices + rejuv_sel = select(:kernel => t => :events => :event) + pf_rejuvenate!(state, mh, (rejuv_sel,)) + #proposal = + #kern = move_reweight(proposal) + # pf_move_reweight!(state, kern) end if t % 10 == 0 From 408e67e1ba4e6d4f1f6f3c97942b18b0e1176fbd Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 29 Nov 2023 12:19:52 -0500 Subject: [PATCH 21/23] first try of a proposal function --- test/particle_filter.jl | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/test/particle_filter.jl b/test/particle_filter.jl index aa14066..aaaffb6 100644 --- a/test/particle_filter.jl +++ b/test/particle_filter.jl @@ -45,15 +45,14 @@ function gen_trial() return t, cp_params, trace, observations end -@gen function(proposal) - # something like - # find first collision in the trace +@gen function proposal(trace) # find first collision in the trace start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] t1 = findfirst(x -> x == 2, start_event_indices) - # in future maybe gaussian rw + # in future, maybe gaussian rw trace2, delta_s, _... = Gen.regenerate(trace, select(:kernel => t1 => :events => :event)) + return trace2, delta_s end """ @@ -77,11 +76,15 @@ function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, pf_resample!(state, :residual) end # Perform a rejuvenation move on past choices - rejuv_sel = select(:kernel => t => :events => :event) - pf_rejuvenate!(state, mh, (rejuv_sel,)) - #proposal = - #kern = move_reweight(proposal) - # pf_move_reweight!(state, kern) + #rejuv_sel = select(:kernel => t => :events => :event) + #pf_rejuvenate!(state, mh, (rejuv_sel,)) + + # + particle_traces = get_traces(state) + for trace in particle_traces + kern = pf_move_reweight(trace, proposal) + pf_move_reweight!(state, kern) + end end if t % 10 == 0 From 0dc56864a1746e7bf09f6a38bcce1573aec87caa Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Wed, 29 Nov 2023 15:02:38 -0500 Subject: [PATCH 22/23] improve proposal function --- test/particle_filter.jl | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/test/particle_filter.jl b/test/particle_filter.jl index aaaffb6..42d5303 100644 --- a/test/particle_filter.jl +++ b/test/particle_filter.jl @@ -14,8 +14,8 @@ Generates a trial and returns the generation parameters, the true trace and the """ function gen_trial() # configure model paramaters - #mass_ratio = rand(Gamma(2.0, 1.0)) - #obj_frictions = (rand(Uniform(0.1, 0.9)), rand(Uniform(0.1, 0.9))) + mass_ratio = rand(Gamma(2.0, 1.0)) + obj_frictions = (rand(Uniform(0.1, 0.9)), rand(Uniform(0.1, 0.9))) obj_positions = (rand(Uniform(0.2, 0.8)), rand(Uniform(1.2, 1.8))) mprior = MaterialPrior([unknown_material]) pprior = PhysPrior((3.0, 10.0), # mass @@ -47,12 +47,17 @@ end @gen function proposal(trace) # find first collision in the trace + t = get_args(trace)[1] start_event_indices = [trace[:kernel=>i=>:events=>:start_event_idx] for i in 1:t] t1 = findfirst(x -> x == 2, start_event_indices) - # in future, maybe gaussian rw - trace2, delta_s, _... = Gen.regenerate(trace, select(:kernel => t1 => :events => :event)) - return trace2, delta_s + if !isnothing(t1) + # in future, maybe gaussian rw + trace2, delta_s, _... = Gen.regenerate(trace, select(:kernel => t1 => :events => :event)) + return trace2, delta_s + end + + return trace, 0 end """ @@ -79,12 +84,9 @@ function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, #rejuv_sel = select(:kernel => t => :events => :event) #pf_rejuvenate!(state, mh, (rejuv_sel,)) - # - particle_traces = get_traces(state) - for trace in particle_traces - kern = pf_move_reweight(trace, proposal) - pf_move_reweight!(state, kern) - end + + kern(trace) = move_reweight(trace, proposal, ()) + pf_move_reweight!(state, kern) end if t % 10 == 0 From d80af1eeac1379c23a2e891265190e16df33ed32 Mon Sep 17 00:00:00 2001 From: Dominik Glandorf Date: Mon, 18 Dec 2023 17:30:19 -0500 Subject: [PATCH 23/23] test particle filter settings --- test/particle_filter.jl | 19 +++++++++++-------- test/plots/particle_filter.png | Bin 77586 -> 70596 bytes 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/test/particle_filter.jl b/test/particle_filter.jl index 42d5303..8c94a46 100644 --- a/test/particle_filter.jl +++ b/test/particle_filter.jl @@ -14,12 +14,13 @@ Generates a trial and returns the generation parameters, the true trace and the """ function gen_trial() # configure model paramaters - mass_ratio = rand(Gamma(2.0, 1.0)) - obj_frictions = (rand(Uniform(0.1, 0.9)), rand(Uniform(0.1, 0.9))) - obj_positions = (rand(Uniform(0.2, 0.8)), rand(Uniform(1.2, 1.8))) + mass_ratio = 1. # rand(Gamma(5.0, 0.25)) # is overwritten anyway + obj_frictions = (rand(Uniform(0.1, 0.2)), rand(Uniform(0.1, 0.2))) + obj_positions = (rand(Uniform(0.5, 0.6)), rand(Uniform(1.1, 1.2))) + @show obj_positions mprior = MaterialPrior([unknown_material]) pprior = PhysPrior((3.0, 10.0), # mass - (0.5, 10.0), # friction + (0.5, 0.25), # friction (0.2, 1.0)) # restitution client, a, b = ramp(mass_ratio, obj_frictions, obj_positions) event_concepts = Type{<:EventRelation}[Collision] @@ -27,7 +28,7 @@ function gen_trial() cp_params = CPParams(client, [a,b], mprior, pprior, event_concepts, obs_noise) - t = 100 + t = 70 # run model forward trace, _ = Gen.generate(cp_model, (t, cp_params)); @@ -53,7 +54,10 @@ end if !isnothing(t1) # in future, maybe gaussian rw - trace2, delta_s, _... = Gen.regenerate(trace, select(:kernel => t1 => :events => :event)) + trace2, delta_s, _... = Gen.regenerate(trace, select( + :kernel => t1 => :events => :event => :new_latents_a => :mass, + :kernel => t1 => :events => :event => :new_latents_b => :mass + )) return trace2, delta_s end @@ -83,7 +87,6 @@ function do_inference(t::Int, params::CPParams, observations::Vector{ChoiceMap}, # Perform a rejuvenation move on past choices #rejuv_sel = select(:kernel => t => :events => :event) #pf_rejuvenate!(state, mh, (rejuv_sel,)) - kern(trace) = move_reweight(trace, proposal, ()) pf_move_reweight!(state, kern) @@ -139,7 +142,7 @@ t, params, truth, observations = gen_trial() #display(get_choices(truth)) # inference -traces, weights = do_inference(t, params, observations, 100) +traces, weights = do_inference(t, params, observations, 25) # visualize results plot_traces(truth, traces, weights) \ No newline at end of file diff --git a/test/plots/particle_filter.png b/test/plots/particle_filter.png index 008844ea9392729046f6162dadb04b7ff99c65c7..03718af1dd2379adfefda94ac1fdbe00b54bb9d4 100644 GIT binary patch literal 70596 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

K**x4+X> zB_BS_0&s;Adxi6CEglswuvgIh@&GUlQd8Gs+EISOPxZ=3_en4viKrE!oqSyW&1+pR zEf?H|32AAtirS~wd_>_$L1_I9j-ZtlAiv&F$g+x)V)*bK)`^m(_H0+XdU0rm=AV$SC0M5n71h9;UO{*8 z%70Ad`<~a|vA9Uw{H!dESxw>xazh=j^N%=ye}ln>q5}h=Ar5$FtwJoiF}`_@o`tV% zlYzG7`**0U1#jJp|T49<@70V!}v83!K!-8(n{XXO~EJ~c0I z#dm)Hj<_A>z9(7j^b z?xUMBOd)kc47#qBh@g3n9Z|0=a~)mUJxh94EBEXSWKcg)2mUjb0B=4#I{K313Pp=B zB$MiJU)BfQsXylqdnIh28dwC&>AkE%(o>zid6JSMdV4i8&=DgLaj_d<+_efsv8=TRw9T($@%SDu$EUb2D!57Tfd- z0M0N01f@~=N$Y8g>RBg3R-eu)G_89c^)TCgC36$v-?igyP$?k-8q&KxBkU@T6 z@3z5zuJkkl5lM_Z9nh^hfWwHpnYA=!lwqg#VqGEu!+nBe*5Cyjjm~Vg4 zRdbQ+b9~tdmW%4~-y0AZ&u&X1SF2Ls0`q7La}b;@qyp(n*rsO zE`vt2BMPh#@BLXpzZW9&H%{RQ2w|$2VA#34wG{>P1v>N1w_U^QLVOp;>9f3z*EK^} z9e{z5S^7?KJ@W~LV&~iSgXH5Asi&QoXbUFS8y{18XYq~0F`~sIMTX=G|3SOR65rM) zIv+zUn6y!pH&6Ed+0@K{IsMoy8HP|@eT<%<)t*ir#z>10dj1{TM$@(t$DSO(mc**{ zH9O9H>y5I{2fr=@0?+&5QgV{Y^@me^={2+96D(W2u4g{v-1E;r~ z$gK+#5z_wh)DaQmxP;d}`L@^bB_kC==ruimFSSVbEP0>`gp`xPS?s~Li^>!9r9xtR zXqlxtgUiSF&Q=shV95rV`Cg$7+EFL>2FYBFeAu>s{yG3*cjMnu>fBSE2g?6@$>0+9 zpxx6Sd;tu*+aW=e@Vt=nHwD3$|Mo}efxp>-nE?^At!AF~4NtNhAP%+U9t9)~4qHF;1&!nY%Nc zkK2;0#{TTqz?rXP+-Rqq01~yo;)}GnUoDbBV@FZ7?cYpJVZHc zmAL^MgZ3C9_sKNBvnIxM6}zRv1m(UUL56rkf-`++X(`pBj)S1pUcg&<$D1g%hx&et z>JfyHF^k-J=wF^~&E&H+!t02N&UN=AJxswm$uB=)l9pXd(d?=>`J;=ORy@&UZvT@^ zPMv%$Fski+1C|kkZ-5~4S(&_5E8bZ%_4zAACVvE1SM#-%-FqWE@H{T{B*HE;_{HG9 znARrG*JONzP_E@e6-KOrN}4qQ8yeSP{s?w6L^h(3Pet!WV}`VU6HIVVR@`=mP5i!^aYlSCf ze#Z~qPCrvls3Bd_GfB^XP)@WvjTUl0S+8HJ)8_R-$67XwP7Ka$UdCzcYL01uxAwsT zhRp40ik@D(s9D&eGC6$RXc|ORrh+9(T{X?C58>_M|2@Iu`U@?O%Z=r9g}=Os(ToVr zuF$uou3rD62`4z{Is^npA+=|xqO;@ALA#P|rfd@p@y>vK3=% zs`6bO6G1zF;ixBXS%m{b#_+t4KGN0Fao}xo+TU*X1x;pYnxvKchcg)rmk@T#+?EP% zf}Yxn_m6EjQ)aoZ8a{Ldj8O{XLy$sSX+o=ik@tq%xBJEqLjlB~P*ALOZe><)=`_%& zJPZg7RVSySn}5F3g;ZK0GI12`%B0h4#A#D3;j4*^pCRlMU|g-Jw_2$+TGTuFZ1N2L zhWD;L6Lm#Yp01HJkUDe$)1IX0;a>fr?+x)HvktWes{xz|Ow4BHJTwS9T6Ooy8C-$- z>$UG;7M=J=2s8ai)41`hpB^-$K3eDL4*@(et$^iFc(;_@8oJJQieh_Dnh3t+F^t*$ z$FjYcU?Dy44|rM)wLJAws(+1`&QL@*Z(Wd<0Tt^88BCUH;C%0I1x9oli%xNA?T0P>5 zsP&Bk(?RZBB2Lf^xOCV;^PbJKp@T9OrT3sCrLRx*=E-&?C-7YGG5r&X?Qj?^NIJ{L zKoEr9z4QIbLnwluH11*XPYsNaTvE;Nxp-X$A|rwtE;ThZz$t*oCUsf;{reYy;KJ(? z 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