組み合わせ最適化問題に対するブレークスルーと思われる画期的な技術「量子アニーリング」が誰でも1分/月まで無料で使える環境「Leap」がD-Wave社から提供されました。使ってみようと思ったのですが、現時点ではあまり分かりやすいマニュアルや記事が見当たらなかったため、公式ドキュメントを中心にいろいろと調べ、まずはPythonを使ってAPIを叩き、サンプルプログラムが動作するところまで行きましたので、その内容をまとめておこうと思います。使うまでの手順は以下になります。Tokenのコードを取得する組み合わせ最適化問題を定義すると共に、2次形式に式変形しておく3の内容をLeapに認識させるためのPythonコードを作成する4の内容をAPIに渡すためのPythonコードを作成するAPIを叩き結果を取得する3と4は大事なところですが、今回はサンプルコードを使うとして説明を省略します。Leapに登録するまず、Leapのページにアクセスしてサインアップしましょう。この時、国名にJapanを入れると登録させてくれない(アメリカかカナダ限定というエラーが出る)ため、適当にアメリカを選んでおきましょう。アメリカで登録しても、日本からのアクセスだからと言って遮断されることはなく、問題なく動作しました(もし問題が出たらクラウドサービスのアメリカリージョンを使おうかと思っていました)。Tokenのコードを取得しましょう。Tokenをコピーできる部分があるはずです。組み合わせ最適化問題を定義すると共に、2次形式に式変形しておく本記事では、以下の例を使いました。3つの変数のうち1つだけが1で残りは0という制約を表すための評価関数式が示されています。https://docs.dwavesys.com/docs/latest/c_gs_6.html3の内容をLeapに認識させるためのPythonコードを作成するLeapに本問題を認識させるためには、以下に示すようなディクショナリ形式の変数を作成する必要があります。各係数は上の式と対応しています。これを実現するためのコードとして以下が与えられています。dict(linear)Q.update(quadratic)https://docs.dwavesys.com/docs/latest/c_gs_8.html4の内容をAPIに渡すためのPythonコードを作成するまず、PythonからDwaveを使うためのライブラリをインストールしておきます。dwave-system次に、ライブラリをインポートし、先ほど定義したQを渡してレスポンスを受け取る処理をコーディングします。num_reads=1000)num_readsは同じ検討を何回実施するかを示します。大きいほどアニーリングの結果(確率的)が収束しますが、1分/月の計算時間を消費してしまうので、あまり大きな値にしすぎないほうがいいかと思います。definedというエラーが出ますので気を付けてください。APIを叩き結果を取得する上記のコードを実行すればレスポンスに実行結果が返ってきているはずです。以下のコードで確認できます。これも、公式マニュアルの記載の通りにするとエラーが出るので微修正が必要でした。#マニュアルとは異なり、listで括る処理と、戻り値が4つになっていることに留意する。以下にソースコード全文とその時の実行結果を載せておきます。数行の処理ですので、コードとしては簡単ですね。num_occurrences)実行結果は以下です。230(合計すると1000)であるという結果になっています。この偏りに関しては検討できていません(回数を増やせばなくなってくるのかもしれませんが、時間をあまり消費したくなかった)が、1つだけが1で他が0という欲しい答えが選ばれているので正しく動作していることが読み取れます。計算時間の消費は0.1秒とかそのくらいだったと思います。230まとめ少し苦戦しましたが、D-WaveのLeapのサンプルプログラムをPythonで動作させることができました。今後ナップサック問題等を解かせてみて、量子アニーリングを使わない場合との計算速度等を検討してみたいと考えています。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。プロフィール兵庫県在住の30代データサイエンティスト。Pythonを使った機械学習等によるデータ分析や、ウェブアプリ等のシステム開発に取り組んでいます。