@yuichirominato 2019.02.21更新 110views

【新機能】blueqat.optでイジング組合せ最適化


はじめに

毎日使っているツールだと出来るだけ簡単に短く書きたいものです。Blueqatでは、アニーリングとゲートの両方の計算ができます。それを統合しているので簡単にアニーリングしたり、QAOAしたりと使い分けられます。

これまではアニーリングの方の機能も少しずつ式の作り方を工夫するようにしました。

新しい書き方(できればベータ感覚)

これまでの最適化問題はWildqatなどを使っていました。Blueqatに統合してからはoptモジュールとして提供していて、従来のWildqatと同じ使用感で使ってもらえるようにしていました。

量子コンピュータの変遷は早いので、対応も必要のため少し機能追加しました。

https://github.com/mdrft/Blueqat

これまでの最適化の計算では、

from blueqat import opt
a = opt.opt()
a.qubo = [[1,0],[0,-1]]
a.sa()

#=>
[0, 1]

のように書いていました。毎日書いていると疲れてしまうので、、、新しい方はさらに簡単にかけるようにチェーンメソッドを準備しました。

from blueqat.opt import Opt
Opt().add([[1,0],[0,-1]]).run()

#=>
[0, 1]

これまで数行使っていたのが1行でかけます。また、数式にも対応しています。数式と使う量子ビットを準備して、、、

from blueqat.opt import Opt
Opt().add("(q0+q1-1)^2",N=2).run()

#=>
[0, 1]

このようにできます。また、まとめて、

from blueqat.opt import Opt
Opt().add("(q0+q1+q2-1)^2",N=3).add([[-1,0,0],[0,0,0],[0,0,0]]).run()

#=>
[1, 0, 0]

このように書くこともできます。もう少し初めての方向けに、エラーのハンドリングをしながら使いやすいツールを作ってみたいと思います。

制約条件式をつなげるパラメータ

式同士をつなげる際には、

from blueqat.opt import Opt
Opt().add("(q0+q1+q2-1)^2",N=3).add([[-1,0,0],[0,0,0],[0,0,0]],2).run()

#=>
[1, 0, 0]

のように、引数にM=2を指定することによって対応できます。

def set(self,qubo,M=1,N=1):

Recommended


Wikiへ移動