[ PROMPT_NODE_26984 ]
advanced_features
[ SKILL_DOCUMENTATION ]
# PennyLane 高级功能
## 目录
1. [模板与层](#templates-and-layers)
2. [变换](#transforms)
3. [脉冲编程](#pulse-programming)
4. [Catalyst 与 JIT 编译](#catalyst-and-jit-compilation)
5. [自适应电路](#adaptive-circuits)
6. [噪声模型](#noise-models)
7. [资源评估](#resource-estimation)
## 模板与层
### 内置模板
python
import pennylane as qml
from pennylane.templates import *
from pennylane import numpy as np
dev = qml.device('default.qubit', wires=4)
# 强纠缠层
@qml.qnode(dev)
def circuit_sel(weights):
StronglyEntanglingLayers(weights, wires=range(4))
return qml.expval(qml.PauliZ(0))
# 生成形状合适的权重
n_layers = 3
n_wires = 4
shape = StronglyEntanglingLayers.shape(n_layers, n_wires)
weights = np.random.random(shape)
result = circuit_sel(weights)
### 基本纠缠层
python
@qml.qnode(dev)
def circuit_bel(weights):
# 简单的纠缠层
BasicEntanglerLayers(weights, wires=range(4))
return qml.expval(qml.PauliZ(0))
n_layers = 2
weights = np.random.random((n_layers, 4))
### 随机层
python
@qml.qnode(dev)
def circuit_random(weights):
# 随机电路结构
RandomLayers(weights, wires=range(4))
return qml.expval(qml.PauliZ(0))
n_layers = 5
weights = np.random.random((n_layers, 4))
### 简化双设计 (Simplified Two Design)
python
@qml.qnode(dev)
def circuit_s2d(weights):
# 简化双设计
SimplifiedTwoDesign(initial_layer_weights=weights[0],
weights=weights[1:],
wires=range(4))
return qml.expval(qml.PauliZ(0))
### 粒子守恒层
python
@qml.qnode(dev)
def circuit_particle_conserving(weights):
# 保持粒子数(对化学计算很有用)
ParticleConservingU1(weights, wires=range(4))
return qml.expval(qml.PauliZ(0))
shape = ParticleConservingU1.shape(n_layers=2, n_wires=4)
weights = np.random.random(shape)
### 嵌入模板
python
# 角度嵌入
@qml.qnode(dev)
def angle_embed(features):
AngleEmbedding(features, wires=range(4))
return qml.expval(qml.PauliZ(0))
features = np.array([0.1, 0.2, 0.3, 0.4])
# 幅度嵌入
@qml.qnode(dev)
def amplitude_embed(features):
AmplitudeEmbedding(features, wires=range(2), normalize=True)
return qml.expval(qml.PauliZ(0))
features = np.array([0.5, 0.5, 0.5, 0.5])
# IQP 嵌入