IBMQ実機でQAOAをやってみる

# IBMQ実機でQAOAをやってみる

今更感もありますが、 IBMQ実機で量子古典ハイブリッドアルゴリズム(VQA)であるQAOAをやってみます。
QAOAを実機でやったらどうなるのか、という情報がなかなか見つからないので、書いてみました。

# お断り

VQAは本来、量子コンピュータ実機と古典コンピュータの間でiterationを回して
最適なゲートパラメーターまで追い込むものです。
しかし現状では量子コンピュータがクラウド利用であるための通信遅延が大きいこと、フリー利用だと順番待ちがあることなどから
実機に合わせた最適化は困難です。
(ある程度のパラメータ数までなら、複数回路を固めてして同時に投げて、グリッドサーチすることは可能です。)
ここでは、シミュレーターでパラメータ最適化を行い、最適なゲート回路を求めた上で
それを量子コンピュータ実機で実行させます。
これはよくあるトリックですが、正直言って単に量子ゲートコンピュータに「ある回路」を与えたときの挙動を見ているだけです。
最適な回路をシミュレーター上で求められた時点で、そもそも解が手に入っているからです。

シミュレーターでパラメータを最適化した場合、実機と適合しているのかどうかはよくわかりません。
一応、Googleのシカモアの論文ではシミュレーターのパラメータ等高線と実機のパラメータ等高線はだいたい一致しているそうです。

`Google, Quantum Approximate Optimization of Non-Planar Graph Problems on a Planar Superconducting Processor`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/d852c4a0-fe1b-85af-c27e-35123c55434b.png)


# 結果
4qubitの問題(4ノードMAXUCUT)と、3qubitの問題(適当なハミルトニアン）をやってみます。
実機はibmqx2です。optimization_level=3 (最大)のトランスパイルをかけています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/917606f8-ec88-22b2-13c2-200268348d38.png)

QAOAのlayer数はp=1です。

## 4 qubit 

回路

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/4073d734-e191-ca0f-61a4-b233ab607756.png)

シミュレーター

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/35268d25-459b-dd74-8cb5-cdfcb5a43969.png)


実機(ibmqx2)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/9891b62f-2652-1ab3-8d69-9a4dc0d7108a.png)

全くダメです。

**2021/05/07追記**
ibmq_santiago (QV=32) を使うと、ちゃんと出来ました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/adb9f4b9-4c42-d720-aafc-0f157de3ed3f.png)


## 3qubit

回路

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/7cf96305-1b7c-a30d-571c-3157f1b06fae.png)

シミュレーター

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/8e7647f4-e936-18fc-33da-2723fa691a9b.png)

実機

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/7ec504c0-ee44-bfc6-aa60-0c4149bfb731.png)

なかなかにダメです。
この問題はそもそもコストハミルトニアンの設定がてきとーなので、最小化問題として扱うには無理がありますが、
それにしても「ある回路」の実行結果として乖離が大きいです。

# 考察

というわけで、「QAOAは実機で全く動かない」という結果になりました。[^1]
雑音やコヒーレンス時間が問題と考えられます。低減する方法としては、

- キャリブレーション(error mitigation)をする。多少の効果はあると思われる。（劇的ではない）
- 解かせる問題をIBMQ実機のトポロジーで表現しやすいものにする。回路を実機に埋め込む時のSWAPゲート(CNOT x3)が減ります。
しかし、やりすぎると何がしたかったのかよくわからなくなります。
- 問題を部分問題に分割する。
- Ansatzとしてよいものがないか考える。（削減、問題の特徴に寄せる）

ゲート要素としては、おそらくCNOTと任意回転角ゲート(Rz,Rx,u1,u3)が悪さをしているものと思われます。
任意回転角ゲートも、実際には基本ゲート（固定角）の多数の組み合わせで近似されますので、実機ではかなり多い数のゲートに化けています。
しかしこれらのコンポーネントはVQAから完全には排除しようがないので、、、どうしようもありません。

CNOTに関して、実機ではどれぐらいいけるものでしょうか？　
過去記事: [量子ゲート実機で回路深さの限界を調べる (その2)](https://qiita.com/notori48/items/a575a889062e7bcbfbaf)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/98093df6-9e0a-77de-5412-2f1c73c87811.png)


この調査によると、CNOTが6個というのは「劣化は避けられないが実行結果がランダムになるとまではいえない」というレベルに思えます。
(3 qubitの回路にCNOTは6個含まれています。)
そのため、問題はCNOTだけでなく、任意回転角ゲートによる劣化がCNOTと同程度以上には大きかったのであろうことは推察されます。

なお、qiskitのtutorialでは5ノードの問題を（コスト関数の対称性を使ってreductionした上で）解いています。
[Solving combinatorial optimization problems using QAOA](https://qiskit.org/textbook/ch-applications/qaoa.html#5b.-Running-QAOA-on-a-real-quantum-device)
こちらはそれっぽい結果にはなっているので、上記のような工夫である程度カバーできることも確かです。
（それでも、規模が大きくなると厳しいかもしれない）

# 結論

量子古典ハイブリッドでも、実機で動かすのはまだまだ厳しいと感じた。

[^1]: あまりにもひどいので、「本当？？」と言いたくなりますが、、、　文献: `Quantum Algorithm Implementations for Beginners` ではもうちょっと良い結果に見えます。が、やはり4 qubit で明らかな劣化が見えています。