Exercício – Criar um gerador quântico de bits aleatórios
Os computadores clássicos não produzem números aleatórios, mas sim números pseudoaleatórios . Um gerador de números pseudoaleatórios gera uma sequência determinística de números com base em algum valor inicial (chamado de semente). Para melhor aproximar os valores aleatórios, este seed é muitas vezes a hora atual do relógio da CPU.
Os computadores quânticos, por outro lado, podem gerar números verdadeiramente aleatórios. Isso ocorre porque a medição de um qubit em superposição é um processo probabilístico. O resultado da medição é aleatório e não há como prever o resultado. Este é o princípio básico dos geradores quânticos de números aleatórios.
Definir o problema QRNG
Você começa tomando um qubit em um estado base, como zero. O primeiro passo do QRNG é usar uma H
operação para colocar o qubit em uma superposição igual. A medição deste estado resulta em um zero ou um com 50% de probabilidade de cada resultado. O valor deste bit é realmente aleatório, não há como saber o que você receberá após a medição. Mas como você pode usar esse comportamento para gerar números aleatórios maiores?
Digamos que repete o processo quatro vezes e gera esta sequência de dígitos binários:
$${0, 1, 1, 0}$$
Se concatenar, ou combinar, estes bits numa cadeia de bits, pode formar um número maior. Neste exemplo, a sequência de bits ${0110}$ é equivalente a seis em decimal.
$${0110_{\ binary} \equiv 6_{\ decimal}}$$
Se você repetir esse processo muitas vezes, poderá combinar vários bits para formar qualquer número grande.
Você constrói seu gerador de números aleatórios quânticos em duas fases. Nesta unidade, você constrói a primeira fase, que é gerar um único bit aleatório.
Para tal, terá de:
- Aloque um qubit.
- Aplique a
H
operação para colocar um qubit em superposição. - Meça o qubit para obter um bit aleatório.
- Redefina o qubit para o estado zero.
Criar um programa Q#
Abra o Visual Studio Code e selecione File > New Text File para criar um novo arquivo.
Guarde o ficheiro como
RandomNumberGenerator.qs
. Este ficheiro irá conter o código Q# para o seu programa.Copie o código a seguir para o
RandomNumberGenerator.qs
arquivo.namespace QuantumRandomNumberGenerator { @EntryPoint() operation GenerateRandomBit() : Result { // Allocate a qubit. use q = Qubit(); // Set the qubit into superposition of 0 and 1 using the Hadamard H(q); // At this point the qubit `q` has 50% chance of being measured in the // |0〉 state and 50% chance of being measured in the |1〉 state. // Measure the qubit value using the `M` operation, and store the // measurement value in the `result` variable. let result = M(q); // Reset qubit to the |0〉 state. // Qubits must be in the |0〉 state by the time they are released. Reset(q); // Return the result of the measurement. return result; } }
Gorjeta
O QDK inclui um conjunto de amostras Q# integradas que você pode usar para aprender mais sobre Q# e computação quântica. Para exibir os exemplos, abra um novo arquivo Q# e digite sample
e, em seguida, selecione o exemplo que deseja exibir na lista de opções. Você pode encontrar o código Q# nesta unidade em "Amostra de bit aleatório".
Explore o código Q#
- Passe o cursor sobre a
H
operação para ver um breve resumo da definição. - Coloque o cursor na frente da operação, clique com o botão direito do
H
mouse e selecione Ir para definição. Isso abre uma exibição somente leitura do código de biblioteca padrão para a função.
Execute o programa localmente
- Abra um novo terminal selecionando Terminal > New Terminal.
- Para testar a execução do programa localmente no simulador integrado, clique em Executar na lista de comandos abaixo
@EntryPoint()
ou pressione Ctrl+F5. Sua saída aparecerá no console de depuração. - Execute o programa novamente para ver um resultado diferente.
Na próxima unidade, você implementará a segunda fase do seu gerador quântico de números aleatórios: combinando vários bits aleatórios para formar um número maior.