Skip to content

Commit 72ac0a1

Browse files
committed
simplify coevolve
1 parent bba4aaf commit 72ac0a1

File tree

1 file changed

+15
-20
lines changed

1 file changed

+15
-20
lines changed

src/aggregators/coevolve.jl

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,8 @@ function next_time(p::CoevolveJumpAggregation{T}, u, params, t, i, tstop::T) whe
150150
num_majumps = get_num_majumps(p.ma_jumps)
151151
num_cjumps = length(p.urates) - length(p.rates)
152152
uidx = i - num_majumps
153-
lidx = i - num_majumps - num_cjumps
154-
urate = uidx > 0 ? get_urate(p, uidx, u, params, t) :
155-
get_ma_urate(p, i, u, params, t)
153+
lidx = uidx - num_cjumps
154+
urate = uidx > 0 ? get_urate(p, uidx, u, params, t) : get_ma_urate(p, i, u, params, t)
156155
last_urate = p.cur_rates[i]
157156
if i != p.next_jump && last_urate > zero(t)
158157
s = urate == zero(t) ? typemax(t) : last_urate / urate * (p.pq[i] - t)
@@ -170,26 +169,22 @@ function next_time(p::CoevolveJumpAggregation{T}, u, params, t, i, tstop::T) whe
170169
_t = t + s
171170
continue
172171
end
173-
if _t >= tstop
174-
break
175-
end
176-
lrate = p.urates[uidx] === p.lrates[lidx] ? urate :
177-
get_lrate(p, lidx, u, params, t)
178-
if lrate > urate
179-
error("The lower bound should be lower than the upper bound rate for t = $(t) and i = $(i), but lower bound = $(lrate) > upper bound = $(urate)")
180-
elseif lrate < urate
172+
(_t >= tstop) && break
173+
174+
lrate = get_lrate(p, lidx, u, params, t)
175+
if lrate < urate
181176
# when the lower and upper bound are the same, then v < 1 = lrate / urate = urate / urate
182-
v = rand(rng)
177+
v = rand(rng) * urate
183178
# first inequality is less expensive and short-circuits the evaluation
184-
if (v > lrate / urate)
185-
if (v > get_rate(p, lidx, u, params, _t) / urate)
186-
t = _t
187-
urate = get_urate(p, uidx, u, params, t)
188-
s = urate == zero(t) ? typemax(t) : randexp(rng) / urate
189-
_t = t + s
190-
continue
191-
end
179+
if (v > lrate) && (v > get_rate(p, lidx, u, params, _t))
180+
t = _t
181+
urate = get_urate(p, uidx, u, params, t)
182+
s = urate == zero(t) ? typemax(t) : randexp(rng) / urate
183+
_t = t + s
184+
continue
192185
end
186+
elseif lrate > urate
187+
error("The lower bound should be lower than the upper bound rate for t = $(t) and i = $(i), but lower bound = $(lrate) > upper bound = $(urate)")
193188
end
194189
break
195190
end

0 commit comments

Comments
 (0)