mindquantum.algorithm.nisq.Transform

查看源文件
class mindquantum.algorithm.nisq.Transform(operator, n_qubits=None)[源代码]

将费米子或者玻色子进行转化的模块。 jordan_wigner , parity , bravyi_kitaev , bravyi_kitaev_tree , bravyi_kitaev_superfast 将会把 FermionOperator 转换为 QubitOperatorreversed_jordan_wigner 将会把 QubitOperator 转换为 FermionOperator

参数:
  • operator (Union[FermionOperator, QubitOperator]) - 需要进行转换的 FermionOperatorQubitOperator

  • n_qubits (int) - 输入算符的比特数。如果为 None , 系统将会自动数出比特数。默认值: None

样例:

>>> from mindquantum.core.operators import FermionOperator
>>> op1 = FermionOperator('1^')
>>> op1
1.0 [1^]
>>> op_transform = Transform(op1)
>>> from mindquantum.algorithm.nisq import Transform
>>> op_transform.jordan_wigner()
0.5 [Z0 X1] +
-0.5j [Z0 Y1]
>>> op_transform.parity()
0.5 [Z0 X1] +
-0.5j [Y1]
>>> op_transform.bravyi_kitaev()
0.5 [Z0 X1] +
-0.5j [Y1]
>>> op_transform.ternary_tree()
0.5 [X0 Z1] +
-0.5j [Y0 X2]
>>> op2 = FermionOperator('1^', 'a')
>>> Transform(op2).jordan_wigner()
0.5*a [Z0 X1] +
-0.5*I*a [Z0 Y1]
bravyi_kitaev()[源代码]

进行Bravyi-Kitaev变换。

Bravyi-Kitaev是介于Jordan-Wigner变换和parity变换之间的变换。也就是说,它平衡了占据的局部性和宇称信息,以提高模拟效率。在此方案中,量子比特存储一组 2x 轨道的宇称,其中 x0 。索引 j 的量子比特总是存储轨道 j 。对于偶数的 j ,这是它存储的唯一轨道。但对于奇数的 j ,它还存储索引小于 j 的一组相邻轨道。 对于占据态变换,我们遵循公式:

bi=[βn]i,jfj,

其中 βnN×N 维平方矩阵, N 是总量子数。量子比特的索引分为三个集合,宇称集、更新集和翻转集。这组量子比特的宇称与索引小于 j 的轨道集具有相同的宇称,因此我们将称这组量子比特索引为“宇称集” j ,或 P(j)

索引为 j 的更新集,或 U(j) 包含除序号为 j 的量子比特会被更新,当轨道 j 被占据时。 索引为 j 的翻转集,或 F(j) ,包含所有的BravyiKitaev量子比特,这些比特将决定量子比特 j 相对于轨道 j 来说是否有相同或者相反的宇称。

请参见论文中的一些详细解释 The Bravyi-Kitaev transformation for quantum computation of electronic structure

本方法基于 Fermionic quantum computationA New Data Structure for Cumulative Frequency Tables 实现。

返回:

QubitOperator,经过 bravyi_kitaev 变换的玻色子算符。

bravyi_kitaev_superfast()[源代码]

作用快速Bravyi-Kitaev变换。 基于 Bravyi-Kitaev Superfast simulation of fermions on a quantum computer 实现。

请注意,只有如下的厄米共轭算符才能进行转换。

C+p,qhp,qapaq+p,q,r,shp,q,r,sapaqaras

其中 C 是一个常数。

返回:

QubitOperator,经过快速bravyi_kitaev变换之后的玻色子算符。

jordan_wigner()[源代码]

应用Jordan-Wigner变换。Jordan-Wigner变换能够保留初始占据数的局域性,并按照如下的形式将费米子转化为玻色子。

ajσjXi=0j1σiZajσj+Xi=0j1σiZ,

其中 σ+=σX+iσYσ=σXiσY 分别是自旋升算符和降算符。

返回:

QubitOperator,Jordan-Wigner变换后的量子比特算符。

parity()[源代码]

应用宇称变换。宇称变换保存初始占据数的非局域性。公式为:

|fM1,fM2,,f0|qM1,qM2,,q0,

其中

qm=|(i=0m1fi)mod 2

该公式可以写成这样,

pi=[πn]i,jfj,

其中 πnN×N 维的方矩阵, N 是总量子比特数。运算按照如下等式进行:

aj12(i=j+1N(σiXX))(σjXiσjY)Xσj1Zaj12(i=j+1N(σiXX))(σjX+iσjY)Xσj1Z
返回:

QubitOperator,经过宇称变换后的玻色子算符。

reversed_jordan_wigner()[源代码]

应用Jordan-Wigner逆变换。

返回:

FermionOperator,Jordan-Wigner逆变换后的费米子算符。

ternary_tree()[源代码]

作用Ternary tree变换。 基于 Optimal fermion-to-qubit mapping via ternary trees with applications to reduced quantum states learning 实现。

返回:

QubitOperator,Ternary tree变换后的玻色子算符。