Skip to content
Snippets Groups Projects
all.jl 894 B
Newer Older
abstract type AbstractProposal end
rand(rng::AbstractRNG, p::AbstractProposal) = rand(Random.default_rng(), p)
propose(rng::AbstractRNG, p::AbstractProposal, x=nothing) = propose(rng, p, x)
propose(rng::AbstractRNG, p::AbstractProposal, x::Nothing) = rand(rng, p)
logpratio(p::AbstractProposal, x, y) = 0 # symmetric proposal by default

struct RandomWalk{I, S, F} <: AbstractProposal 
    init :: I
    step :: S
    func :: F
end
RandomWalk(init::Distribution, step::Distribution) = RandomWalk(init, step, (.+))

rand(rng::AbstractRNG, p::RandomWalk{<:Distribution, <:Any}) = rand(rng, p.init) 
propose(rng::AbstractRNG, p::RandomWalk{<:Distribution, <:Distribution}, x) = p.func(x, rand(rng, p.step))


function CyclicWalk(a=-1, b=1, s=.5) 
    init = Uniform(a,b); step = Uniform(-s, s) 
    func = (x,y) -> mod(x+y - a, b-a) + a
    RandomWalk(init, step, func)
end

include("networks.jl")