理解のためにも、手の腱鞘炎のためにも回路は簡単にかける方がいいですよね。よく出てくるハミルトニアンの時間発展演算子、
CX-RZ-CX
とかを簡単に書いてみます。
QAOA
QAOAでやってみます。まずBlueqatのインストール
!pip install -U blueqat
そして、適当なハミルトニアンを作り、実行します。Xミキサーで初期状態は|+>からスタート。
from blueqat import Circuit
from blueqat import vqe
from blueqat.pauli import X,Y,Z
h = 5*Z[0]-2*Z[0]*Z[1]
step = 2
result = vqe.Vqe(vqe.QaoaAnsatz(h,step)).run()
print(result.most_common())
print(result.circuit)
こんな感じになりました。
(((1, 1), 0.8144445064787001),)
Circuit(2).h[:].cx[0, 1].rz(49.460289478707516)[1].cx[0, 1].rz(-123.6507236967688)[0].rx(4.758485377427176)[:].cx[0, 1].rz(64.56773083408335)[1].cx[0, 1].rz(-161.41932708520838)[0].rx(0.7862442700373741)[:]
この回路を書き直してみます。XミキサーはRXに、Zのバイアス項はRZになってますが、ZZはCX-RZ-CXになってます。なので、ここを書き直すと、
CX-RZ-CX = RZZに書き直せます。
Circuit(2).h[:].rzz(49.460289478707516)[0,1].rz(-123.6507236967688)[0].rx(4.758485377427176)[:].rzz(64.56773083408335)[0,1].rz(-161.41932708520838)[0].rx(0.7862442700373741)[:].m[:].run(shots=1000)
これを実行して、
Counter({'11': 829, '00': 56, '10': 115})
いい感じでできました。回路が短くなり、元のハミルトニアンとの対応が見やすくなりました。