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