Quantum Random Numbers in Yao.jl
The first example I use for understanding quantum computing concepts is the Quantum Random Number Generator. It’s also the simplest example possible. Let’s see what it looks like Yao.jl.
As you might expect, it’s beyond trivial.
using Yao, BitBasis
n=3
zero_state(n) |> repeat(n, H) |> measure! |> bint
Here Yao
is the base package. BitBasis
contains the tools for dealing with bit strings which Yao returns.
We pass a zero_state
with n
qubits, i.e. $\vert 0^n \rangle$, through n
hadamard gates and then measure the result. Each bit has a 50/50 chance of being 0 or 1. In this case we use the bint
function from the BitBasis
package to convert the measured bits to a number.
The result is indeed a random number between 0 and 7.
Let’s go a little further and make sure the numbers are uniform by plotting the distribution of the results:
results = zero_state(n) |> repeat(n, H) |> r -> measure(r, nshots=10_000) .|> bint
The only difference here is the nshots
parameter passed to the measure function to repeat the measurement that many times. This is much faster and cleaner than using a comprehension of something. the .|>
operator converts the individual results.
The result is an array of 10,000 measurements which should be uniformly distributed. Let’s check:
histogram(results, legend=:none, xticks=(0:maximum(results)), bar_width=0.9)
Gives us
Which is good.