量子体积
简介
量子体积(Quantum Volume)[1],是一个用于评估量子计算系统性能的协议。它表示可以在系统上执行的最大等宽度深度的随机线路。量子计算系统的操作保真度越高,关联性越高,有越大的校准过的门操作集合便会有越高的量子体积。量子体积与系统的整体性能相关联,即与系统的整体错误率,潜在的物理比特关联和门操作并行度相联系。总的来说,量子体积是一个用于近期整体评估量子计算系统的一个实用方法,数值越高,系统整体错误率就越低,性能就越好。
测量量子体积的标准做法就是对系统使用规定的量子线路模型执行随机的线路操作,尽可能地将比特纠缠在一起,然后再将实验得到的结果与模拟的结果进行比较。按要求分析统计结果。
量子体积被定义为指数形式:
其中n表示在给定比特数目m(m大于n)和完成计算任务的条件下,系统操作的最大逻辑深度,如果芯片能执行的最大逻辑深度n大于比特数m,那么系统的量子体积就是
接口说明
- calculate_quantum_volume(config: QCloudTaskConfig, qubit_list: List[List[int]], ntrials: int) int
此函数用于计算量子体积。
- 参数:
config (QCloudTaskConfig) -- QCloudTaskConfig 对象,表示云量子任务的配置。
qubit_list (List[List[int]]) -- 包含量子比特索引的列表,用于定义量子电路的结构。
ntrials (int) -- 执行量子体积计算的实验次数。
- 返回:
计算得到的量子体积。
- 返回类型:
int
- 抛出:
run_fail -- 计算量子体积失败。
实例
from pyqpanda import *
if __name__=="__main__":
#构建待测量的量子比特组合, 这里比特组合为2组,其中 量子比特31、31为一组;量子比特0,6,12为一组
qubit_lists = [[31, 32], [0, 6, 12]]
#设置随机迭代次数
ntrials = 10
#设置用户真实apikey,需要确保有足够算力资源
online_api_key = "XXX"
#配置量子计算任务参数
config = QCloudTaskConfig()
config.cloud_token = online_api_key
config.chip_id = origin_72
config.open_amend = False
config.open_mapping = False
config.open_optimization = False
config.shots = 1000
qv_result = calculate_quantum_volume(config, qubit_lists, ntrials)
print("Quantum Volume : ", qv_result)
#运行结果:
# Quantum Volume : 4
参考文献
[1] Andrew W. Cross, Lev S. Bishop, Sarah Sheldon, Paul D. Nation, and Jay M. Gambetta, Validating quantum computers using randomized model circuits, Phys. Rev. A 100, 032328 (2019). https://arxiv.org/pdf/1811.12926
随机基准
简介
随机基准测试(Randomized Benchmarking,RB)是量子计算中一种用于量子门性能评估的实验技术。它用于测量量子门的错误率,提供了关于量子计算系统的噪声水平和稳定性的信息。RB 是一种广泛使用的方法,用于评估量子设备的可靠性和错误率。
算法流程
在随机基准测试中,主要思想是通过对随机序列的一系列量子门操作进行测量,来评估量子门的错误率。这些随机序列的特点是它们会趋向于互相抵消,从而减少系统噪声的影响。通过比较实际测量结果和理论预期,可以估计出量子门的错误率。
实验过程如下:
生成随机序列:生成一系列随机的量子门序列,这些序列涵盖了不同的量子门操作和顺序。
实验操作:在量子设备上依次执行生成的随机序列。
测量结果:对每个随机序列,测量量子比特的状态,并记录测量结果。
1,2,3步的具体操作如下:
1,2,3步的具体操作
在Clifford群中随机需求m个门,构成一个序列; 计算该序列的等效 \(U\) 操作,该操作的逆 \(\mathrm{U}^{-1}\) 一定也在Clifford群中,将 \(\mathrm{U}^{-1}\) 添加到序列中作为第m+1个元素,构成一个完整的序列; 测量量子比特在该序列操作之后的0态(初态在0态)保真度 \(y_{mk}\) 。
分析:通过比较预期测量结果和实际测量结果,可以得出量子门的错误率。通常使用指数递减模型来分析错误率。
错误率估计:通过分析获得的数据,可以估计出不同量子门的平均错误率。
4,5步的具体操作
计算序列长度为m时的平均保真度 \(y_m=\frac{1}{K} \sum_1^K y_{m k}\) , 得到序列平均保真度y和序列长度m的关系,并用公式下面拟合:
\[\begin{aligned} y=A * p^m+B \end{aligned}\]门操作平均错误率 \(r_c\) 与拟合参数𝑝的关系:
\[\begin{aligned} r_c=(1-p) *\left(2^n-1\right) / 2^n \end{aligned}\]
随着Clifford门数量的增加,门序列的平均成功概率会下降,因为当重复应用包含错误的量子门时,整个门序列的错误概率会单调增加,在 RB 中,通常假设不同Clifford的噪声超算子相等,在此假设下,门序列的平均成功概率已被证明随Clifford门的数量呈指数衰减。
接口说明
1.单门随机基准测试: single_qubit_rb
。
- single_qubit_rb(config: QCloudTaskConfig, qubit: int, clifford_range: List[int], num_circuits: int, interleaved_gates: List[QGate] = []) Dict[int, float]
此函数用于执行单比特随机电路基准(Single Qubit Randomized Benchmarking)实验。
- 参数:
config (QCloudTaskConfig) -- QCloudTaskConfig 对象,表示云量子任务的配置。
qubit (int) -- 单比特量子比特索引。
clifford_range (List[int]) -- 包含 Clifford 门的序列长度范围的列表,用于指定不同长度的 Clifford 门序列。
num_circuits (int) -- 要执行的电路数量。
interleaved_gates (List[QGate], optional) -- 包含插入在 Clifford 门序列中的额外门的列表,默认为空列表。
- 返回:
包含单比特随机电路基准实验结果的字典,其中键是 Clifford 门序列长度,值是误差概率。
- 返回类型:
Dict[int,float]
- 抛出:
run_fail -- 执行单比特随机电路基准实验失败。
2.双门随机基准测试: double_qubit_rb
。
- double_qubit_rb(config: QCloudTaskConfig, qubit0: int, qubit1: int, clifford_range: List[int], num_circuits: int, interleaved_gates: List[QGate] = []) Dict[int, float]
此函数用于执行双比特随机电路基准(Double Qubit Randomized Benchmarking)实验。
- 参数:
config (QCloudTaskConfig) -- QCloudTaskConfig 对象,表示云量子任务的配置。
qubit0 (int) -- 双比特第一个量子比特索引。
qubit1 (int) -- 双比特第二个量子比特索引。
clifford_range (List[int]) -- 包含 Clifford 门的序列长度范围的列表,用于指定不同长度的 Clifford 门序列。
num_circuits (int) -- 要执行的电路数量。
interleaved_gates (List[QGate], optional) -- 包含插入在 Clifford 门序列中的额外门的列表,默认为空列表。
- 返回:
包含双比特随机电路基准实验结果的字典,其中键是 Clifford 门序列长度,值是误差概率。
- 返回类型:
Dict[int,float]
- 抛出:
run_fail -- 执行双比特随机电路基准实验失败。
实例
from pyqpanda import *
if __name__=="__main__":
# 设置随机线路中clifford门集数量
range = [ 5,10,15 ]
#设置用户真实apikey,需要确保有足够算力资源
online_api_key = "XXX"
#配置量子计算任务参数
config = QCloudTaskConfig()
config.cloud_token = online_api_key
config.chip_id = origin_72
config.open_amend = False
config.open_mapping = False
config.open_optimization = False
config.shots = 1000
#测量单比特随机基准
single_rb_result = single_qubit_rb(config, 0, range, 20)
#同样可以测量两比特随机基准
double_rb_result = double_qubit_rb(config, 0, 1, range, 20)
#对应的数值随设备噪声影响,噪声数值越大,所得结果越小,且随clifford门集数量增多,结果数值越小。
print(single_rb_result)
print(double_rb_result)
#运行结果:
# {5: 0.464, 10: 0.4535, 15: 0.437}
# {5: 0.1675, 10: 0.20750000000000002, 15: 0.198}
参考文献
[1] Easwar Magesan, J. M. Gambetta, and Joseph Emerson, Robust randomized benchmarking of quantum processes, https://arxiv.org/abs/1009.3639.
[2] Easwar Magesan, Jay M. Gambetta, and Joseph Emerson, Characterizing Quantum Gates via Randomized Benchmarking, https://arxiv.org/abs/1109.6887.
交叉熵基准
简介
交叉熵基准测试(xeb)[1]是一种通过应用随机电路并测量观察到的位串测量值与从模拟获得的这些位串的预期概率之间的交叉熵来评估门性能的方法。
原理
XEB 实验收集了执行随机电路时受到噪声影响的数据。应用带有单元 U 的随机电路的效果被模拟为去极化通道。其结果是,初始状态 \(\left|\psi\right\rangle\) 映射到密度矩阵 \(\rho_U\) 如下
其中, \(\left|\psi_U\right\rangle = U\left|\psi\right\rangle\) , \(D\) 是希尔伯特空间的维度, \(I/D\) 是最大混合状态, \(f\) 是电路应用的保真度。 要使这一模型准确无误,我们需要一个 \(U\) 能扰乱错误的随机电路。在实践中,我们使用了一种特殊的电路范式,由随机单量子比特旋转与纠缠门交错组成。 这里引入能表示所有概率之和的观测值 \(O_U\) ,例如: \(O_U|x\rangle = p(x)|s\rangle\) ,对于任意的位字符串 \(x\) ,我们可以根据如下公式及进行推导:
其中 \(e_U\) 是理想概率的平方和。 \(u_U\) 是一个只取决于算子的归一化因子。由于该算子的定义中包含了真实概率,因此在这里会显示出来。
假设观测值 \(O_U\) 在计算基础中是对角线。则 \(O_U\) 在 \(\rho_U\) 上的期望值为
这个等式说明了 \(f\) 的估算方式,因为 \(Tr(\rho_U O_U)\) 可以根据实验数据估算,并且 \(\langle\psi_U|O_U|\psi_U\rangle 和 Tr(O_U/D)\) 可以通过计算求出。 让 \(e_U = \langle\psi_U|O_U|\psi_U\rangle, u_U = Tr(O_U/D)\) , 定义 \(m_U为Tr(\rho_U O_U)\) 的实验估计值。上述的表达式可以转化为以下的线性方程。
核心思想
交叉熵基准测试的核心思想是比较量子计算机在理论预期和实际运行中的行为之间的差异。具体而言,通过在理论上准备一系列特定的量子态并在量子计算机上执行相应的门操作,然后测量产生的量子态与预期状态之间的交叉熵,可以得出量子计算机的性能评估结果。交叉熵是一种在信息论中常用的度量,用于衡量两个概率分布之间的差异。
接口说明
- double_gate_xeb(config: QCloudTaskConfig, qubit0: int, qubit1: int, clifford_range: List[int], num_circuits: int, gate_type: GateType = GateType.CZ_GATE) Dict[int, float]
此函数用于执行双比特交叉熵基准(Double Gate XEB)实验。
- 参数:
config (QCloudTaskConfig) -- QCloudTaskConfig 对象,表示云量子任务的配置。
qubit0 (int) -- 双比特门的第一个量子比特索引。
qubit1 (int) -- 双比特门的第二个量子比特索引。
clifford_range (List[int]) -- 包含 Clifford 门的序列长度范围的列表,用于指定不同长度的 Clifford 门序列。
num_circuits (int) -- 要执行的电路数量。
gate_type (GateType, optional) -- 双比特门类型,默认为 CZ_GATE。
- 返回:
包含双比特门交叉熵基准实验结果的字典,其中键是 Clifford 门序列长度,值是误差概率。
- 返回类型:
Dict[int,float]
- 抛出:
run_fail -- 执行双比特门交叉熵基准实验失败。
实例
from pyqpanda import *
if __name__=="__main__":
# 设置不同层数组合
range = [2,4,6,8,10]
# 现在可测试双门类型主要为 CZ CNOT SWAP ISWAP SQISWAP
#设置用户真实apikey,需要确保有足够算力资源
online_api_key = "XXX"
#配置量子计算任务参数
config = QCloudTaskConfig()
config.cloud_token = online_api_key
config.chip_id = origin_72
config.open_amend = False
config.open_mapping = False
config.open_optimization = False
config.shots = 1000
res = double_gate_xeb(config, 0, 1, range, 20, GateType.CZ_GATE)
# 对应的数值随噪声影响,噪声数值越大,所得结果越小,且层数增多,结果数值越小。
参考文献
[1] Boixo, S., Isakov, S.V., Smelyanskiy, V.N. et al. Characterizing quantum supremacy in near-term devices. Nature Phys 14, 595–600 (2018). https://doi.org/10.1038/s41567-018-0124-x