COBYLA 方法的保真度是否与量子比特数有关?

问题描述

我正在使用 cobyla 方法来准备五个量子位状态:

def objective_function(params):
    q = QuantumRegister(5,'q')
    c = ClassicalRegister(5,'c')
    qc = QuantumCircuit(q,c) 
    #qc.add_register(q)
    qc.u3(params[0],params[1],params[2],q[0])
    qc.cu3(params[3],params[4],params[5],q[0],q[1])
    qc.cu3(params[6],params[7],params[8],q[2])
    qc.cu3(params[9],params[10],params[11],q[3])
    qc.cu3(params[12],params[13],params[14],q[4])
    qc.x(q[0])
    qc.cu3(params[15],params[16],params[17],q[1])
    qc.x(q[0])
    qc.x(q[0])
    qc.cu3(params[18],params[19],params[20],q[2])
    qc.x(q[0])
    qc.x(q[0])
    qc.cu3(params[21],params[22],params[23],q[3])
    qc.x(q[0])
    qc.x(q[0])
    qc.cu3(params[24],params[25],params[26],q[4])
    qc.x(q[0])

    qc.measure([0,1,2,3,4],[0,4])


    backend = Aer.get_backend('qasm_simulator')
    job = execute(qc,backend=backend,shots=shots,memory=True)
    result = job.result()
    memory = result.get_memory(qc)
    memory=list(memory)

  
    cost = memory.count('00000')/shots


    return 1-cost

params=2*np.pi*np.random.random(27)



minimum = minimize(objective_function,params,method='COBYLA',tol=1e-30,options={'rhobeg': 1.0,'maxiter': 10000,'disp': False,'catol': 0.0002})
print(minimum)

如果我可以得到'1-cost'的最小值,那么我可以得到状态'|00000>',然后我与'basis(32,0)'进行比较:

qr=QuantumRegister(5)
cr=ClassicalRegister(5)
qc=QuantumCircuit(qr,cr)
qc.u3(minimum.x[0],minimum.x[1],minimum.x[2],qr[0])
qc.cu3(minimum.x[3],minimum.x[4],minimum.x[5],qr[0],qr[1])
qc.cu3(minimum.x[6],minimum.x[7],minimum.x[8],qr[2])
qc.cu3(minimum.x[9],minimum.x[10],minimum.x[11],qr[3])
qc.cu3(minimum.x[12],minimum.x[13],minimum.x[14],qr[4])
qc.x(qr[0])
qc.cu3(minimum.x[15],minimum.x[16],minimum.x[17],qr[1])
qc.x(qr[0])
qc.x(qr[0])
qc.cu3(minimum.x[18],minimum.x[19],minimum.x[20],qr[2])
qc.x(qr[0])
qc.cu3(minimum.x[21],minimum.x[22],minimum.x[23],qr[3])
qc.x(qr[0])
qc.cu3(minimum.x[24],minimum.x[25],minimum.x[26],qr[4])
qc.x(qr[0])
backend = BasicAer.get_backend('statevector_simulator')

job = execute(qc,backend)
qc_state = job.result().get_statevector(qc)
qc_state=Qobj(qc_state)
es=basis(32,0)
print(fidelity(qc_state,es))

结果如下:

fun: 0.00019999999999997797
maxcv: 0.0
message: 'Optimization terminated successfully.'
nfev: 1336
status: 1
success: True
   x: array([ 0.00778611,6.32380275,4.58145758,6.51491011,5.60242267,4.19268977,4.49172027,6.14433041,3.39252043,3.17284957,7.34213203,3.80908797,4.60298901,1.73041122,4.10022352,6.29578815,5.46400516,6.58309232,6.29281833,5.17998609,4.59156519,6.2545639,6.26220155,6.41144714,6.25661925,-0.15791725,2.99404554])
0.9998744209010255

我的问题是为什么保真度只有 0.99987?因为我用同样的方式准备了一个三量子位状态'|000>',保真度为:

fun: 0.0
maxcv: 0.0
message: 'Optimization terminated successfully.'
nfev: 337
status: 1
success: True
x: array([3.13859280e+00,4.24514312e+00,5.23542112e+00,3.14151453e+00,5.63014644e+00,3.18316919e+00,3.24324807e-05,7.84613927e-01,7.44604514e-01,2.02295774e+00,4.44700964e+00,2.30400389e+00,1.46631581e+00,3.02575760e+00,2.36215571e+00])
0.9999998496043656

COBYLA 方法的保真度与量子比特数有关吗?如何提高 5qubit 案例的保真度?

非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...