2019.01.17

量子コンピュータ(シミュレータ)を用いて、通貨間の最大アービトラージチャンス問題の解決

Pocket


こんにちは、次世代システム研究室のA.Zです

昨年の10月頃、DWave社が提供した、クラウド上で、量子アニーリングコンピュータを利用できるサービス(DWave Leap)が発表されました。
これからは様々な業界で、簡単に量子アニーリングコンピューターが試せるので、量子アニーリングの活用が広まるではないかと思います。

今回、金融分野(FX)にある通貨間の最大アービトラージの問題をDWaveが提供量した量子アニーリングシミュレーターで解決の話を紹介したいと思います。
基本的に、同じコードで実物のマシンでも動くので、参考にはなるではないかと思います。




問題の概要




通貨間のアービトラージ通貨間アービトレージとは通貨間の為替インバランスを利用したアービトレージ行動です。

今回の問題は以下のページから、参考します。
http://www.quantumforquants.org/quantum-computing/qa-arbitrage/

このインバランスの状態の中に、最大の収益を見つかるのは今回のフォーカスになります。
複数通貨の為替は常に変化し、通過間のバランスの状況に至るまで、タイムラグがでることもあります。

例えば特定の時点で、複数通貨の為替は以下の通りになります。








上記の状態で、もし、青い線のように取引すると、簡単にアービトラージの収益が得られます。









得られる収益は









理論上では、短期間で、ほぼノーリスクで収益に取れるのはかなりおいしい話いですが、実際にはいくつかの問題があります。




  • 通貨間のインバランス状態は一瞬で無くなります。こちらは計算スピードの大事です
  • アービトラージのチャンスの検知だけであれば、heuristicのアルゴリズムで解決できますが、
    最大アービトラージのチャンスを見つかるとなると、古典のコンピューターには困難の問題(NP問題)になります。最大収益率自体はそんなに高くないので、色々手数料とか考えると、ただのアービトラージのチャンスと最大アービトラージチャンスの違いは大きくなり、利益が取れる・取れないかに影響します。



上記の理由で、今回、量子コンピュータで、その問題を解決して見たいと思います。




問題定義




最大アービトラージ問題を解決するために、まず問題の解決ため条件は洗い出します。今回はの問題の解決条件は以下です。




条件 1




もし通貨間の為替は有向グラフで、表すとしたら通貨間の最大アービトレージは最大収益を持つサイクルでければなりません。
例えば以下のグラフだと青い線の最大サイクルになります。









こちらの条件で、以下の計算式です、表現できます。












上記の式はlogのcijの最大化と同じ意味なので、以下のように書き換えます。








条件 2




一つの通貨に対して必ず同じ回数で買い・売りを行うこと。

例えば、以下のケースの場合はCADは2回買い取引・1回売り取引になっているのて、NGになります。








こちらの条件は以下の式で表現できます。








つまり、買いと売りの回数が同じじゃなかったら、ペナルティを与えます。




条件 3




一つの通貨に対して必ず1回で買い・売りを行うこと。
例えば、以下のケースの場合はCADは2回買い取引・2回売り取引になっているのて、NGになります。








こちらの条件は以下の式で表現できます。








つまり、買いと売りの回数が1回じゃなかったら、ペナルティを与えます。


今回の問題の最終的なコスト関数は以下です。








実装のサンプルコード




今回は以下のDWaveが提供したSDK(DWave ocean sdk)を利用します。

https://github.com/dwavesystems/dwave-ocean-sdk

こちらのSDKは利用し、DWave Leapにも繋がるので、コードはほぼ変わりません。また、シミュレーター機能もあるので、限られているDWave Leapの計算時間使わずに、自由に先に試行錯誤することができます。

量子アニーリングを利用するために、上にある条件を以下のIsingモデルに変換する必要です。









Ising modelの変換するためのコードは以下にです。

条件 1:








条件 2:








条件 3:








シミュレーターの呼ぶコード








これで、一通り動かせると思います。




結果




今回のテストは以下のように通貨グラフになります。








こちらのグラフの最大アービトラージは青い線にサイクルになります。
利益率は0.074%です。

実際に、プログラムの実行結果の出力みると、ちゃんとその回答が出てきます。プログラムの出力結果の例:




answer :{0: 0, 1: 0, 2: 1, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 1, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 1, 16: 0, 17: 0, 18: 1, 19: 0}
answer energy :-0.00032021339941934457
answer num_occurrences :1 
answer edges: [('USD', 'CAD'), ('JPY', 'USD'), ('CAD', 'CNY'), ('CNY', 'JPY')]
profit : 0.07375904861752769



量子アニーリングの一つ特徴で、毎回の実行で結果変わる可能性があります。
今回シミュレーターで、あくまで理想な状態になり、実際のマシンではまた様々な異なる点があるかもしれません。あとは、実際の量子アニーリングコンピュターで、同じ結果がでるかどうか楽しみですね。




最後に




次世代システム研究室では、アプリケーション開発や設計を行うアーキテクトを募集しています。アプリケーション開発者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。