Skip to content
This repository was archived by the owner on May 6, 2021. It is now read-only.

Commit 835690d

Browse files
authored
Add episode length for Bit Flipping Env (#125)
* Add episode length for Bit Flipping Env Add episode length for Bit Flipping Env Fix typo Fix typo * Remove redundant constructors Remove redundant constructors
1 parent 4b3d39e commit 835690d

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

src/environments/examples/BitFlippingEnv.jl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,20 @@ In Bit Flipping Environment we have n bits. The actions are 1 to n where executi
66
Refer [Hindsight Experience Replay paper](https://arxiv.org/pdf/1707.01495.pdf) for the motivation behind the environment.
77
"""
88

9-
struct BitFlippingEnv <: AbstractEnv
9+
mutable struct BitFlippingEnv <: AbstractEnv
1010
N::Int
1111
rng::AbstractRNG
1212
state::BitArray{1}
1313
goal_state::BitArray{1}
14+
max_steps::Int
15+
t::Int
1416
end
1517

16-
function BitFlippingEnv(; N = 8, rng = Random.GLOBAL_RNG)
18+
function BitFlippingEnv(; N = 8, T = N,rng = Random.GLOBAL_RNG)
1719
state = bitrand(rng, N)
1820
goal_state = bitrand(rng, N)
19-
BitFlippingEnv(N, rng, state, goal_state)
21+
max_steps = T
22+
BitFlippingEnv(N, rng, state, goal_state, max_steps, 0)
2023
end
2124

2225
Random.seed!(env::BitFlippingEnv, s) = Random.seed!(env.rng, s)
@@ -26,6 +29,7 @@ RLBase.action_space(env::BitFlippingEnv) = Base.OneTo(env.N)
2629
RLBase.legal_action_space(env::BitFlippingEnv) = Base.OneTo(env.N)
2730

2831
function (env::BitFlippingEnv)(action::Int)
32+
env.t += 1
2933
if 1 <= action <= env.N
3034
env.state[action] = !env.state[action]
3135
nothing
@@ -39,9 +43,10 @@ RLBase.state(env::BitFlippingEnv, ::Observation) = env.state
3943
RLBase.state(env::BitFlippingEnv, ::GoalState) = env.goal_state
4044
RLBase.state_space(env::BitFlippingEnv, ::Observation) = Space(fill(false..true, env.N))
4145
RLBase.state_space(env::BitFlippingEnv, ::GoalState) = Space(fill(false..true, env.N))
42-
RLBase.is_terminated(env::BitFlippingEnv) = env.state == env.goal_state
46+
RLBase.is_terminated(env::BitFlippingEnv) = (env.state == env.goal_state) || (env.t >= env.max_steps)
4347

4448
function RLBase.reset!(env::BitFlippingEnv)
49+
env.t = 0
4550
env.state .= bitrand(env.rng, env.N)
4651
env.goal_state .= bitrand(env.rng, env.N)
4752
end

test/environments/examples/bit_flipping_env.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
@testset "bit_flipping_env" begin
22
rng = StableRNG(123)
3-
env = BitFlippingEnv(; N = 7, rng = rng)
3+
env = BitFlippingEnv(; N = 7, T = 2, rng = rng)
44
test_state = state(env, GoalState())
5+
env(1)
6+
@test is_terminated(env) == false
7+
env(1)
8+
@test is_terminated(env) == true
59
RLBase.test_interfaces!(env)
610
RLBase.test_runnable!(env)
711

0 commit comments

Comments
 (0)