Skip to content
Snippets Groups Projects
proxies.jl 1.17 KiB

function rand_points(n::Int, d::Int=2)
    x = rand(n, d)
    x = 2 .* x .- 1
    return x
end

function halton_points(n::Int, d::Int=2, P = primes(d^2+1)[1:d])
    P = shuffle!(P)[1:d]
    x = hcat( (Halton(P[k])[1:n] for k=1:d)... )
    x = 2 .* x .- 1
    return x
end

function grid_points(n::Int, d::Int=2)
    m = ceil(Int, n^(1/d))
    x = zeros(m^d, d)
    for i = 0:m^d-1
        j = [ (i÷m^(k-1)) % m for k=1:d ] 
        x[i+1,:] = j ./ m 
    end
    x = 2 .* x .- 1
    return x
end

function as_tuples(z::Matrix)
    n = size(z, 1)
    return [ tuple(z[i,:] ... ) for i=1:n]
end

function normal_proxy(z::Matrix, μ::Number=0.0, σ::Number=1.0)
    f = function (x, z)
        X2 = 4/pi * ( z[1]^2 + z[2]^2  < x^2 )
        X1 = 2 * (z[3]^2 < x^2) * sign(x)
        return - 1 / (2 * σ^2) * X2  + μ / (σ^2) * X1 
    end
    return SampledLogDensity( as_tuples(z), f)
end

function normalmix_proxy(z::Matrix, μ::Number=0.0, σ::Number=1.0)
    f = function (x, z)
        X2 = 4/pi * ( z[1]^2 + z[2]^2  < x^2 )
        X1 = (z[3]^2 < x^2) # leave out the sign
        return - 1 / (2 * σ^2) * X2  + μ / (σ^2) * X1 
    end
    return SampledLogDensity( as_tuples(z), f)
end