I am looking for a function/package that will let me flip a weighted coin in Julia, where I can specify the weight. e.g. some adjustable probability p, that determines the probability of heads.

I found the bitrand function in the Random package but to the best of my knowledge this does not have the option to specify a weight.

Does anyone know if there’s a package/function that can do this?

Thanks

Maybe something like this:

```
julia> coin(w = 0.5) = rand() < w;
julia> coin()
false
julia> coin()
true
```

2 Likes

or using `Bernoulli`

distribution from Distributions.jl package. The benefit is that it will be easier to simulate multiple draws.

```
julia> using Distributions
julia> coin = Bernoulli(0.3)
Bernoulli{Float64}(p=0.3)
julia> rand(coin)
0
julia> rand(coin, 10)
10-element Array{Int64,1}:
0
0
0
0
0
0
0
0
1
1
```

3 Likes

Thanks, this might work, but actually what I was looking to do was flip multiple coints with *different* weights, are there modifications of this that would work? I suppose that would need a new distribution every time so it might not be optimal.

Thanks, I think that this is an elegant solution. In this case if I wanted to use a vector of weights, w, I could just call it as coin.(w) and then flip multiple coins with weights corresponding to entries in w, correct?

Yea, but you can do that with the `Distributions`

example too:

```
julia> coins = Bernoulli.([0.2, 0.5, 0.7]) # 3 coins with different weights
3-element Array{Bernoulli{Float64},1}:
Bernoulli{Float64}(p=0.2)
Bernoulli{Float64}(p=0.5)
Bernoulli{Float64}(p=0.7)
julia> rand.(coins) # flip the set of coins
3-element BitArray{1}:
0
1
1
```

7 Likes