【過去記事】Blueqatで組合せ最適化問題を解くということ。量子ゲートと量子アニーリングの統合。


はじめに

量子コンピュータはよく○○の方式があるとかないとか言われます。方式の違いは概してユーザーサイドには混乱を引き起こします。あの計算はできるとか、あの計算はできないとかそういうことを探しながら計算をしているうちに時間を消費してしまいます。貴重な量子コンピュータの勉強時間を犠牲にしない方法を作りました。それがWildqatとBlueqatの統合です。


Wildqatとは?

Wildqatは量子アニーリングと呼ばれる方式の組合せ最適化問題を解くためのSDKです。QUBOと呼ばれるバイナリの式を作ることで、組合せ最適化問題を量子マシンで解くことができます。D-Waveへも問題を投げることができます。


Blueqatとは?

Blueqatは量子ゲートモデルと呼ばれる方式の汎用量子コンピュータのアプリケーションを開発するためのSDKです。汎用型マシンは量子ゲートと呼ばれる論理演算を組み合わせて量子計算を行いますが、それらの組み立てとシミュレートが高速にできます。


今回何をしたのか?

BlueqatとWildqatを統合し、WildqatをBlueqatのoptというモジュール化して組み込みました。これにより量子効果を活用した計算原理を一元管理し、よりシームレスな開発環境と教育環境の構築を可能にしました。今後はBlueqatを導入するだけで、量子ゲートと量子アニーリングの両方が使えます。最終的な実機への投入はIBMQへの投入とD-Waveへの投入を1つの環境で実現しました。

トンネル効果を活用した組合せ最適化問題への問題投入と、量子計算を汎用性を持って実現する計算の使い分けができ、より柔軟性と用途が広がります。どちらの方式を採用しようか迷っているユーザー様はこれで迷う必要がなくなりました。


どのような利点があるのか?

組合せ最適化問題を量子マシンで活用するには、「イジングモデル」という物理学に基づいたモデルを活用する必要があります。量子アニーリング型の計算では、このイジングモデルに実装できる問題のみができますが、サイズが比較的大きく、ネットワーク構造を利用するために社会問題を中心に量子トンネル効果と呼ばれる効果を利用して実問題を高速に解くことが期待されています。

一方、量子ゲート型のマシンでは厳格な量子計算を活用した量子回路に基づき計算ができますが、量子アニーリングよりもサイズが小さいがより柔軟性の高い組み合わせ問題のシミュレーションが実現できます。

これらの組合せ最適化問題への異なるアプローチを統合することで、お互い不得意なところを補いながら同一のプログラミングで多くの問題を解くことができます。下記に一例を載せてみます。


多体問題に活用できる量子ゲートの組合せ最適化シミュレーション

量子ゲートマシンは量子アニーリングマシンの弱点である多体問題をスムーズに解くことができます。下記の記事は量子ゲート方式で素因数分解をする際に、量子アニーリングマシンで大変困難となる多体問題を回避し、量子アニーリングマシンよりも格段に少ない量子ビットで計算を完了しています。

https://qiita.com/YuichiroMinato/items/ccff08868a91e83a1fcd

量子アニーリングのおける多体問題の処理は多くの余剰量子ビットを必要とするだけでなく、新しいハイパーパラメータの導入によって問題の解を求めにくくします。量子ゲートマシンでは、その部分を解消し多体問題を直接計算することにより、このような余分な前処理を一切省き、効率的に計算を完了できます。タンパク質折りたたみ問題では最大7体の多体問題を前処理なしで解くことができており、極めて複雑な処理を回避することに成功しています。

このように、量子アニーリングの根本的な問題点を解決するということに優れています。


実問題に強く、接続と量子ビットが多い量子アニーリング

多体問題を量子ゲートマシンで解決するという一方、量子ゲートマシンではその開発の難易度から量子ビット同士の接続が極めて限られており、量子アニーリングマシンのような柔軟な接続とネットワーク構造を持っていないため、解ける問題が限られます。また、量子アニーリングは基本的に古典問題を解くマシンなので、実社会問題のように量子性のあまりない問題を効率的にときたい場合、量子トンネル効果のように量子効果の利用場所が量子ゲートに対して実問題に即した形で実装がされています。そのため、大きな社会問題を解きたい場合には、量子ゲートマシンを利用するよりも量子アニーリングマシンを活用した方が極めて自然です。また、量子ゲートマシンでの組合せ最適化問題はリソースを消費し、計算シミュレーション時間もかかるため、すぐに答えが欲しい時には活用が難しいです。大規模な自動車のネットワーク問題は量子アニーリングの得意分野でしょう。


プログラミング例を見る

では、実際に計算方法を見てみます。まずアニーリングを活用する場合、QUBOmatrixを作りますが、たとえば5量子ビットから2量子ビットを選ぶ問題を作ってみます。

from blueqat import opt

a = opt.opt() #インスタンスの生成
a.qubo = opt.sel(5,2) #5量子ビットから2量子ビット選ぶ関数
result = a.sa(shots=100,sampler="fast") #shot100で計算
opt.counter(result) #分布を見る

Counter({'00101': 13,
'10100': 10,
'00011': 10,
'00110': 8,
'01100': 15,
'01001': 8,
'01010': 15,
'10001': 11,
'10010': 7,
'11000': 3})

次に同じ問題をそのまま使って量子ゲートで計算してみます。

from blueqat import vqe

qubo = opt.pauli(a.qubo)
step = 4
result = vqe.Vqe(vqe.QaoaAnsatz(qubo,step)).run()
print(result.most_common(10))

(((0, 1, 1, 0, 0), 0.09346152243898215), ((0, 1, 0, 1, 0), 0.09346152243898212), ((0, 0, 1, 0, 1), 0.0934615224389821), ((0, 0, 1, 1, 0), 0.09346152243898208), ((0, 1, 0, 0, 1), 0.09346152243898206), ((1, 0, 1, 0, 0), 0.09346152243898205), ((1, 1, 0, 0, 0), 0.09346152243898204), ((1, 0, 0, 1, 0), 0.09346152243898204), ((1, 0, 0, 0, 1), 0.09346152243898201), ((0, 0, 0, 1, 1), 0.093461522438982))

このようにシームレスに組合せ最適化問題を同じ式で解くことができました。量子ゲートで計算する際にはVQEとQAOAというアルゴリズムで解けました。


まとめ

まだまだ量子コンピュータの開発は始まったばかりですが、やることは膨大にあります。将来的なハードウェアの改善に期待していてはいつまでも実現はままなりません。現時点でできることをきちんと行い、機能の不足を補いながらベストを尽くして量子計算機の性能を限界まで発揮して実用的に問題を解いていきましょう。