mirror of
https://gitlab.rlp.net/mobitar/ReCo.jl.git
synced 2024-11-08 22:21:08 +00:00
Follow Julian style guide
This commit is contained in:
parent
eceeda4099
commit
a31b6ed2a0
11 changed files with 94 additions and 65 deletions
|
@ -2,6 +2,8 @@ module Error
|
||||||
|
|
||||||
export method_not_implemented
|
export method_not_implemented
|
||||||
|
|
||||||
method_not_implemented() = error("Method not implemented!")
|
function method_not_implemented()
|
||||||
|
return error("Method not implemented!")
|
||||||
|
end
|
||||||
|
|
||||||
end # module
|
end # module
|
|
@ -5,11 +5,11 @@ export angle2, norm2d, sq_norm2d
|
||||||
using StaticArrays: SVector
|
using StaticArrays: SVector
|
||||||
|
|
||||||
"""
|
"""
|
||||||
angle2(a::SVector{2,Float64}, b::SVector{2,Float64})
|
angle2(a::SVector{2,Real}, b::SVector{2,Real})
|
||||||
|
|
||||||
Returns the angle φ from vector a to b while φ ∈ [-π, π].
|
Returns the angle φ from vector a to b while φ ∈ [-π, π].
|
||||||
"""
|
"""
|
||||||
function angle2(a::SVector{2,Float64}, b::SVector{2,Float64})
|
function angle2(a::SVector{2,Real}, b::SVector{2,Real})
|
||||||
θ_a = atan(a[2], a[1])
|
θ_a = atan(a[2], a[1])
|
||||||
θ_b = atan(b[2], b[1])
|
θ_b = atan(b[2], b[1])
|
||||||
|
|
||||||
|
@ -18,7 +18,12 @@ function angle2(a::SVector{2,Float64}, b::SVector{2,Float64})
|
||||||
return rem2pi(θ, RoundNearest)
|
return rem2pi(θ, RoundNearest)
|
||||||
end
|
end
|
||||||
|
|
||||||
sq_norm2d(v::SVector{2,Float64}) = v[1]^2 + v[2]^2
|
function sq_norm2d(v::SVector{2,Real})
|
||||||
norm2d(v::SVector{2,Float64}) = sqrt(sq_norm2d(v))
|
return v[1]^2 + v[2]^2
|
||||||
|
end
|
||||||
|
|
||||||
|
function norm2d(v::SVector{2,Real})
|
||||||
|
return sqrt(sq_norm2d(v))
|
||||||
|
end
|
||||||
|
|
||||||
end # module
|
end # module
|
|
@ -18,13 +18,13 @@ function push!(pv::PreVector{T}, x::T) where {T}
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
function reset!(pv::PreVector{T}) where {T}
|
function reset!(pv::PreVector)
|
||||||
pv.last_ind = 0
|
pv.last_ind = 0
|
||||||
|
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
function iterate(pv::PreVector{T}, state=1) where {T}
|
function iterate(pv::PreVector, state::UInt64=UInt64(1))
|
||||||
if state > pv.last_ind
|
if state > pv.last_ind
|
||||||
return nothing
|
return nothing
|
||||||
else
|
else
|
||||||
|
|
|
@ -73,12 +73,22 @@ function reset!(env::Env)
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
RLBase.state_space(env::Env) = env.shared.state_id_space
|
function RLBase.state_space(env::Env)
|
||||||
|
return env.shared.state_id_space
|
||||||
|
end
|
||||||
|
|
||||||
RLBase.state(env::Env) = env.shared.state_id
|
function RLBase.state(env::Env)
|
||||||
|
return env.shared.state_id
|
||||||
|
end
|
||||||
|
|
||||||
RLBase.action_space(env::Env) = env.shared.action_id_space
|
function RLBase.action_space(env::Env)
|
||||||
|
return env.shared.action_id_space
|
||||||
|
end
|
||||||
|
|
||||||
RLBase.reward(env::Env) = env.shared.reward
|
function RLBase.reward(env::Env)
|
||||||
|
return env.shared.reward
|
||||||
|
end
|
||||||
|
|
||||||
RLBase.is_terminated(env::Env) = env.shared.terminated
|
function RLBase.is_terminated(env::Env)
|
||||||
|
return env.shared.terminated
|
||||||
|
end
|
|
@ -20,12 +20,12 @@ struct EnvHelperSharedProps{H<:AbstractHook}
|
||||||
function EnvHelperSharedProps(
|
function EnvHelperSharedProps(
|
||||||
env::Env,
|
env::Env,
|
||||||
agent::Agent,
|
agent::Agent,
|
||||||
hook::H,
|
hook::AbstractHook,
|
||||||
n_steps_before_actions_update::Int64,
|
n_steps_before_actions_update::Int64,
|
||||||
goal_gyration_tensor_eigvals_ratio::Float64,
|
goal_gyration_tensor_eigvals_ratio::Float64,
|
||||||
n_particles::Int64,
|
n_particles::Int64,
|
||||||
) where {H<:AbstractHook}
|
)
|
||||||
return new{H}(
|
return new(
|
||||||
env,
|
env,
|
||||||
agent,
|
agent,
|
||||||
hook,
|
hook,
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
using ..ReCo: Particle
|
using ..ReCo: Particle
|
||||||
|
|
||||||
function pre_integration_hook(::EnvHelper)
|
function pre_integration_hook!(::EnvHelper)
|
||||||
return ReCo.method_not_implemented()
|
return ReCo.method_not_implemented()
|
||||||
end
|
end
|
||||||
|
|
||||||
function state_update_helper_hook(
|
function state_update_helper_hook!(
|
||||||
::EnvHelper, id1::Int64, id2::Int64, r⃗₁₂::SVector{2,Float64}
|
::EnvHelper, id1::Int64, id2::Int64, r⃗₁₂::SVector{2,Float64}
|
||||||
)
|
)
|
||||||
return ReCo.method_not_implemented()
|
return ReCo.method_not_implemented()
|
||||||
end
|
end
|
||||||
|
|
||||||
function state_update_hook(::EnvHelper, particles::Vector{Particle})
|
function state_update_hook!(::EnvHelper, particles::Vector{Particle})
|
||||||
return ReCo.method_not_implemented()
|
return ReCo.method_not_implemented()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ function update_reward!(::Env, ::EnvHelper, particle::Particle)
|
||||||
return ReCo.method_not_implemented()
|
return ReCo.method_not_implemented()
|
||||||
end
|
end
|
||||||
|
|
||||||
function update_table_and_actions_hook(
|
function update_table_and_actions_hook!(
|
||||||
env_helper::EnvHelper, particle::Particle, first_integration_step::Bool
|
env_helper::EnvHelper, particle::Particle, first_integration_step::Bool
|
||||||
)
|
)
|
||||||
env, agent, hook = get_env_agent_hook(env_helper)
|
env, agent, hook = get_env_agent_hook(env_helper)
|
||||||
|
@ -56,10 +56,12 @@ function update_table_and_actions_hook(
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
act_hook(::Nothing, args...) = nothing
|
function act_hook!(::Particle, ::Nothing, args...)
|
||||||
|
return nothing
|
||||||
|
end
|
||||||
|
|
||||||
function act_hook(
|
function act_hook!(
|
||||||
env_helper::EnvHelper, particle::Particle, δt::Float64, si::Float64, co::Float64
|
particle::Particle, env_helper::EnvHelper, δt::Float64, si::Float64, co::Float64
|
||||||
)
|
)
|
||||||
# Apply action
|
# Apply action
|
||||||
action = env_helper.shared.actions[particle.id]
|
action = env_helper.shared.actions[particle.id]
|
||||||
|
|
|
@ -76,7 +76,7 @@ function gen_env_helper(::LocalCOMEnv, env_helper_shared::EnvHelperSharedProps;
|
||||||
return LocalCOMEnvHelper(env_helper_shared, args.half_box_len, args.skin_r)
|
return LocalCOMEnvHelper(env_helper_shared, args.half_box_len, args.skin_r)
|
||||||
end
|
end
|
||||||
|
|
||||||
function pre_integration_hook(env_helper::LocalCOMEnvHelper)
|
function pre_integration_hook!(env_helper::LocalCOMEnvHelper)
|
||||||
@simd for id in 1:(env_helper.shared.n_particles)
|
@simd for id in 1:(env_helper.shared.n_particles)
|
||||||
env_helper.vec_to_neighbour_sums[id] = SVector(0.0, 0.0)
|
env_helper.vec_to_neighbour_sums[id] = SVector(0.0, 0.0)
|
||||||
env_helper.n_neighbours[id] = 0
|
env_helper.n_neighbours[id] = 0
|
||||||
|
@ -85,7 +85,7 @@ function pre_integration_hook(env_helper::LocalCOMEnvHelper)
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
function state_update_helper_hook(
|
function state_update_helper_hook!(
|
||||||
env_helper::LocalCOMEnvHelper, id1::Int64, id2::Int64, r⃗₁₂::SVector{2,Float64}
|
env_helper::LocalCOMEnvHelper, id1::Int64, id2::Int64, r⃗₁₂::SVector{2,Float64}
|
||||||
)
|
)
|
||||||
env_helper.vec_to_neighbour_sums[id1] += r⃗₁₂
|
env_helper.vec_to_neighbour_sums[id1] += r⃗₁₂
|
||||||
|
@ -97,7 +97,7 @@ function state_update_helper_hook(
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
function state_update_hook(env_helper::LocalCOMEnvHelper, particles::Vector{Particle})
|
function state_update_hook!(env_helper::LocalCOMEnvHelper, particles::Vector{Particle})
|
||||||
n_particles = env_helper.shared.n_particles
|
n_particles = env_helper.shared.n_particles
|
||||||
|
|
||||||
@turbo for id in 1:n_particles
|
@turbo for id in 1:n_particles
|
||||||
|
|
|
@ -61,7 +61,7 @@ function run_rl(;
|
||||||
seed::Int64=42,
|
seed::Int64=42,
|
||||||
ϵ_stable::Float64=0.0001,
|
ϵ_stable::Float64=0.0001,
|
||||||
skin_to_interaction_r_ratio::Float64=ReCo.DEFAULT_SKIN_TO_INTERACTION_R_RATIO,
|
skin_to_interaction_r_ratio::Float64=ReCo.DEFAULT_SKIN_TO_INTERACTION_R_RATIO,
|
||||||
packing_ratio=0.22,
|
packing_ratio::Float64=0.22,
|
||||||
) where {E<:Env}
|
) where {E<:Env}
|
||||||
@assert 0.0 <= goal_gyration_tensor_eigvals_ratio <= 1.0
|
@assert 0.0 <= goal_gyration_tensor_eigvals_ratio <= 1.0
|
||||||
@assert n_episodes > 0
|
@assert n_episodes > 0
|
||||||
|
|
32
src/Shape.jl
32
src/Shape.jl
|
@ -8,21 +8,21 @@ using LinearAlgebra: eigvals, eigvecs, Hermitian, dot
|
||||||
|
|
||||||
using ..ReCo: ReCo, Particle
|
using ..ReCo: ReCo, Particle
|
||||||
|
|
||||||
function project_to_unit_circle(x::Float64, half_box_len::Float64)
|
function project_to_unit_circle(x::Real, half_box_len::Real)
|
||||||
φ = (x + half_box_len) * π / half_box_len
|
φ = (x + half_box_len) * π / half_box_len
|
||||||
si, co = sincos(φ)
|
si, co = sincos(φ)
|
||||||
|
|
||||||
return SVector(co, si)
|
return SVector(co, si)
|
||||||
end
|
end
|
||||||
|
|
||||||
function project_back_from_unit_circle(θ::T, half_box_len::Float64) where {T<:Real}
|
function project_back_from_unit_circle(θ::Real, half_box_len::Real)
|
||||||
x = θ * half_box_len / π - half_box_len
|
x = θ * half_box_len / π - half_box_len
|
||||||
|
|
||||||
return ReCo.restrict_coordinate(x, half_box_len)
|
return ReCo.restrict_coordinate(x, half_box_len)
|
||||||
end
|
end
|
||||||
|
|
||||||
function center_of_mass_from_proj_sums(
|
function center_of_mass_from_proj_sums(
|
||||||
x_proj_sum::SVector{2,Float64}, y_proj_sum::SVector{2,Float64}, half_box_len::Float64
|
x_proj_sum::SVector{2,Real}, y_proj_sum::SVector{2,Real}, half_box_len::Real
|
||||||
)
|
)
|
||||||
# Prevent for example atan(1e-16, 1e-15) != 0 with rounding
|
# Prevent for example atan(1e-16, 1e-15) != 0 with rounding
|
||||||
digits = 5
|
digits = 5
|
||||||
|
@ -47,7 +47,7 @@ function center_of_mass_from_proj_sums(
|
||||||
return SVector(COM_x, COM_y)
|
return SVector(COM_x, COM_y)
|
||||||
end
|
end
|
||||||
|
|
||||||
function center_of_mass(centers::AbstractVector{SVector{2,Float64}}, half_box_len::Float64)
|
function center_of_mass(centers::AbstractVector{SVector{2,Real}}, half_box_len::Real)
|
||||||
x_proj_sum = SVector(0.0, 0.0)
|
x_proj_sum = SVector(0.0, 0.0)
|
||||||
y_proj_sum = SVector(0.0, 0.0)
|
y_proj_sum = SVector(0.0, 0.0)
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ function center_of_mass(centers::AbstractVector{SVector{2,Float64}}, half_box_le
|
||||||
return center_of_mass_from_proj_sums(x_proj_sum, y_proj_sum, half_box_len)
|
return center_of_mass_from_proj_sums(x_proj_sum, y_proj_sum, half_box_len)
|
||||||
end
|
end
|
||||||
|
|
||||||
function center_of_mass(particles::Vector{Particle}, half_box_len::Float64)
|
function center_of_mass(particles::AbstractVector{Particle}, half_box_len::Real)
|
||||||
x_proj_sum = SVector(0.0, 0.0)
|
x_proj_sum = SVector(0.0, 0.0)
|
||||||
y_proj_sum = SVector(0.0, 0.0)
|
y_proj_sum = SVector(0.0, 0.0)
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ function center_of_mass(particles::Vector{Particle}, half_box_len::Float64)
|
||||||
end
|
end
|
||||||
|
|
||||||
function gyration_tensor(
|
function gyration_tensor(
|
||||||
particles::Vector{Particle}, half_box_len::Float64, COM::SVector{2,Float64}
|
particles::AbstractVector{Particle}, half_box_len::Real, COM::SVector{2,Real}
|
||||||
)
|
)
|
||||||
S11 = 0.0
|
S11 = 0.0
|
||||||
S12 = 0.0
|
S12 = 0.0
|
||||||
|
@ -89,20 +89,22 @@ function gyration_tensor(
|
||||||
return Hermitian(SMatrix{2,2}(S11, S12, S12, S22))
|
return Hermitian(SMatrix{2,2}(S11, S12, S12, S22))
|
||||||
end
|
end
|
||||||
|
|
||||||
function gyration_tensor(particles::Vector{Particle}, half_box_len::Float64)
|
function gyration_tensor(particles::AbstractVector{Particle}, half_box_len::Real)
|
||||||
COM = center_of_mass(particles, half_box_len)
|
COM = center_of_mass(particles, half_box_len)
|
||||||
|
|
||||||
return gyration_tensor(particles, half_box_len, COM)
|
return gyration_tensor(particles, half_box_len, COM)
|
||||||
end
|
end
|
||||||
|
|
||||||
function gyration_tensor_eigvals_ratio(particles::Vector{Particle}, half_box_len::Float64)
|
function gyration_tensor_eigvals_ratio(
|
||||||
|
particles::AbstractVector{Particle}, half_box_len::Real
|
||||||
|
)
|
||||||
g_tensor = gyration_tensor(particles, half_box_len)
|
g_tensor = gyration_tensor(particles, half_box_len)
|
||||||
ev = eigvals(g_tensor) # Eigenvalues are sorted
|
ev = eigvals(g_tensor) # Eigenvalues are sorted
|
||||||
return ev[1] / ev[2]
|
return ev[1] / ev[2]
|
||||||
end
|
end
|
||||||
|
|
||||||
function gyration_tensor_eigvecs(
|
function gyration_tensor_eigvecs(
|
||||||
particles::Vector{Particle}, half_box_len::Float64, COM::SVector{2,Float64}
|
particles::AbstractVector{Particle}, half_box_len::Real, COM::SVector{2,Real}
|
||||||
)
|
)
|
||||||
g_tensor = gyration_tensor(particles, half_box_len, COM)
|
g_tensor = gyration_tensor(particles, half_box_len, COM)
|
||||||
eig_vecs = eigvecs(g_tensor)
|
eig_vecs = eigvecs(g_tensor)
|
||||||
|
@ -114,12 +116,12 @@ function gyration_tensor_eigvecs(
|
||||||
end
|
end
|
||||||
|
|
||||||
function elliptical_distance(
|
function elliptical_distance(
|
||||||
v::SVector{2,Float64},
|
v::SVector{2,Real},
|
||||||
COM::SVector{2,Float64},
|
COM::SVector{2,Real},
|
||||||
gyration_tensor_eigvec_to_smaller_eigval::SVector{2,Float64},
|
gyration_tensor_eigvec_to_smaller_eigval::SVector{2,Real},
|
||||||
gyration_tensor_eigvec_to_bigger_eigval::SVector{2,Float64},
|
gyration_tensor_eigvec_to_bigger_eigval::SVector{2,Real},
|
||||||
goal_gyration_tensor_eigvals_ratio::Float64,
|
goal_gyration_tensor_eigvals_ratio::Real,
|
||||||
half_box_len::Float64,
|
half_box_len::Real,
|
||||||
)
|
)
|
||||||
v′ = ReCo.minimum_image(v - COM, half_box_len)
|
v′ = ReCo.minimum_image(v - COM, half_box_len)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
empty_hook(args...) = nothing
|
function empty_hook(args...)
|
||||||
|
return nothing
|
||||||
|
end
|
||||||
|
|
||||||
function run_sim(
|
function run_sim(
|
||||||
dir::String;
|
dir::String;
|
||||||
|
@ -101,7 +103,7 @@ function run_sim(
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
simulate(
|
simulate!(
|
||||||
args,
|
args,
|
||||||
T0,
|
T0,
|
||||||
T,
|
T,
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
rand_normal01() = rand(Normal(0, 1))
|
function rand_normal01()
|
||||||
|
return rand(Normal(0, 1))
|
||||||
|
end
|
||||||
|
|
||||||
function push_to_verlet_list!(verlet_lists, i, j)
|
function push_to_verlet_list!(verlet_lists, i, j)
|
||||||
if i < j
|
if i < j
|
||||||
|
@ -36,9 +38,9 @@ function euler!(
|
||||||
args,
|
args,
|
||||||
first_integration_step::Bool,
|
first_integration_step::Bool,
|
||||||
env_helper::Union{RL.EnvHelper,Nothing},
|
env_helper::Union{RL.EnvHelper,Nothing},
|
||||||
state_update_helper_hook::Function,
|
state_update_helper_hook!::Function,
|
||||||
state_update_hook::Function,
|
state_update_hook!::Function,
|
||||||
update_table_and_actions_hook::Function,
|
update_table_and_actions_hook!::Function,
|
||||||
)
|
)
|
||||||
for id1 in 1:(args.n_particles - 1)
|
for id1 in 1:(args.n_particles - 1)
|
||||||
p1 = args.particles[id1]
|
p1 = args.particles[id1]
|
||||||
|
@ -52,7 +54,7 @@ function euler!(
|
||||||
p1_c, p2.c, args.interaction_r², args.half_box_len
|
p1_c, p2.c, args.interaction_r², args.half_box_len
|
||||||
)
|
)
|
||||||
|
|
||||||
state_update_helper_hook(env_helper, id1, id2, r⃗₁₂)
|
state_update_helper_hook!(env_helper, id1, id2, r⃗₁₂)
|
||||||
|
|
||||||
if overlapping
|
if overlapping
|
||||||
factor = args.c₁ / (distance²^4) * (args.c₂ / (distance²^3) - 1.0)
|
factor = args.c₁ / (distance²^4) * (args.c₂ / (distance²^3) - 1.0)
|
||||||
|
@ -64,7 +66,7 @@ function euler!(
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
state_update_hook(env_helper, args.particles)
|
state_update_hook!(env_helper, args.particles)
|
||||||
|
|
||||||
@simd for p in args.particles
|
@simd for p in args.particles
|
||||||
si, co = sincos(p.φ)
|
si, co = sincos(p.φ)
|
||||||
|
@ -75,9 +77,9 @@ function euler!(
|
||||||
|
|
||||||
restrict_coordinates!(p, args.half_box_len)
|
restrict_coordinates!(p, args.half_box_len)
|
||||||
|
|
||||||
update_table_and_actions_hook(env_helper, p, first_integration_step)
|
update_table_and_actions_hook!(env_helper, p, first_integration_step)
|
||||||
|
|
||||||
RL.act_hook(env_helper, p, args.δt, si, co)
|
RL.act_hook!(p, env_helper, args.δt, si, co)
|
||||||
|
|
||||||
p.φ += args.c₄ * rand_normal01()
|
p.φ += args.c₄ * rand_normal01()
|
||||||
|
|
||||||
|
@ -87,16 +89,20 @@ function euler!(
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
Base.wait(::Nothing) = nothing
|
function Base.wait(::Nothing)
|
||||||
|
return nothing
|
||||||
|
end
|
||||||
|
|
||||||
gen_run_additional_hooks(::Nothing, args...) = false
|
function gen_run_additional_hooks(::Nothing, args...)
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
function gen_run_additional_hooks(env_helper::RL.EnvHelper, integration_step::Int64)
|
function gen_run_additional_hooks(env_helper::RL.EnvHelper, integration_step::Int64)
|
||||||
return (integration_step % env_helper.shared.n_steps_before_actions_update == 0) ||
|
return (integration_step % env_helper.shared.n_steps_before_actions_update == 0) ||
|
||||||
(integration_step == 1)
|
(integration_step == 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
function simulate(
|
function simulate!(
|
||||||
args,
|
args,
|
||||||
T0::Float64,
|
T0::Float64,
|
||||||
T::Float64,
|
T::Float64,
|
||||||
|
@ -116,8 +122,8 @@ function simulate(
|
||||||
|
|
||||||
first_integration_step = true
|
first_integration_step = true
|
||||||
|
|
||||||
state_update_helper_hook =
|
state_update_helper_hook! =
|
||||||
state_update_hook = update_table_and_actions_hook = empty_hook
|
state_update_hook! = update_table_and_actions_hook! = empty_hook
|
||||||
|
|
||||||
start_time = now()
|
start_time = now()
|
||||||
println("Started simulation at $start_time.")
|
println("Started simulation at $start_time.")
|
||||||
|
@ -146,25 +152,25 @@ function simulate(
|
||||||
run_additional_hooks = gen_run_additional_hooks(env_helper, integration_step)
|
run_additional_hooks = gen_run_additional_hooks(env_helper, integration_step)
|
||||||
|
|
||||||
if run_additional_hooks
|
if run_additional_hooks
|
||||||
RL.pre_integration_hook(env_helper)
|
RL.pre_integration_hook!(env_helper)
|
||||||
|
|
||||||
state_update_helper_hook = RL.state_update_helper_hook
|
state_update_helper_hook! = RL.state_update_helper_hook!
|
||||||
state_update_hook = RL.state_update_hook
|
state_update_hook! = RL.state_update_hook!
|
||||||
update_table_and_actions_hook = RL.update_table_and_actions_hook
|
update_table_and_actions_hook! = RL.update_table_and_actions_hook!
|
||||||
end
|
end
|
||||||
|
|
||||||
euler!(
|
euler!(
|
||||||
args,
|
args,
|
||||||
first_integration_step,
|
first_integration_step,
|
||||||
env_helper,
|
env_helper,
|
||||||
state_update_helper_hook,
|
state_update_helper_hook!,
|
||||||
state_update_hook,
|
state_update_hook!,
|
||||||
update_table_and_actions_hook,
|
update_table_and_actions_hook!,
|
||||||
)
|
)
|
||||||
|
|
||||||
if run_additional_hooks
|
if run_additional_hooks
|
||||||
state_update_helper_hook =
|
state_update_helper_hook! =
|
||||||
state_update_hook = update_table_and_actions_hook = empty_hook
|
state_update_hook! = update_table_and_actions_hook! = empty_hook
|
||||||
end
|
end
|
||||||
|
|
||||||
first_integration_step = false
|
first_integration_step = false
|
||||||
|
|
Loading…
Reference in a new issue