基于 scipy.optimize.minimize 方法对 MindQuantm 搭建的变参量子线路进行优化。
任务详情请参考 MindQuantum 官网
import numpy as np
import mindspore as ms
from mindquantum import *
from scipy.optimize import minimize
ms.context.set_context(mode=ms.context.PYNATIVE_MODE, device_target="CPU")
ms.set_seed(1)
def func(x, grad_ops, show_iter_val=False):
f, g = grad_ops(x)
if show_iter_val:
print(np.squeeze(f))
return np.real(np.squeeze(f)), np.squeeze(g)
encoder = Circuit()
encoder += H.on(0)
encoder += RX(f'alpha{0}').on(0)
encoder += RY(f'alpha{1}').on(0)
encoder += RZ(f'alpha{2}').on(0)
encoder = encoder.no_grad()
ansatz = Circuit()
ansatz += RX(f'theta{0}').on(0)
ansatz += RY(f'theta{1}').on(0)
circuit = encoder + ansatz
ham = Hamiltonian(QubitOperator('Z0', -1))
sim = Simulator('projectq', circuit.n_qubits)
grad_ops = sim.get_expectation_with_grad(ham, circuit)
init_amp = np.ones(len(circuit.params_name))
res = minimize(func,
init_amp,
args=(grad_ops, False),
method='bfgs',
jac=True,
bounds=(0, 2*np.pi),
tol = 0.001,
options={'maxiter':100,'disp':True}
)
print(res.fun)
print(res.success)
print(res.x)
Optimization terminated successfully.
Current function value: -1.000000
Iterations: 6
Function evaluations: 10
Gradient evaluations: 10
-0.9999995798482005
True
[ 1. +0.j 1. +0.j 1. +0.j 2.64712041+0.j
-0.29656849+0.j]