mindquantum.algorithm.nisq.uccsd0_singlet_generator

查看源文件
mindquantum.algorithm.nisq.uccsd0_singlet_generator(n_qubits=None, n_electrons=None, anti_hermitian=True, occ_orb=None, vir_orb=None, generalized=False)[源代码]

利用CCD0 ansatz来生成分子系统的UCCSD算子。

说明

手动配置的 occ_orb 或者 vir_orb 会被认为是空间轨道而不是自选轨道,并且会重新改写 n_electronsn_qubits。 这在某种程度上与活动空间相似,因此可以减少变分参数的数量。但是,它可能不会减少所需要的比特数,因为费米子激发算符是非局部的,例如, \(a_{7}^{\dagger} a_{0}\) 不仅涉及第0和第7个量子比特,而且还涉及第1个直到第6个量子比特。

参数:
  • n_qubits (int) - 量子比特个数(自旋轨道)。默认值: None

  • n_electrons (int) - 电子个数(占据的自旋轨道)。默认值: None

  • anti_hermitian (bool) - 是否减去该算符的厄米共轭以形成反厄米共轭算符。默认值: True

  • occ_orb (list) - 手动分配的占据空间轨道的序号。默认值: None

  • vir_orb (list) - 手动分配的虚空间轨道的序号。默认值: None

  • generalized (bool) - 是否使用不区分占据轨道或虚轨道的广义激发(UCCGSD)。默认值: False

返回:

FermionOperator,使用CCD0 ansatz生成的UCCSD算子。

样例:

>>> from mindquantum.algorithm.nisq import uccsd0_singlet_generator
>>> uccsd0_singlet_generator(4, 2)
-1.0*d0_s_0 [0^ 2] +
2.0*d0_d_0 [1^ 0^ 3 2] +
-1.0*d0_s_0 [1^ 3] +
1.0*d0_s_0 [2^ 0] +
1.0*d0_s_0 [3^ 1] +
-2.0*d0_d_0 [3^ 2^ 1 0]
>>> uccsd0_singlet_generator(4, 2, generalized=True)
1.0*d0_s_0 - 1.0*d0_s_1 [0^ 2] +
1.0*d0_d_0 [1^ 0^ 2 1] +
-1.0*d0_d_0 [1^ 0^ 3 0] +
-2.0*d0_d_1 [1^ 0^ 3 2] +
1.0*d0_s_0 - 1.0*d0_s_1 [1^ 3] +
-1.0*d0_s_0 + 1.0*d0_s_1 [2^ 0] +
-1.0*d0_d_0 [2^ 1^ 1 0] +
1.0*d0_d_2 [2^ 1^ 3 2] +
1.0*d0_d_0 [3^ 0^ 1 0] +
-1.0*d0_d_2 [3^ 0^ 3 2] +
-1.0*d0_s_0 + 1.0*d0_s_1 [3^ 1] +
2.0*d0_d_1 [3^ 2^ 1 0] +
-1.0*d0_d_2 [3^ 2^ 2 1] +
1.0*d0_d_2 [3^ 2^ 3 0]
>>> uccsd0_singlet_generator(6, 2, occ_orb=[0], vir_orb=[1])
-1.0*d0_s_0 [0^ 2] +
2.0*d0_d_0 [1^ 0^ 3 2] +
-1.0*d0_s_0 [1^ 3] +
1.0*d0_s_0 [2^ 0] +
1.0*d0_s_0 [3^ 1] +
-2.0*d0_d_0 [3^ 2^ 1 0]