Introdução ao Qiskit¶
Ao usar o Qiskit um fluxo de trabalho do usuário nominalmente consiste em seguir quatro etapas de alto nível:
Construir: Crie circuito(s) quântico(s) que representem o problema que você está considerando.
Compilação: Compile circuitos para um serviço quântico específico, por exemplo, um sistema quântico ou um simulador clássico.
Execute: execute os circuitos compilados no serviço(s) quântico especificado. Esses serviços podem ser na nuvem ou locais.
Analisar: Calcule estatísticas sumarizadas e visualize os resultados dos experimentos.
Aqui está um exemplo de um fluxo de utilização completo, com explicação detalhada de cada etapa, nas sessões subsequentes:
import numpy as np
from qiskit import QuantumCircuit, transpile
from qiskit.providers.aer import QasmSimulator
from qiskit.visualization import plot_histogram
# Use Aer's qasm_simulator
simulator = QasmSimulator()
# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(2, 2)
# Add a H gate on qubit 0
circuit.h(0)
# Add a CX (CNOT) gate on control qubit 0 and target qubit 1
circuit.cx(0, 1)
# Map the quantum measurement to the classical bits
circuit.measure([0,1], [0,1])
# compile the circuit down to low-level QASM instructions
# supported by the backend (not needed for simple circuits)
compiled_circuit = transpile(circuit, simulator)
# Execute the circuit on the qasm simulator
job = simulator.run(compiled_circuit, shots=1000)
# Grab results from the job
result = job.result()
# Returns counts
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
# Draw the circuit
circuit.draw()
Total count for 00 and 11 are: {'00': 510, '11': 490}
┌───┐ ┌─┐ q_0: ┤ H ├──■──┤M├─── └───┘┌─┴─┐└╥┘┌─┐ q_1: ─────┤ X ├─╫─┤M├ └───┘ ║ └╥┘ c: 2/═══════════╩══╩═ 0 1
# Plot a histogram
plot_histogram(counts)

Fluxo de trabalho passo-a-passo¶
O programa acima pode ser dividido em seis etapas:
Importar pacotes
Inicializar variáveis
Adicionar portas
Visualizar o circuito
Simular o experimento
Visualizar os resultados
Etapa 1: Importar pacotes¶
Os elementos básicos necessários para o seu programa são importados da seguinte forma:
import numpy as np
from qiskit import QuantumCircuit
from qiskit.providers.aer import QasmSimulator
from qiskit.visualization import plot_histogram
Em maiores detalhes, os elementos importados são
QuantumCircuit
: podem ser entendidos como as instruções do sistema quântico. Contém todas as operações quânticas.QasmSimulator
: é o simulador de circuito de alto desempenho Aer.plot_histogram
: cria histogramas.
Etapa 2: Inicializar Variáveis¶
Considere a seguinte linha do código
circuit = QuantumCircuit(2, 2)
Aqui, você está inicializando com 2 qubits no estado zero; com 2 bits clássicos definidos como zero; e circuit
é o circuito quântico.
Sintaxe:
QuantumCircuit(int, int)
Etapa 3: Adicionar Portas¶
Você pode adicionar portas (operações) para manipular os registradores do seu circuito.
Considere as três linhas de código a seguir:
circuit.h(0)
circuit.cx(0, 1)
circuit.measure([0,1], [0,1])
As portas são adicionados uma-a-uma ao circuito para formar o estado de Bell
O código acima aplica as seguintes portas:
QuantumCircuit.h(0)
: Uma porta de Hadamard \(H\) no qubit 0, que o coloca em um estado de superposição.QuantumCircuit.cx(0, 1)
: Uma operação controlled-Not (\(CNOT\)) sobre o qubit de controle 0 e o qubit de destino 1, deixando os qubits em um estado de emaranhamento.QuantumCircuit.measure([0,1], [0,1])
: se você passar os registradores quânticos e clássicos inteiros parameasure
, o resultado da medição do i-ésimo qubit será armazenado no i-ésimo bit clássico.
Etapa 4: Visualizar o Circuito¶
Você pode usar qiskit.circuit.QuantumCircuit.draw()
para ver o circuito que você projetou nas várias formas usadas em muitos livros didáticos e artigos de pesquisa.
circuit.draw()
┌───┐ ┌─┐ q_0: ┤ H ├──■──┤M├─── └───┘┌─┴─┐└╥┘┌─┐ q_1: ─────┤ X ├─╫─┤M├ └───┘ ║ └╥┘ c: 2/═══════════╩══╩═ 0 1
Neste circuito, os qubits são ordenados com qubit zero na parte superior e qubit um na parte inferior. O circuito é lido da esquerda para a direita, significando que portas que são aplicadas antes no circuito aparecem mais para a esquerda.
O serviço padrão para QuantumCircuit.draw()
ou qiskit.visualization.circuit_drawer()
é o serviço de texto. No entanto, é possível alterar esses padrões para algo mais adequado para o seu ambiente e caso de uso. Isso é feito com o arquivo de configuração do usuário. Por padrão este arquivo fica localizado em ~/.qiskit/settings.conf
e possui a extensão .ini
.
Por exemplo, um arquivo settings.conf
para configurar um Matplotlib drawer é:
[default]
circuit_drawer = mpl
Você pode usar qualquer um dos serviços de desenho de circuitos como valor para esta configuração, o que inclui text, mpl, latex e latex_source.
Etapa 5: Simular o Experimento¶
O Qiskit Aer é um framework de simulador de alto desempenho para circuitos quânticos. Ele fornece vários serviços para alcançar diferentes objetivos de simulação.
Se você tiver problemas ao instalar o Aer, você pode usar alternativamente, o provedor Basic Aer substituindo Aer por BasicAer. Basic Aer está incluído no Qiskit Terra.
import numpy as np
from qiskit import QuantumCircuit, transpile
from qiskit.providers.basicaer import QasmSimulatorPy
...
Para simular este circuito, você usará o qasm_simulator
. Cada execução deste circuito produzirá uma palavra binária 00 ou 11.
simulator = QasmSimulator()
compiled_circuit = transpile(circuit, simulator)
job = simulator.run(compiled_circuit, shots=1000)
result = job.result()
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
Total count for 00 and 11 are: {'00': 490, '11': 510}
Como esperado, a palavra binária de saída é igual a 00 aproximadamente 50% das vezes. O número de vezes que o circuito é executado pode ser especificado através do argumento shots
, do método execute
. O número de repetições da simulação foi configurado como 1000 (o padrão é 1024).
Uma vez que você tenha o objeto result
, poderá acessar as contagens através do método get_counts(circuit)
. Isso fornece os resultados agregados do experimento que você executou.
Etapa 6: Visualizar os Resultados¶
Qiskit fornece várias visualizações,
incluindo a função plot_histogram
, para visualizar seus resultados.
plot_histogram(counts)

As probabilidades observadas \(Pr(00)\) e \(Pr(11)\) são calculadas pelas respectivas contagens e dividindo pelo número total de execuções.
Nota
Tente alterar o valor de shots
no método execute
para ver como as probabilidades estimadas mudam.
Próximos passos¶
Agora que você aprendeu o básico, considere esses recursos de aprendizagem: