PennyLane
Visão Geral
PennyLane é uma biblioteca de computação quântica que permite treinar computadores quânticos como redes neurais. Ela fornece diferenciação automática de circuitos quânticos, programação independente de dispositivo e integração perfeita com frameworks clássicos de aprendizado de máquina.
Instalação
Instale usando uv:
uv pip install pennylane
Para acesso a hardware quântico, instale plugins de dispositivos:
# IBM Quantum
uv pip install pennylane-qiskit
# Amazon Braket
uv pip install amazon-braket-pennylane-plugin
# Google Cirq
uv pip install pennylane-cirq
# Rigetti Forest
uv pip install pennylane-rigetti
# IonQ
uv pip install pennylane-ionq
Início Rápido
Construa um circuito quântico e otimize seus parâmetros:
import pennylane as qml
from pennylane import numpy as np
# Criar dispositivo
dev = qml.device('default.qubit', wires=2)
# Definir circuito quântico
@qml.qnode(dev)
def circuit(params):
qml.RX(params[0], wires=0)
qml.RY(params[1], wires=1)
qml.CNOT(wires=[0, 1])
return qml.expval(qml.PauliZ(0))
# Otimizar parâmetros
opt = qml.GradientDescentOptimizer(stepsize=0.1)
params = np.array([0.1, 0.2], requires_grad=True)
for i in range(100):
params = opt.step(circuit, params)
Capacidades Principais
1. Construção de Circuitos Quânticos
Construa circuitos com portas, medições e preparação de estado. Consulte references/quantum_circuits.md para:
- Portas de um e múltiplos qubits
- Operações controladas e lógica condicional
- Medições mid-circuit e circuitos adaptativos
- Vários tipos de medição (expectativa, probabilidade, amostras)
- Inspeção e depuração de circuitos
2. Aprendizado de Máquina Quântico
Crie modelos híbridos quântico-clássicos. Consulte references/quantum_ml.md para:
- Integração com PyTorch, JAX, TensorFlow
- Redes neurais quânticas e classificadores variacionais
- Estratégias de codificação de dados (ângulo, amplitude, base, IQP)
- Treinamento de modelos híbridos com retropropagação
- Transfer learning com circuitos quânticos
3. Química Quântica
Simule moléculas e compute energias do estado fundamental. Consulte references/quantum_chemistry.md para:
- Geração de Hamiltoniano molecular
- Variational Quantum Eigensolver (VQE)
- Ansatz UCCSD para química
- Otimização de geometria e curvas de dissociação
- Cálculos de propriedades moleculares
4. Gerenciamento de Dispositivos
Execute em simuladores ou hardware quântico. Consulte references/devices_backends.md para:
- Simuladores integrados (default.qubit, lightning.qubit, default.mixed)
- Plugins de hardware (IBM, Amazon Braket, Google, Rigetti, IonQ)
- Seleção e configuração de dispositivos
- Otimização de desempenho e cache
- Aceleração por GPU e compilação JIT
5. Otimização
Treine circuitos quânticos com vários otimizadores. Consulte references/optimization.md para:
- Otimizadores integrados (Adam, descida de gradiente, momentum, RMSProp)
- Métodos de computação de gradiente (backprop, parameter-shift, adjunto)
- Algoritmos variacionais (VQE, QAOA)
- Estratégias de treinamento (agendas de taxa de aprendizado, mini-lotes)
- Lidando com planaltos áridos e mínimos locais
6. Recursos Avançados
Aproveite templates, transformações e compilação. Consulte references/advanced_features.md para:
- Templates e camadas de circuito
- Transformações e otimização de circuitos
- Programação em nível de pulso
- Compilação JIT Catalyst
- Modelos de ruído e mitigação de erros
- Estimativa de recursos
Fluxos de Trabalho Comuns
Treinar um Classificador Variacional
# 1. Definir ansatz
@qml.qnode(dev)
def classifier(x, weights):
# Codificar dados
qml.AngleEmbedding(x, wires=range(4))
# Camadas variacionais
qml.StronglyEntanglingLayers(weights, wires=range(4))
return qml.expval(qml.PauliZ(0))
# 2. Treinar
opt = qml.AdamOptimizer(stepsize=0.01)
weights = np.random.random((3, 4, 3)) # 3 camadas, 4 wires
for epoch in range(100):
for x, y in zip(X_train, y_train):
weights = opt.step(lambda w: (classifier(x, w) - y)**2, weights)
Executar VQE para Estado Fundamental Molecular
from pennylane import qchem
# 1. Construir Hamiltoniano
symbols = ['H', 'H']
coords = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.74])
H, n_qubits = qchem.molecular_hamiltonian(symbols, coords)
# 2. Definir ansatz
@qml.qnode(dev)
def vqe_circuit(params):
qml.BasisState(qchem.hf_state(2, n_qubits), wires=range(n_qubits))
qml.UCCSD(params, wires=range(n_qubits))
return qml.expval(H)
# 3. Otimizar
opt = qml.AdamOptimizer(stepsize=0.1)
params = np.zeros(10, requires_grad=True)
for i in range(100):
params, energy = opt.step_and_cost(vqe_circuit, params)
print(f"Step {i}: Energy = {energy:.6f} Ha")
Alternar Entre Dispositivos
# Mesmo circuito, diferentes backends
circuit_def = lambda dev: qml.qnode(dev)(circuit_function)
# Testar em simulador
dev_sim = qml.device('default.qubit', wires=4)
result_sim = circuit_def(dev_sim)(params)
# Executar em hardware quântico
dev_hw = qml.device('qiskit.ibmq', wires=4, backend='ibmq_manila')
result_hw = circuit_def(dev_hw)(params)
Documentação Detalhada
Para cobertura abrangente de tópicos específicos, consulte os arquivos de referência:
- Primeiros passos:
references/getting_started.md - Instalação, conceitos básicos, primeiros passos
- Circuitos quânticos:
references/quantum_circuits.md - Portas, medições, padrões de circuito
- ML quântico:
references/quantum_ml.md - Modelos híbridos, integração de frameworks, QNNs
- Química quântica:
references/quantum_chemistry.md - VQE, Hamiltonianos moleculares, fluxos de química
- Dispositivos:
references/devices_backends.md - Simuladores, plugins de hardware, configuração de dispositivos
- Otimização:
references/optimization.md - Otimizadores, gradientes, algoritmos variacionais
- Avançado:
references/advanced_features.md - Templates, transformações, compilação JIT, ruído
Melhores Práticas
- Comece com simuladores - Teste em
default.qubit antes de implantar em hardware
- Use parameter-shift para hardware - Retropropagação funciona apenas em simuladores
- Escolha codificações apropriadas - Combine codificação de dados com estrutura do problema
- Inicialize com cuidado - Use pequenos valores aleatórios para evitar planaltos áridos
- Monitore gradientes - Verifique se há gradientes desaparecendo em circuitos profundos
- Cache de dispositivos - Reutilize objetos de dispositivo para reduzir sobrecarga de inicialização
- Analise circuitos - Use
qml.specs() para analisar complexidade do circuito
- Teste localmente - Valide em simuladores antes de enviar para hardware
- Use templates - Aproveite templates integrados para padrões de circuito comuns
- Compile quando possível - Use Catalyst JIT para código crítico de desempenho
Recursos
1---2name: pennylane3description: Biblioteca Python multiplataforma para computação quântica, aprendizado de máquina quântico e química quântica. Permite construir e treinar circuitos quânticos com diferenciação automática, integração perfeita com PyTorch/JAX/TensorFlow e execução independente de dispositivo em simuladores e hardware quântico (IBM, Amazon Braket, Google, Rigetti, IonQ, etc.). Use ao trabalhar com circuitos quânticos, algoritmos quânticos variacionais (VQE, QAOA), redes neurais quânticas, modelos híbridos quântico-clássicos, simulações moleculares, cálculos de química quântica ou qualquer tarefa de computação quântica que exija otimização baseada em gradiente, programação agnóstica a hardware ou fluxos de trabalho de aprendizado de máquina quântico.4---56# PennyLane78## Visão Geral910PennyLane é uma biblioteca de computação quântica que permite treinar computadores quânticos como redes neurais. Ela fornece diferenciação automática de circuitos quânticos, programação independente de dispositivo e integração perfeita com frameworks clássicos de aprendizado de máquina.1112## Instalação1314Instale usando uv:1516```bash17uv pip install pennylane18```1920Para acesso a hardware quântico, instale plugins de dispositivos:2122```bash23# IBM Quantum24uv pip install pennylane-qiskit2526# Amazon Braket27uv pip install amazon-braket-pennylane-plugin2829# Google Cirq30uv pip install pennylane-cirq3132# Rigetti Forest33uv pip install pennylane-rigetti3435# IonQ36uv pip install pennylane-ionq37```3839## Início Rápido4041Construa um circuito quântico e otimize seus parâmetros:4243```python44import pennylane as qml45from pennylane import numpy as np4647# Criar dispositivo48dev = qml.device('default.qubit', wires=2)4950# Definir circuito quântico51@qml.qnode(dev)52def circuit(params):53 qml.RX(params[0], wires=0)54 qml.RY(params[1], wires=1)55 qml.CNOT(wires=[0, 1])56 return qml.expval(qml.PauliZ(0))5758# Otimizar parâmetros59opt = qml.GradientDescentOptimizer(stepsize=0.1)60params = np.array([0.1, 0.2], requires_grad=True)6162for i in range(100):63 params = opt.step(circuit, params)64```6566## Capacidades Principais6768### 1. Construção de Circuitos Quânticos6970Construa circuitos com portas, medições e preparação de estado. Consulte `references/quantum_circuits.md` para:71- Portas de um e múltiplos qubits72- Operações controladas e lógica condicional73- Medições mid-circuit e circuitos adaptativos74- Vários tipos de medição (expectativa, probabilidade, amostras)75- Inspeção e depuração de circuitos7677### 2. Aprendizado de Máquina Quântico7879Crie modelos híbridos quântico-clássicos. Consulte `references/quantum_ml.md` para:80- Integração com PyTorch, JAX, TensorFlow81- Redes neurais quânticas e classificadores variacionais82- Estratégias de codificação de dados (ângulo, amplitude, base, IQP)83- Treinamento de modelos híbridos com retropropagação84- Transfer learning com circuitos quânticos8586### 3. Química Quântica8788Simule moléculas e compute energias do estado fundamental. Consulte `references/quantum_chemistry.md` para:89- Geração de Hamiltoniano molecular90- Variational Quantum Eigensolver (VQE)91- Ansatz UCCSD para química92- Otimização de geometria e curvas de dissociação93- Cálculos de propriedades moleculares9495### 4. Gerenciamento de Dispositivos9697Execute em simuladores ou hardware quântico. Consulte `references/devices_backends.md` para:98- Simuladores integrados (default.qubit, lightning.qubit, default.mixed)99- Plugins de hardware (IBM, Amazon Braket, Google, Rigetti, IonQ)100- Seleção e configuração de dispositivos101- Otimização de desempenho e cache102- Aceleração por GPU e compilação JIT103104### 5. Otimização105106Treine circuitos quânticos com vários otimizadores. Consulte `references/optimization.md` para:107- Otimizadores integrados (Adam, descida de gradiente, momentum, RMSProp)108- Métodos de computação de gradiente (backprop, parameter-shift, adjunto)109- Algoritmos variacionais (VQE, QAOA)110- Estratégias de treinamento (agendas de taxa de aprendizado, mini-lotes)111- Lidando com planaltos áridos e mínimos locais112113### 6. Recursos Avançados114115Aproveite templates, transformações e compilação. Consulte `references/advanced_features.md` para:116- Templates e camadas de circuito117- Transformações e otimização de circuitos118- Programação em nível de pulso119- Compilação JIT Catalyst120- Modelos de ruído e mitigação de erros121- Estimativa de recursos122123## Fluxos de Trabalho Comuns124125### Treinar um Classificador Variacional126127```python128# 1. Definir ansatz129@qml.qnode(dev)130def classifier(x, weights):131 # Codificar dados132 qml.AngleEmbedding(x, wires=range(4))133134 # Camadas variacionais135 qml.StronglyEntanglingLayers(weights, wires=range(4))136137 return qml.expval(qml.PauliZ(0))138139# 2. Treinar140opt = qml.AdamOptimizer(stepsize=0.01)141weights = np.random.random((3, 4, 3)) # 3 camadas, 4 wires142143for epoch in range(100):144 for x, y in zip(X_train, y_train):145 weights = opt.step(lambda w: (classifier(x, w) - y)**2, weights)146```147148### Executar VQE para Estado Fundamental Molecular149150```python151from pennylane import qchem152153# 1. Construir Hamiltoniano154symbols = ['H', 'H']155coords = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.74])156H, n_qubits = qchem.molecular_hamiltonian(symbols, coords)157158# 2. Definir ansatz159@qml.qnode(dev)160def vqe_circuit(params):161 qml.BasisState(qchem.hf_state(2, n_qubits), wires=range(n_qubits))162 qml.UCCSD(params, wires=range(n_qubits))163 return qml.expval(H)164165# 3. Otimizar166opt = qml.AdamOptimizer(stepsize=0.1)167params = np.zeros(10, requires_grad=True)168169for i in range(100):170 params, energy = opt.step_and_cost(vqe_circuit, params)171 print(f"Step {i}: Energy = {energy:.6f} Ha")172```173174### Alternar Entre Dispositivos175176```python177# Mesmo circuito, diferentes backends178circuit_def = lambda dev: qml.qnode(dev)(circuit_function)179180# Testar em simulador181dev_sim = qml.device('default.qubit', wires=4)182result_sim = circuit_def(dev_sim)(params)183184# Executar em hardware quântico185dev_hw = qml.device('qiskit.ibmq', wires=4, backend='ibmq_manila')186result_hw = circuit_def(dev_hw)(params)187```188189## Documentação Detalhada190191Para cobertura abrangente de tópicos específicos, consulte os arquivos de referência:192193- **Primeiros passos**: `references/getting_started.md` - Instalação, conceitos básicos, primeiros passos194- **Circuitos quânticos**: `references/quantum_circuits.md` - Portas, medições, padrões de circuito195- **ML quântico**: `references/quantum_ml.md` - Modelos híbridos, integração de frameworks, QNNs196- **Química quântica**: `references/quantum_chemistry.md` - VQE, Hamiltonianos moleculares, fluxos de química197- **Dispositivos**: `references/devices_backends.md` - Simuladores, plugins de hardware, configuração de dispositivos198- **Otimização**: `references/optimization.md` - Otimizadores, gradientes, algoritmos variacionais199- **Avançado**: `references/advanced_features.md` - Templates, transformações, compilação JIT, ruído200201## Melhores Práticas2022031. **Comece com simuladores** - Teste em `default.qubit` antes de implantar em hardware2042. **Use parameter-shift para hardware** - Retropropagação funciona apenas em simuladores2053. **Escolha codificações apropriadas** - Combine codificação de dados com estrutura do problema2064. **Inicialize com cuidado** - Use pequenos valores aleatórios para evitar planaltos áridos2075. **Monitore gradientes** - Verifique se há gradientes desaparecendo em circuitos profundos2086. **Cache de dispositivos** - Reutilize objetos de dispositivo para reduzir sobrecarga de inicialização2097. **Analise circuitos** - Use `qml.specs()` para analisar complexidade do circuito2108. **Teste localmente** - Valide em simuladores antes de enviar para hardware2119. **Use templates** - Aproveite templates integrados para padrões de circuito comuns21210. **Compile quando possível** - Use Catalyst JIT para código crítico de desempenho213214## Recursos215216- Documentação oficial: https://docs.pennylane.ai217- Codebook (tutoriais): https://pennylane.ai/codebook218- Demonstrações QML: https://pennylane.ai/qml/demonstrations219- Fórum da comunidade: https://discuss.pennylane.ai220- GitHub: https://github.com/PennyLaneAI/pennylane