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
Yao is the base package.
BitBasis contains the tools for dealing with bit strings which Yao returns.
We pass a
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)
Which is good.