量子コンピュータ(量子アニーリング)とは何か?
端的に言うなら、ニューラルネットワークの実装の一つがTensorFlowやKerasなように、量子アニーリングの実装の一つが量子アニーリング方式の量子コンピュータだ。
つまり量子アニーリングというのは、アルゴリズムの一つ。
組合せ最適化問題を解くためのアルゴリズム。
これがユニークな点は、数理モデルの実装なのに、つまり従来の考えではソフトウェアの実装なのに、ハードウェアを使い物理現象を利用して解いているところにある。しかもそれは、量子状態における物理法則を利用して解くので、さまざまな利点がある。複雑な制約条件から一気に最適解に到達させることだとか。制約条件間の微妙なバランスを取ることだとか。(高速に解を得ることが注目されがちだけど、最適解に確実に到達することの方が、断然価値が高いんだな)
こういう仕組みなので、量子アニーリングという特定のアルゴリズムに特化していて、一般のコンピュータのようなプログラムを動かすためのコンピュータではない。つまり量子アニーリング方式の量子コンピュータで動作するプログラムというものはない。
ややこしいことに、こうした「物理現象を利用して解を導く」仕組みではなく、普通のコンピュータを使ってソフトウェアだけで実装された量子アニーリング(のような動作をする)実装もあり、そういったものも含めて「量子コンピュータ」と読んでしまっているところが、話をわかりにくくさせている。しかもこれがなかなか良い実装が増えているので、余計にややこしい。厳密に言うと、量子状態をハードウェアで実現しているものを量子コンピュータと呼んで、ソフトウェアで量子アニーリングの状態を再現しているものも含め、量子アニーリングで課題を解く仕組み全般をアニーリングマシンと呼ぶのが正しいのだと思う。
いずれにしても量子コンピュータとは、数理モデルの実装であり、そういった意味ではソフトウェアのライブラリだと思った方がわかりやすい。(ハードウェアとのハイブリッドだけどね)
だから量子アニーリング方式の量子コンピュータを利用するということは、量子アニーリングというアルゴリズムを利用するということと同義。だから量子コンピュータを使いこなせるということは、課題を見た時に、「あ、これは量子アニーリングで解くと効果が出る課題だな」って思えるということと同じなわけだ。と言っても、現実の課題はそんなに単純じゃないので、うまく課題を分解して、適切な場所に量子アニーリングを活用することが重要だったりするんだけどね。
そして、量子アニーリングというアルゴリズムを使いこなせたとしても、組合せ最適化部分を解けたというだけで、現実の課題がそれだけで解決するわけではない。
だからぼくたちは、量子コンピュータに関係した機能だけでなく、そこにまつわる様々な機能をサービスに組み込んで提供している。そうしてはじめて量子コンピュータが生きてくるわけだから。