基于 scipy.optimize.minimize 方法对 MindQuantm 搭建的变参量子线路进行优化

基于 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)  # 设置生成随机数的种子

# scipy.optimize 优化时的目标函数
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)     
         
# 完整的量子线路由Encoder和Ansatz组成
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', # 求解的算法,目前可选的有 ‘Nelder-Mead’‘Powell’‘CG’‘BFGS’‘Newton-CG’‘L-BFGS-B’‘TNC’‘COBYLA’‘SLSQP’‘dogleg’‘trust-ncg’ 
                # 以及在 version 0.14.0,还能自定义算法 以上算法的解释和相关用法见 minimize 函数的官方说明文档,一般求极值多用 'SLSQP'算法
                jac=True, # 目标函数的雅可比矩阵。可选项,仅适用于CG,BFGS,Newton-CG,L-BFGS-B,TNC,SLSQP,dogleg,trust-ncg。
                # 如果jac是布尔值并且为True,则假定fun与目标函数一起返回梯度。如果为False,将以数字方式估计梯度。jac也可以返回目标的梯度。此时,它的参数必须与fun相同。
                bounds=(0, 2*np.pi), # 可选项,变量的边界
                tol = 0.001, # 终止精度
                options={'maxiter':100,'disp':True}
                # maxiter: 最大迭代次数  disp: 是否显示过程信息
                )
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]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值