pychemiq.ChemiQ#

Classes#

class ChemiQ#

封装好的量子线路类,为VQE算法中在量子计算机/虚拟机上进行的部分。包括搭建参数化的量子线路来制备试验波函数和对哈密顿量的各个子项进行测量与求和。

prepare_vqe(machine_type, mapping_type, n_elec, pauli_size, n_qubits)#

准备VQE算法量子线路的函数。

Parameters:
  • machine_type (QMachineType) – 输入量子模拟器类型。目前pyChemiQ仅支持单线程CPU,即QMachineType.CPU_SINGLE_THREAD。含噪声量子模拟器的接入还在进行中。该类的介绍详见 pyqpanda.QMachineType

  • mapping_type (MappingType) – 输入映射类型。详见pychemiq.Transform.Mapping。

  • n_elec (int) – 输入分子体系的电子数。

  • pauli_size (int) – 输入泡利哈密顿量的项数。

  • n_qubits (int) – 输入计算所需要的总量子比特数。

Returns:

void

getExpectationValue(index, fcalls, task_index, qvec, hamiltonian, para, ansatz, extra_measure)#

对线路进行测量得到哈密顿量期望值。

Parameters:
  • index (int) – 输入体系编号。

  • fcalls (int) – 输入函数调用次数。

  • task_index (int) – 任务编号。

  • qvec (QVec) – 存储量子比特的数组。该类的介绍详见 pyqpanda.QVec

  • hamiltonian (Hamiltonian) – 输入Hamiltonian类。PauliOperator中的哈密顿量是字符串形式,不利用后续的处理,Hamiltonian在存储方式上将泡利算符其转换成自定义的Hamiltonian类,方便提取每一项的信息。

  • para (list[float]) – 指定初始待优化参数。

  • ansatz (AbstractAnsatz) – 指定拟设类。详见pychemiq.Circuit.Ansatz。

  • extra_measure (bool) – 用于区分噪声模拟和非噪声模拟。布尔值。 设置False为非噪声模拟。

Returns:

哈密顿量期望值,即基态能量。双精度浮点数。

getLossFuncValue(index, para, grad, iters, fcalls, pauli, qvec, ansatz)#

得到损失函数的值。

Parameters:
  • index (int) – 输入体系编号。

  • para (list[float]) – 指定初始待优化参数。

  • grad (list[float]) – 指定初始待优化梯度。

  • iters (int) – 输入函数迭代的次数。

  • fcalls (int) – 输入函数调用的次数。

  • pauli (PauliOperator) – 指定分子的泡利哈密顿量。泡利算符类。详见pychemiq.PauliOperator。

  • qvec (QVec) –

    存储量子比特的数组。该类的介绍详见 pyqpanda.QVec

  • ansatz (AbstractAnsatz) – 指定拟设类。详见pychemiq.Circuit.Ansatz。

Returns:

损失函数的值。dict类型。

get_energy_history()#
Returns:

每一次函数迭代后的能量值。双精度浮点数数组。


接口示例:

from pychemiq import Molecules,ChemiQ,QMachineType,PauliOperator
from pychemiq.Transform.Mapping import MappingType
from pychemiq.Circuit.Ansatz import UCC

chemiq = ChemiQ()
machine_type = QMachineType.CPU_SINGLE_THREAD
mapping_type = MappingType.Jordan_Wigner
chemiq.prepare_vqe(machine_type,mapping_type,2,1,4)

ansatz = UCC("UCCD",2,mapping_type,chemiq=chemiq)
pauli = PauliOperator("Z0 Z1 ",0.1)
# 期望值函数与代价函数
H = pauli.to_hamiltonian(True)
result1 = chemiq.getExpectationValue(0,0,0,chemiq.qvec,H,[0],ansatz,False)
result2 = chemiq.getLossFuncValue(0,[0],[0],0,0,pauli,chemiq.qvec,ansatz)
energies = chemiq.get_energy_history()

print(result1)
print(result2)
print(energies)

打印得到的结果为:

0.1
('', 0.1)
[0.1]