Qiskit
Visão Geral
Qiskit é o framework de computação quântica de código aberto mais popular do mundo com 13M+ downloads. Construa circuitos quânticos, otimize para hardware, execute em simuladores ou em computadores quânticos reais, e analise resultados. Suporta IBM Quantum (sistemas com 100+ qubits), IonQ, Amazon Braket e outros provedores.
Principais Características:
- Transpilar 83x mais rápido que concorrentes
- 29% menos portas de dois qubits em circuitos otimizados
- Execução agnóstica de backend (simuladores locais ou hardware em nuvem)
- Bibliotecas abrangentes de algoritmos para otimização, química e ML
Início Rápido
Instalação
uv pip install qiskit
uv pip install "qiskit[visualization]" matplotlib
Primeiro Circuito
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
# Cria estado Bell (qubits emaranhados)
qc = QuantumCircuit(2)
qc.h(0) # Hadamard no qubit 0
qc.cx(0, 1) # CNOT do qubit 0 para 1
qc.measure_all() # Mede ambos os qubits
# Executa localmente
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
counts = result[0].data.meas.get_counts()
print(counts) # {'00': ~512, '11': ~512}
Visualização
from qiskit.visualization import plot_histogram
qc.draw('mpl') # Diagrama do circuito
plot_histogram(counts) # Histograma de resultados
Capacidades Principais
1. Configuração e Instalação
Para instalação detalhada, autenticação e configuração da conta IBM Quantum:
Tópicos cobertos:
- Instalação com uv
- Configuração de ambiente Python
- Configuração de conta IBM Quantum e token de API
- Execução local vs. em nuvem
2. Construção de Circuitos Quânticos
Para construir circuitos quânticos com portas, medições e composição:
- Veja
references/circuits.md
Tópicos cobertos:
- Criação de circuitos com QuantumCircuit
- Portas de um qubit (H, X, Y, Z, rotações, portas de fase)
- Portas de múltiplos qubits (CNOT, SWAP, Toffoli)
- Medições e barreiras
- Composição de circuitos e propriedades
- Circuitos parametrizados para algoritmos variacionais
3. Primitives (Sampler e Estimator)
Para executar circuitos quânticos e computar resultados:
- Veja
references/primitives.md
Tópicos cobertos:
- Sampler: Obtenha medições de bitstring e distribuições de probabilidade
- Estimator: Calcule valores esperados de observáveis
- Interface V2 (StatevectorSampler, StatevectorEstimator)
- Primitives do IBM Quantum Runtime para hardware
- Modos de Sessions e Batch
- Binding de parâmetros
4. Transpiração e Otimização
Para otimizar circuitos e preparar para execução em hardware:
- Veja
references/transpilation.md
Tópicos cobertos:
- Por que a transpiração é necessária
- Níveis de otimização (0-3)
- Seis estágios de transpiração (init, layout, routing, translation, optimization, scheduling)
- Recursos avançados (virtual permutation elision, cancelamento de portas)
- Parâmetros comuns (initial_layout, approximation_degree, seed)
- Melhores práticas para circuitos eficientes
5. Visualização
Para exibir circuitos, resultados e estados quânticos:
- Veja
references/visualization.md
Tópicos cobertos:
- Desenhos de circuitos (texto, matplotlib, LaTeX)
- Histogramas de resultados
- Visualização de estado quântico (esfera de Bloch, state city, QSphere)
- Topologia de backend e mapas de erro
- Customização e estilo
- Salvando figuras em qualidade de publicação
6. Backends de Hardware
Para executar em simuladores e computadores quânticos reais:
- Veja
references/backends.md
Tópicos cobertos:
- Backends IBM Quantum e autenticação
- Propriedades e status de backends
- Execução em hardware real com primitives de Runtime
- Gerenciamento de trabalhos e fila
- Modo Session (algoritmos iterativos)
- Modo Batch (trabalhos paralelos)
- Simuladores locais (StatevectorSampler, Aer)
- Provedores de terceiros (IonQ, Amazon Braket)
- Estratégias de mitigação de erro
7. Workflow Qiskit Patterns
Para implementar o workflow de computação quântica em quatro etapas:
- Veja
references/patterns.md
Tópicos cobertos:
- Map: Traduza problemas para circuitos quânticos
- Optimize: Transpilar para hardware
- Execute: Execute com primitives
- Post-process: Extraia e analise resultados
- Exemplo VQE completo
- Execução Session vs. Batch
- Padrões de workflow comuns
8. Algoritmos e Aplicações Quânticas
Para implementar algoritmos quânticos específicos:
- Veja
references/algorithms.md
Tópicos cobertos:
- Otimização: VQE, QAOA, algoritmo de Grover
- Química: Estados fundamentais moleculares, estados excitados, Hamiltonianos
- Aprendizado de Máquina: Kernels quânticos, VQC, QNN
- Bibliotecas de algoritmos: Qiskit Nature, Qiskit ML, Qiskit Optimization
- Simulações de física e benchmarking
Guia de Decisão de Workflow
Se você precisa:
- Instalar Qiskit ou configurar conta IBM Quantum →
references/setup.md
- Construir um novo circuito quântico →
references/circuits.md
- Entender portas e operações de circuitos →
references/circuits.md
- Executar circuitos e obter medições →
references/primitives.md
- Calcular valores esperados →
references/primitives.md
- Otimizar circuitos para hardware →
references/transpilation.md
- Visualizar circuitos ou resultados →
references/visualization.md
- Executar em hardware IBM Quantum →
references/backends.md
- Conectar a provedores de terceiros →
references/backends.md
- Implementar workflow quântico ponta a ponta →
references/patterns.md
- Construir algoritmo específico (VQE, QAOA, etc.) →
references/algorithms.md
- Resolver problemas de química ou otimização →
references/algorithms.md
Melhores Práticas
Workflow de Desenvolvimento
Comece com simuladores: Teste localmente antes de usar hardware
from qiskit.primitives import StatevectorSampler
sampler = StatevectorSampler()
Sempre transpilar: Otimize circuitos antes da execução
from qiskit import transpile
qc_optimized = transpile(qc, backend=backend, optimization_level=3)
Use primitives apropriados:
- Sampler para bitstrings (algoritmos de otimização)
- Estimator para valores esperados (química, física)
Escolha modo de execução:
- Session: Algoritmos iterativos (VQE, QAOA)
- Batch: Trabalhos paralelos independentes
- Trabalho único: Experimentos isolados
Otimização de Desempenho
- Use optimization_level=3 para produção
- Minimize portas de dois qubits (fonte principal de erro)
- Teste com simuladores com ruído antes do hardware
- Salve e reutilize circuitos transpilados
- Monitore convergência em algoritmos variacionais
Execução em Hardware
- Verifique status do backend antes de enviar
- Use least_busy() para testes
- Salve IDs de trabalhos para recuperação posterior
- Aplique mitigação de erro (resilience_level)
- Comece com menos shots, aumente para execuções finais
Padrões Comuns
Padrão 1: Execução Simples de Circuito
from qiskit import QuantumCircuit, transpile
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
counts = result[0].data.meas.get_counts()
Padrão 2: Execução em Hardware com Transpiração
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
from qiskit import transpile
service = QiskitRuntimeService()
backend = service.backend("ibm_brisbane")
qc_optimized = transpile(qc, backend=backend, optimization_level=3)
sampler = Sampler(backend)
job = sampler.run([qc_optimized], shots=1024)
result = job.result()
Padrão 3: Algoritmo Variacional (VQE)
from qiskit_ibm_runtime import Session, EstimatorV2 as Estimator
from scipy.optimize import minimize
with Session(backend=backend) as session:
estimator = Estimator(session=session)
def cost_function(params):
bound_qc = ansatz.assign_parameters(params)
qc_isa = transpile(bound_qc, backend=backend)
result = estimator.run([(qc_isa, hamiltonian)]).result()
return result[0].data.evs
result = minimize(cost_function, initial_params, method='COBYLA')
Recursos Adicionais
1---2name: qiskit3description: Kit de ferramentas abrangente de computação quântica para construir, otimizar e executar circuitos quânticos. Use quando trabalhar com algoritmos quânticos, simulações ou hardware quântico, incluindo (1) Construção de circuitos quânticos com portas e medições, (2) Execução de algoritmos quânticos (VQE, QAOA, Grover), (3) Transpilar/otimizar circuitos para hardware, (4) Executar em IBM Quantum ou outros provedores, (5) Química quântica e ciência dos materiais, (6) Aprendizado de máquina quântico, (7) Visualizar circuitos e resultados, ou (8) Qualquer tarefa de desenvolvimento de computação quântica.4---56# Qiskit78## Visão Geral910Qiskit é o framework de computação quântica de código aberto mais popular do mundo com 13M+ downloads. Construa circuitos quânticos, otimize para hardware, execute em simuladores ou em computadores quânticos reais, e analise resultados. Suporta IBM Quantum (sistemas com 100+ qubits), IonQ, Amazon Braket e outros provedores.1112**Principais Características:**13- Transpilar 83x mais rápido que concorrentes14- 29% menos portas de dois qubits em circuitos otimizados15- Execução agnóstica de backend (simuladores locais ou hardware em nuvem)16- Bibliotecas abrangentes de algoritmos para otimização, química e ML1718## Início Rápido1920### Instalação2122```bash23uv pip install qiskit24uv pip install "qiskit[visualization]" matplotlib25```2627### Primeiro Circuito2829```python30from qiskit import QuantumCircuit31from qiskit.primitives import StatevectorSampler3233# Cria estado Bell (qubits emaranhados)34qc = QuantumCircuit(2)35qc.h(0) # Hadamard no qubit 036qc.cx(0, 1) # CNOT do qubit 0 para 137qc.measure_all() # Mede ambos os qubits3839# Executa localmente40sampler = StatevectorSampler()41result = sampler.run([qc], shots=1024).result()42counts = result[0].data.meas.get_counts()43print(counts) # {'00': ~512, '11': ~512}44```4546### Visualização4748```python49from qiskit.visualization import plot_histogram5051qc.draw('mpl') # Diagrama do circuito52plot_histogram(counts) # Histograma de resultados53```5455## Capacidades Principais5657### 1. Configuração e Instalação58Para instalação detalhada, autenticação e configuração da conta IBM Quantum:59- **Veja `references/setup.md`**6061Tópicos cobertos:62- Instalação com uv63- Configuração de ambiente Python64- Configuração de conta IBM Quantum e token de API65- Execução local vs. em nuvem6667### 2. Construção de Circuitos Quânticos68Para construir circuitos quânticos com portas, medições e composição:69- **Veja `references/circuits.md`**7071Tópicos cobertos:72- Criação de circuitos com QuantumCircuit73- Portas de um qubit (H, X, Y, Z, rotações, portas de fase)74- Portas de múltiplos qubits (CNOT, SWAP, Toffoli)75- Medições e barreiras76- Composição de circuitos e propriedades77- Circuitos parametrizados para algoritmos variacionais7879### 3. Primitives (Sampler e Estimator)80Para executar circuitos quânticos e computar resultados:81- **Veja `references/primitives.md`**8283Tópicos cobertos:84- **Sampler**: Obtenha medições de bitstring e distribuições de probabilidade85- **Estimator**: Calcule valores esperados de observáveis86- Interface V2 (StatevectorSampler, StatevectorEstimator)87- Primitives do IBM Quantum Runtime para hardware88- Modos de Sessions e Batch89- Binding de parâmetros9091### 4. Transpiração e Otimização92Para otimizar circuitos e preparar para execução em hardware:93- **Veja `references/transpilation.md`**9495Tópicos cobertos:96- Por que a transpiração é necessária97- Níveis de otimização (0-3)98- Seis estágios de transpiração (init, layout, routing, translation, optimization, scheduling)99- Recursos avançados (virtual permutation elision, cancelamento de portas)100- Parâmetros comuns (initial_layout, approximation_degree, seed)101- Melhores práticas para circuitos eficientes102103### 5. Visualização104Para exibir circuitos, resultados e estados quânticos:105- **Veja `references/visualization.md`**106107Tópicos cobertos:108- Desenhos de circuitos (texto, matplotlib, LaTeX)109- Histogramas de resultados110- Visualização de estado quântico (esfera de Bloch, state city, QSphere)111- Topologia de backend e mapas de erro112- Customização e estilo113- Salvando figuras em qualidade de publicação114115### 6. Backends de Hardware116Para executar em simuladores e computadores quânticos reais:117- **Veja `references/backends.md`**118119Tópicos cobertos:120- Backends IBM Quantum e autenticação121- Propriedades e status de backends122- Execução em hardware real com primitives de Runtime123- Gerenciamento de trabalhos e fila124- Modo Session (algoritmos iterativos)125- Modo Batch (trabalhos paralelos)126- Simuladores locais (StatevectorSampler, Aer)127- Provedores de terceiros (IonQ, Amazon Braket)128- Estratégias de mitigação de erro129130### 7. Workflow Qiskit Patterns131Para implementar o workflow de computação quântica em quatro etapas:132- **Veja `references/patterns.md`**133134Tópicos cobertos:135- **Map**: Traduza problemas para circuitos quânticos136- **Optimize**: Transpilar para hardware137- **Execute**: Execute com primitives138- **Post-process**: Extraia e analise resultados139- Exemplo VQE completo140- Execução Session vs. Batch141- Padrões de workflow comuns142143### 8. Algoritmos e Aplicações Quânticas144Para implementar algoritmos quânticos específicos:145- **Veja `references/algorithms.md`**146147Tópicos cobertos:148- **Otimização**: VQE, QAOA, algoritmo de Grover149- **Química**: Estados fundamentais moleculares, estados excitados, Hamiltonianos150- **Aprendizado de Máquina**: Kernels quânticos, VQC, QNN151- **Bibliotecas de algoritmos**: Qiskit Nature, Qiskit ML, Qiskit Optimization152- Simulações de física e benchmarking153154## Guia de Decisão de Workflow155156**Se você precisa:**157158- Instalar Qiskit ou configurar conta IBM Quantum → `references/setup.md`159- Construir um novo circuito quântico → `references/circuits.md`160- Entender portas e operações de circuitos → `references/circuits.md`161- Executar circuitos e obter medições → `references/primitives.md`162- Calcular valores esperados → `references/primitives.md`163- Otimizar circuitos para hardware → `references/transpilation.md`164- Visualizar circuitos ou resultados → `references/visualization.md`165- Executar em hardware IBM Quantum → `references/backends.md`166- Conectar a provedores de terceiros → `references/backends.md`167- Implementar workflow quântico ponta a ponta → `references/patterns.md`168- Construir algoritmo específico (VQE, QAOA, etc.) → `references/algorithms.md`169- Resolver problemas de química ou otimização → `references/algorithms.md`170171## Melhores Práticas172173### Workflow de Desenvolvimento1741751. **Comece com simuladores**: Teste localmente antes de usar hardware176 ```python177 from qiskit.primitives import StatevectorSampler178 sampler = StatevectorSampler()179 ```1801812. **Sempre transpilar**: Otimize circuitos antes da execução182 ```python183 from qiskit import transpile184 qc_optimized = transpile(qc, backend=backend, optimization_level=3)185 ```1861873. **Use primitives apropriados**:188 - Sampler para bitstrings (algoritmos de otimização)189 - Estimator para valores esperados (química, física)1901914. **Escolha modo de execução**:192 - Session: Algoritmos iterativos (VQE, QAOA)193 - Batch: Trabalhos paralelos independentes194 - Trabalho único: Experimentos isolados195196### Otimização de Desempenho197198- Use optimization_level=3 para produção199- Minimize portas de dois qubits (fonte principal de erro)200- Teste com simuladores com ruído antes do hardware201- Salve e reutilize circuitos transpilados202- Monitore convergência em algoritmos variacionais203204### Execução em Hardware205206- Verifique status do backend antes de enviar207- Use least_busy() para testes208- Salve IDs de trabalhos para recuperação posterior209- Aplique mitigação de erro (resilience_level)210- Comece com menos shots, aumente para execuções finais211212## Padrões Comuns213214### Padrão 1: Execução Simples de Circuito215216```python217from qiskit import QuantumCircuit, transpile218from qiskit.primitives import StatevectorSampler219220qc = QuantumCircuit(2)221qc.h(0)222qc.cx(0, 1)223qc.measure_all()224225sampler = StatevectorSampler()226result = sampler.run([qc], shots=1024).result()227counts = result[0].data.meas.get_counts()228```229230### Padrão 2: Execução em Hardware com Transpiração231232```python233from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler234from qiskit import transpile235236service = QiskitRuntimeService()237backend = service.backend("ibm_brisbane")238239qc_optimized = transpile(qc, backend=backend, optimization_level=3)240241sampler = Sampler(backend)242job = sampler.run([qc_optimized], shots=1024)243result = job.result()244```245246### Padrão 3: Algoritmo Variacional (VQE)247248```python249from qiskit_ibm_runtime import Session, EstimatorV2 as Estimator250from scipy.optimize import minimize251252with Session(backend=backend) as session:253 estimator = Estimator(session=session)254255 def cost_function(params):256 bound_qc = ansatz.assign_parameters(params)257 qc_isa = transpile(bound_qc, backend=backend)258 result = estimator.run([(qc_isa, hamiltonian)]).result()259 return result[0].data.evs260261 result = minimize(cost_function, initial_params, method='COBYLA')262```263264## Recursos Adicionais265266- **Documentação Oficial**: https://quantum.ibm.com/docs267- **Qiskit Textbook**: https://qiskit.org/learn268- **Referência de API**: https://docs.quantum.ibm.com/api/qiskit269- **Guia de Patterns**: https://quantum.cloud.ibm.com/docs/en/guides/intro-to-patterns