mindquantum.framework.MQN2Ops

查看源文件
class mindquantum.framework.MQN2Ops(expectation_with_grad)[源代码]

包含encoder和ansatz线路的量子线路演化算子,算子返回在参数化量子线路(PQC)演化出的量子态上哈密顿量期望绝对值的平方。此算子只能在 PYNATIVE_MODE 下执行。

\[O = \left|\left<\varphi\right| U^\dagger_l H U_r\left|\psi\right>\right|^2\]
参数:
  • expectation_with_grad (GradOpsWrapper) - 接收encoder数据和ansatz数据,并返回期望值和参数相对于期望的梯度值。

输入:
  • enc_data (Tensor) - 希望编码为量子态的Tensor,其shape为 \((N, M)\) ,其中 \(N\) 表示batch大小, \(M\) 表示encoder参数的数量。

  • ans_data (Tensor) - shape为 \(N\) 的Tensor,用于ansatz电路,其中 \(N\) 表示ansatz参数的数量。

输出:

Tensor,hamiltonian期望绝对值的平方。

支持平台:

GPU, CPU

样例:

>>> import numpy as np
>>> import mindspore as ms
>>> from mindquantum.core.circuit import Circuit
>>> from mindquantum.core.operators import Hamiltonian, QubitOperator
>>> from mindquantum.framework import MQN2Ops
>>> from mindquantum.simulator import Simulator
>>> ms.set_context(mode=ms.PYNATIVE_MODE, device_target="CPU")
>>> enc = Circuit().ry('a', 0).as_encoder()
>>> ans = Circuit().h(0).rx('b', 0)
>>> ham = Hamiltonian(QubitOperator('Z0'))
>>> sim = Simulator('mqvector', 1)
>>> grad_ops = sim.get_expectation_with_grad(ham, enc + ans)
>>> enc_data = np.array([[0.1]])
>>> ans_data = np.array([0.2])
>>> f, g_enc, g_ans = grad_ops(enc_data, ans_data)
>>> np.abs(f) ** 2
array([[0.00957333]])
>>> net = MQN2Ops(grad_ops)
>>> f_ms = net(ms.Tensor(enc_data), ms.Tensor(ans_data))
>>> f_ms
Tensor(shape=[1, 1], dtype=Float32, value=
[[ 9.57333017e-03]])