mindquantum.framework.MQOps

View Source On Gitee
class mindquantum.framework.MQOps(expectation_with_grad)[source]

MindQuantum operator.

A quantum circuit evolution operator that include encoder and ansatz circuit, who return the expectation of given hamiltonian w.r.t final state of parameterized quantum circuit (PQC). This ops is PYNATIVE_MODE supported only.

Parameters

expectation_with_grad (GradOpsWrapper) – a grad ops that receive encoder data and ansatz data and return the expectation value and gradient value of parameters respect to expectation.

Inputs:
  • enc_data (Tensor) - Tensor of encoder data with shape \((N, M)\) that you want to encode into quantum state, where \(N\) means the batch size and \(M\) means the number of encoder parameters.

  • ans_data (Tensor) - Tensor with shape \(N\) for ansatz circuit, where \(N\) means the number of ansatz parameters.

Outputs:

Tensor, The expectation value of the hamiltonian.

Supported Platforms:

GPU, CPU

Examples

>>> 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 MQOps
>>> 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)
>>> f
array([[0.0978434+0.j]])
>>> net = MQOps(grad_ops)
>>> f_ms = net(ms.Tensor(enc_data), ms.Tensor(ans_data))
>>> f_ms
Tensor(shape=[1, 1], dtype=Float32, value=
[[ 9.78433937e-02]])