量子コンピュータで関数はどうやってハミルトニアンに変換するのか

量子コンピュータで最適化問題を解く際はVQEやQAOAなどのアルゴリズムが使えるという話は有名かもしれません。定義されたハミルトニアンの期待値が最小となるように計算することで最適化する点はなんとなく納得できます。

ただ実際に問題を解こうと思うと、ハミルトニアンってどうやって定義するのよという疑問がすぐに浮かびませんか?

物理系であればそもそもハミルトニアンという形で表現されるので抵抗は少ないですが、最適化問題では関数を最適化するので関数をハミルトニアンに変換する必要があります。わかりにくいですね。

ということで本記事では量子コンピュータで最適化計算をするために、関数をハミルトニアンで表現する方法について紹介します。

スポンサーリンク

ハミルトニアンの意味を考える

そもそもハミルトニアンとは物理の言葉で表現すると、エネルギーという値(物理量)を演算子で表現したものと言えます。つまりハミルトニアンを定義するとは、表現したい値に対応した演算子に変換することだと言えます。

では「値に対応した演算子」とはどのようなものかというと、下のように固有値が表現したい値となるような演算子を探す必要があります。

$$ H |\psi\rangle = E |\psi\rangle$$

さらに、量子コンピュータで扱う最適化問題は2値変数問題(変数が0,1のように2つの値だけからなる問題)であることが多いので、0と1を固有値に持つ演算子を使えばよいということになります

ハミルトニアンへの変換方法

一般的に変数$x\in{0,1}$を表現する演算子は下の演算子が使われます。

$$\frac{I-Z}{2}$$

この演算子が使われる理由は固有状態$|0\rangle, |1\rangle$に対応する固有値がそれぞれ0,1であり、値と量子状態のマッピングが直感的にできるからです。

$$\frac{I-Z}{2}|0\rangle = 0|0\rangle, \frac{I-Z}{2}|1\rangle = 1|1\rangle$$

例:$f(x_1, x_2)=-x_1x_2$

例えば$f(x_1, x_2)=-x_1x_2$を考えてみましょう。ただし$x_i\in{0,1}$とします。このとき関数の値は$x_1=x_2=1$のときは-1、それ以外の場合は0となります。

さて、この関数をハミルトニアンで表現すると次のように表すことができます。

$$H = -(\frac{I-Z}{2})\bigotimes(\frac{I-Z}{2})$$

このとき$\langle 00|H|00\rangle=\langle 01|H|01\rangle=\langle 10|H|10\rangle=0$、$\langle 11|H|11\rangle=-1$であるように、$x_1, x_2$を量子状態$|x_1x_2\rangle$で直感的にマッピングできていることがわかります。

このような理由から関数からハミルトニアンへの変換は上に記載した演算子が用いられています。

ライブラリにも使用されている変換

以上のような変換を行うことで、最適化を行いたい関数をハミルトニアンとして表現することができます。実はこの手法はライブラリの裏側でも使われています。

例えばqiskit.financeのportfolioではポートフォリオ最適化問題を定義するために必要なパラメータを入力すれば問題を表現したハミルトニアンがすぐに手に入ります。このときライブラリが行う最適化したい関数をハミルトニアンに変換する計算はまさに上の変換を行っているのです。

ぜひ一度ソースコードの計算を実際に確認してみてください。

コメント

タイトルとURLをコピーしました