Nobisuke
Dekisugi
RAG
Privacy policy
2021/02/08 21:33
blueqatをつかってVQEの最適化計算をしてみたいと思います。最適化といっても色々種類があるので、今回はscipyの最適化手法をみてみます。
vqeには最適化ステップがあるので、最適化手法を変えてみます。
scipy.optimize.minimizeから読まれるみたいなので、変えてみましょう。
まずは何もやらずの、最適化のシードやステップによって結果が変わるので、10回計算した平均をとってみます。
Copy import numpy as np hamiltonian = q(0)*q(1)*q(2) step = 5 res = [] for _ in range(10): start = time.time() result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step)).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 4.69558162689209
4.69558162689209
Copy hamiltonian = q(0)*q(1)*q(2) step = 5 res = [] #ここで最適化を決めます。 minimizer=vqe.get_scipy_minimizer(method="COBYLA") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 0.7651197671890259
0.7651197671890259
Copy minimizer=vqe.get_scipy_minimizer(method="Nelder-Mead") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 1.2728466749191285
1.2728466749191285
Copy minimizer=vqe.get_scipy_minimizer(method="Powell") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 2.5380529801050824
2.5380529801050824
Copy minimizer=vqe.get_scipy_minimizer(method="CG") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 2.184863805770874
2.184863805770874
Copy minimizer=vqe.get_scipy_minimizer(method="BFGS") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 1.90869873046875
1.90869873046875
Copy minimizer=vqe.get_scipy_minimizer(method="L-BFGS-B") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 1.690256663163503
1.690256663163503
Copy minimizer=vqe.get_scipy_minimizer(method="TNC") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 1.6919202498027257
1.6919202498027257
Copy minimizer=vqe.get_scipy_minimizer(method="SLSQP") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 1.6168858793046739
1.6168858793046739
Copy minimizer=vqe.get_scipy_minimizer(method="trust-constr") for _ in range(10): start = time.time() #ここで指定します。 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step), minimizer=minimizer).run() end = time.time() res.append(end - start) print(np.average(res)) #=> 1.7530574709177018
1.7530574709177018
最適化といっても色々な種類があるので、それらを選ぶときにも基準が必要そうです。微分を使ったものが主流になりつつあるので、用途に合わせ見てみたいと思います。
© 2024, blueqat Inc. All rights reserved