电路优化#
Janus 提供完整的量子电路优化框架,包含 10 种优化技术。
快速开始#
智能优化(推荐)
from janus.optimize import smart_optimize
# 创建电路
qc = Circuit.from_layers([
[{'name': 'h', 'qubits': [0], 'params': []}],
[{'name': 'h', 'qubits': [0], 'params': []}], # 冗余
[{'name': 't', 'qubits': [0], 'params': []}],
[{'name': 't', 'qubits': [0], 'params': []}], # 可合并
], n_qubits=2)
# 智能优化(自动选择最优策略)
qc_opt = smart_optimize(qc, level=2, verbose=True)
基本编译
from janus.compiler import compile_circuit
optimized = compile_circuit(qc, optimization_level=2)
优化级别#
级别 |
内容 |
|---|---|
0 |
无优化 |
1 |
基础优化(逆门消除) |
2 |
标准优化(T门合并 + Clifford合并 + 交换性消除) |
3 |
完整优化(所有技术) |
十大优化技术#
Janus 提供统一 API 访问所有优化技术:
from janus.optimize import (
optimize_clifford_rz, # 技术1: Clifford+RZ优化
optimize_gate_fusion, # 技术2: 门融合优化
optimize_commutativity, # 技术3: 交换性优化
optimize_template, # 技术4: 模板匹配优化
optimize_kak, # 技术5: KAK分解优化
optimize_clifford_synth, # 技术6: Clifford合成优化
optimize_cnot_synth, # 技术7: CNOT合成优化
run_benchmark, # 技术8: 基准测试
analyze_circuit, # 技术9: 电路分析
smart_optimize, # 技术10: 智能优化
)
技术1: Clifford+RZ 优化#
将电路分解为 Clifford 门和 RZ 旋转门,优化 T 门数量。
T门合并规则: T+T→S, T+T+T+T→Z
适用于容错量子计算电路
from janus.optimize import optimize_clifford_rz
qc_opt = optimize_clifford_rz(
qc,
enable_t_merge=True, # T门合并
enable_clifford_merge=True, # Clifford门合并
enable_inverse_cancel=True, # 逆门消除
verbose=True
)
技术2: 门融合优化#
将连续的单量子比特门融合为一个等价门。
from janus.optimize import optimize_gate_fusion
qc_opt = optimize_gate_fusion(
qc,
enable_rotation_merge=True, # 旋转门合并
enable_single_qubit_opt=True, # 单比特门优化
enable_block_consolidate=False, # 块合并(较慢)
verbose=True
)
技术3: 交换性优化#
利用量子门的交换性重新排列门顺序,消除冗余门。
自伴门消除: H·H=I, X·X=I, CX·CX=I
互逆门消除: T·Tdg=I, S·Sdg=I
from janus.optimize import optimize_commutativity
qc_opt = optimize_commutativity(
qc,
enable_commutative_cancel=True, # 交换性消除
enable_inverse_cancel=True, # 逆门消除
enable_commutative_inverse=True, # 交换性逆门消除
verbose=True
)
技术4: 模板匹配优化#
识别电路中的已知模式,用更优的等价电路替换。
from janus.optimize import optimize_template
qc_opt = optimize_template(
qc,
enable_template_match=True, # 模板匹配
enable_inverse_cancel=True, # 逆门消除
template_list=None, # 自定义模板(可选)
verbose=True
)
备注
模板匹配在大电路(>100门)上较慢,会自动跳过。
技术5: KAK 分解优化#
使用 Khaneja-Glaser (KAK) 分解优化任意双量子比特门。
from janus.optimize import optimize_kak
qc_opt = optimize_kak(
qc,
enable_block_collect=True, # 两比特块收集
enable_block_consolidate=True, # 块合并
basis_gate='cx', # 基础门: 'cx', 'cz', 'iswap'
verbose=True
)
技术6: Clifford 合成优化#
优化 Clifford 门电路的合成。
from janus.optimize import optimize_clifford_synth
qc_opt = optimize_clifford_synth(
qc,
method='greedy', # 'greedy', 'bravyi_maslov', 'ag', 'depth_lnn'
verbose=True
)
技术7: CNOT 合成优化#
优化 CNOT 门网络,减少 CNOT 门数量。
from janus.optimize import optimize_cnot_synth
qc_opt = optimize_cnot_synth(
qc,
method='pmh', # 'pmh', 'lnn_kms', 'phase_aam'
verbose=True
)
技术8: 基准测试#
对电路进行多级别优化测试,评估优化效果。
from janus.optimize import run_benchmark
results = run_benchmark(
qc,
optimization_levels=[0, 1, 2, 3],
verbose=True
)
# 查看结果
for level, stats in results['levels'].items():
print(f"Level {level}: {stats['size']}门, 减少{stats['reduction']:.1f}%")
技术9: 电路分析#
收集和分析电路的详细指标。
from janus.optimize import analyze_circuit
metrics = analyze_circuit(qc, verbose=True)
print(f"门数: {metrics['size']}")
print(f"深度: {metrics['depth']}")
print(f"宽度: {metrics['width']}")
print(f"门统计: {metrics['ops']}")
print(f"单比特门: {metrics['n_single_qubit']}")
print(f"两比特门: {metrics['n_two_qubit']}")
技术10: 智能优化#
自动分析电路特征,智能选择最优的优化技术组合。
from janus.optimize import smart_optimize
# 自动检测电路类型并优化
qc_opt = smart_optimize(qc, level=2, verbose=True)
# 强制使用特定策略
qc_opt = smart_optimize(
qc,
strategy='t_heavy', # 't_heavy', 'rotation_heavy', 'clifford_heavy', 'cx_heavy', 'mixed'
verbose=True
)
SmartOptimizer 类
from janus.optimize import SmartOptimizer, analyze_and_optimize
# 使用优化器类
optimizer = SmartOptimizer(verbose=True)
qc_opt = optimizer.optimize(qc)
# 带详细报告的优化
report = analyze_and_optimize(qc, verbose=True)
print(f"策略: {report['strategy']}")
print(f"门数减少: {report['improvements']['gate_reduction']:.1f}%")
print(f"深度减少: {report['improvements']['depth_reduction']:.1f}%")
底层 Pass 类#
如需更精细的控制,可以直接使用底层 Pass 类:
Clifford+RZ 优化 Pass
from janus.optimize import (
TChinMerger, # T门合并
CliffordMerger, # Clifford门合并
CollectCliffords, # Clifford门收集
LitinskiTransformation # Litinski变换
)
门融合 Pass
from janus.optimize import (
ConsolidateBlocks, # 块合并
Optimize1qGates, # 单比特门优化
Collect1qRuns, # 单比特门序列收集
Collect2qBlocks, # 两比特块收集
Split2QUnitaries # 两比特酉矩阵分解
)
交换性优化 Pass
from janus.optimize import (
CommutativeCancellation, # 交换性消除
InverseCancellation, # 逆门消除
CommutativeInverseCancellation, # 交换性逆门消除
CommutationAnalysis # 交换性分析
)
模板匹配 Pass
from janus.optimize import (
TemplateOptimization, # 模板优化
TemplateMatching, # 模板匹配
TemplateSubstitution # 模板替换
)
分析 Pass
from janus.optimize import (
Depth, # 深度分析
Width, # 宽度分析
Size, # 大小分析
CountOps, # 门统计
ResourceEstimation # 资源估算
)
合成算法#
KAK 分解
from janus.optimize import (
TwoQubitWeylDecomposition, # Weyl分解
TwoQubitBasisDecomposer, # 基础门分解
two_qubit_cnot_decompose # CNOT分解
)
Clifford 合成
from janus.optimize import (
synthesize_clifford_circuit,
synthesize_clifford_greedy,
synthesize_clifford_bravyi_maslov,
synthesize_clifford_depth_lnn
)
CNOT 合成
from janus.optimize import (
synthesize_cnot_count_pmh,
synthesize_cnot_depth_lnn_kms,
synthesize_cnot_phase_aam
)
自定义优化流程#
from janus.circuit import circuit_to_dag, dag_to_circuit
from janus.optimize import (
TChinMerger, CliffordMerger,
InverseCancellation, CommutativeCancellation
)
# 转换为 DAG
dag = circuit_to_dag(qc)
# 依次应用优化 Pass
dag = TChinMerger().run(dag)
dag = CliffordMerger().run(dag)
dag = InverseCancellation().run(dag)
dag = CommutativeCancellation().run(dag)
# 转回电路
qc_opt = dag_to_circuit(dag)
完整示例#
from janus.circuit import Circuit
from janus.optimize import smart_optimize, analyze_circuit
import numpy as np
# 创建一个有冗余的电路
qc = Circuit.from_layers([
[{'name': 'h', 'qubits': [0], 'params': []}],
[{'name': 'h', 'qubits': [0], 'params': []}], # H·H = I
[{'name': 't', 'qubits': [0], 'params': []}],
[{'name': 't', 'qubits': [0], 'params': []}], # T·T = S
[{'name': 'cx', 'qubits': [0, 1], 'params': []}],
[{'name': 'cx', 'qubits': [0, 1], 'params': []}], # CX·CX = I
[{'name': 'rz', 'qubits': [1], 'params': [0.5]}],
[{'name': 'rz', 'qubits': [1], 'params': [0.5]}], # 可合并
], n_qubits=2)
print("=== 优化前 ===")
before = analyze_circuit(qc)
print(f"门数: {before['size']}, 深度: {before['depth']}")
# 智能优化
qc_opt = smart_optimize(qc, level=2, verbose=True)
print("\n=== 优化后 ===")
after = analyze_circuit(qc_opt)
print(f"门数: {after['size']}, 深度: {after['depth']}")
print(f"减少: {before['size'] - after['size']} 门")