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: Projete circuito (s) quântico (s) que represente o problema que você está considerando.
Compilar: Compila circuitos para um serviço quântico específico, por exemplo, um sistema quântico ou 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 resumidas e visualize os resultados dos experimentos.
Aqui é exibido um exemplo de todo o workflow, com cada passo explicado em detalhes nas seções subsequentes:
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
# Use Aer's AerSimulator
simulator = AerSimulator()
# 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 for the support instruction set (basis_gates)
# and topology (coupling_map) of the backend
compiled_circuit = transpile(circuit, simulator)
# Execute the circuit on the aer simulator
job = simulator.run(compiled_circuit, shots=1000)
# Grab results from the job
result = job.result()
# Returns counts
counts = result.get_counts(compiled_circuit)
print("\nTotal count for 00 and 11 are:", counts)
# Draw the circuit
circuit.draw("mpl")

# Plot a histogram
plot_histogram(counts)

Fluxo passo-a-passo#
O trecho de código apresentado acima é composto de seis passos:
Importar pacotes
Inicializar variáveis
Adicionar portas
Visualizar o circuito
Simular o experimento
Visualizar os resultados
Passo 1: Importar pacotes#
Os elementos básicos necessários para seu programa são importados como segue:
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
Em maiores detalhes, os imports são
QuantumCircuit
: pode ser pensado como as instruções do sistema quântico. Ele contém todas as suas operações quânticas.AerSimulator
: é o simulador de circuitos de alto desempenho Aer.plot_histogram
: cria histogramas.
Passo 2: Inicializar variáveis#
Considere a linha de código a seguir:
circuit = QuantumCircuit(2, 2)
Aqui, você inicializa com 2 qubits no estado zero; com 2 bits clássicos definidos para zero; e `` circuito`` é o circuito quântico.
Sintaxe:
QuantumCircuit(int, int)
Passo 3: Adicionar portas#
Você pode adicionar portas (Operações) para manipular os registradores do seu circuito.
Considere as três linhas de código seguintes:
circuit.h(0)
circuit.cx(0, 1)
circuit.measure([0, 1], [0, 1])
As portas são adicionadas ao circuito uma a uma para formar o estado de Bell
O código acima aplica as seguintes portas:
QuantumCircuit.h(0)
: Uma porta Hadamard \(H\) no qubit 0, que coloca-o em um estado de superposição.QuantumCircuit.cx(0, 1)
: Uma operação não controlada (\(CNOT\)) no qubit de controle 0 e no qubit de destino 1, colocando os quibits em um estado de emaranhamento.QuantumCircuit.measure([0,1], [0,1])
: se você passar todos os registradores quânticos e clássicos parameasure
, o resultado da medição do i-ésimo qubit será armazenado no i-ésimo bit clássico.
Passo 4: Visualizar o circuito#
Você pode utilizar qiskit.circuit.QuantumCircuit.draw()
para visualizar o circuito que você projetou nas várias formas usadas em muitos livros didáticos e artigos de pesquisa.
circuit.draw("mpl")

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, o que significa que as portas que são aplicadas anteriormente no circuito aparecem mais à esquerda.
O serviço padrão para QuantumCircuit.draw()
ou qiskit.visualization.circuit_drawer()
é o serviço de texto. No entanto, dependendo do seu ambiente local, você pode querer alterar estes padrões para algo mais apropriado ao seu caso de uso. Isso é feito com o arquivo de configuração do usuário. Por padrão, o arquivo de configuração do usuário deve estar localizado em ~/.qiskit/settings.conf
e é um arquivo .ini
.
Por exemplo, um arquivo settings.conf
para configurar um drawer do Matplotlib é:
[default]
circuit_drawer = mpl
Você pode utilizar qualquer um dos serviços de desenho de circuito válidos como o valor para esta configuração, isso inclui text, mpl, latex, e latex_source.
Passo 5: Simular o experimento#
Qiskit Aer is a high performance simulator framework for quantum circuits. It provides several backends to achieve different simulation goals.
If you have issues installing Aer, you can alternatively use the Basic Aer provider by replacing Aer with BasicAer. Basic Aer is included in Qiskit.
from qiskit import QuantumCircuit, transpile
from qiskit.providers.basicaer import QasmSimulatorPy
...
Para simular esse circuito, você pode usar o AerSimulator
. Cada execução desse circuito irá gerar ou a string de bits 00 ou 11.
simulator = AerSimulator()
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)
Como esperado, a saída da sequência de bits é 00 aproximadamente 50 por cento do tempo. O número de vezes que o circuito é executado pode ser especificado por meio do argumento shots
do método execute
. O número de execuções da simulação foi definido como 1000 (o padrão é 1024).
Uma vez que tenha um objeto result
, você pode acessar as contagens por meio do método get_counts(circuit)
. Isso fornece os resultados agregados do experimento executado.
Passo 6: Visualizar os resultados#
Qiskit fornece muitas 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 computadas tomando as respectivas contagens e dividindo pelo número total de execuções.
Nota
Tente modificar o argumento shots
no método run()
para ver como as probabilidades estimadas mudam.
Próximos Passos#
Agora que você aprendeu o básico, considere estes recursos de aprendizagem: