[ PROMPT_NODE_26298 ]
experiments
[ SKILL_DOCUMENTATION ]
# 运行量子实验
本指南涵盖了量子实验的设计与执行,包括参数扫描、数据收集以及使用 ReCirq 框架。
## 实验设计
### 基础实验结构
python
import cirq
import numpy as np
import pandas as pd
class QuantumExperiment:
"""量子实验基类。"""
def __init__(self, qubits, simulator=None):
self.qubits = qubits
self.simulator = simulator or cirq.Simulator()
self.results = []
def build_circuit(self, **params):
"""根据给定参数构建电路。"""
raise NotImplementedError
def run(self, params_list, repetitions=1000):
"""使用参数扫描运行实验。"""
for params in params_list:
circuit = self.build_circuit(**params)
result = self.simulator.run(circuit, repetitions=repetitions)
self.results.append({
'params': params,
'result': result
})
return self.results
def analyze(self):
"""分析实验结果。"""
raise NotImplementedError
### 参数扫描
python
import sympy
# 定义参数
theta = sympy.Symbol('theta')
phi = sympy.Symbol('phi')
# 创建参数化电路
def parameterized_circuit(qubits, theta, phi):
return cirq.Circuit(
cirq.ry(theta)(qubits[0]),
cirq.rz(phi)(qubits[1]),
cirq.CNOT(qubits[0], qubits[1]),
cirq.measure(*qubits, key='result')
)
# 定义扫描
sweep = cirq.Product(
cirq.Linspace('theta', 0, np.pi, 20),
cirq.Linspace('phi', 0, 2*np.pi, 20)
)
# 运行扫描
circuit = parameterized_circuit(cirq.LineQubit.range(2), theta, phi)
results = cirq.Simulator().run_sweep(circuit, params=sweep, repetitions=1000)
### 数据收集
python
def collect_experiment_data(circuit, sweep, simulator, repetitions=1000):
"""收集并组织实验数据。"""
data = []
results = simulator.run_sweep(circuit, params=sweep, repetitions=repetitions)
for params, result in zip(sweep, results):
# 提取参数
param_dict = {k: v for k, v in params.param_dict.items()}
# 提取测量结果
counts = result.histogram(key='result')
# 以结构化格式存储
data.append({
**param_dict,
'counts': counts,
'total': repetitions
})
return pd.DataFrame(data)
# Co