QURI Partsで量子計算に触れてみる!
この記事はJij Inc. Advent Calendar 2023 5日目の記事です!
はじめまして、株式会社Jijのhikach(ひかチャン)です!
普段は広報と情報システムを担当しています。
はじめに
以前、2018年のアドベントカレンダーで「PythonフレームワークのQulacsで量子コンピュータに触れてみる」という内容で記事を書きました。なので今回の2023年アドベントカレンダーでは、QunaSys社が新たにリリースしたQURI Partsに触れてみるという内容でまとめたいと思います!
QURI Partsとは
量子アルゴリズムの作成と実行を簡素化するオープンソースライブラリです。
異なる量子回路シミュレータや実際の量子コンピュータのSDK(ソフトウェア開発キット)を使い分けることは、各SDKに合わせてアルゴリズムを書き換える必要があるため、開発の効率性が低下することがあります。QURI Partsは、この問題を解決するために開発されました。QURI Partsを使えば、異なるSDK間でのコード変換を自動化し、量子コンピュータや量子回路シミュレーションのテストを容易にすることができます。つまりQURI Partsを学べば、なんでもいけるっちゅう話!
QURI Partsをインストールする
前回の記事と同様、普段Pythonを仕事で使わない方々(私も普段はPRの仕事をしています!)には、Python環境を手軽に提供してくれるGoogle Colaboratoryの利用をお勧めします。
ご自身の開発環境でQURI Partsを使いたい方に
QURI Partsのインストールには、Python 3.9.8以降が必要です。また、特定の量子コンピュータープラットフォームやシミュレータを使いたい場合は、適切な依存関係をインストールする必要があるので詳しくはドキュメントを見てください
早速、以下をColaboratoryのノートブックで実行してインストールします。
!pip install "quri-parts[qulacs]"
これだけで、QURI Partsの基本的な機能を使う準備が整いました。
インストールできたQURI Parts modulesは以下
- quri-parts-circuit
- quri-parts-core
- quri-parts-qulacs
QuantumCircuitを構成する量子ゲートを用意しquri_partsで計算する
さまざまな書き方がありますが、この記事では手っ取り早くQURI Partsに触れれるようにしていますので、違う書き方や、詳細の説明を知りたい方はドキュメントページを参照してください。
from quri_parts.core.operator import Operator, pauli_label
from quri_parts.qulacs.estimator import create_qulacs_vector_estimator
from quri_parts.circuit import QuantumCircuit, Z, H
from quri_parts.core.state import GeneralCircuitQuantumState
# 3量子ビットの量子回路を作成
circuit = QuantumCircuit(3)
# 0番目量子ビットにZゲートを適用
circuit.add_Z_gate(0)
# 1番目の量子ビットにHゲートを適用
circuit.add_H_gate(1)
# |000> を初期状態として量子回路を作用させる
new_state = GeneralCircuitQuantumState(3, circuit)
# 観測量を定義(ここではZ軸の測定)
op = Operator({pauli_label("Z0"): 1.0})
# state vectorの期待値計算のためにestomatorを作成する
estimator = create_qulacs_vector_estimator()
# 設定した量子回路'new_state'で観測量'op'の期待値を測定
estimate = estimator(op, new_state)
print("期待値:", estimate.value)
3量子ビットの量子回路にZゲートとHゲートを適用し、その回路を初期状態(|000⟩状態)に適用して新しい量子状態を生成します。また新しく生成した量子状態に対して量子ビットが上向きか下向きかの期待値を計算しました。
まとめ
今回2018年ぶりに量子ゲート、量子回路に関するコードを書いて、久しぶりで難しかったです。今回はQURI Partsを触ってみたのですが、QURI Parts の便利なところは異なるSDK間でのコード変換を自動化し、量子コンピュータや量子回路シミュレーションのテストを容易にすることになります。具体的にどういうところかというと例えばこのコード
from quri_parts.qulacs.circuit import convert_circuit
qulacs_circuit = convert_circuit(circuit)
print(qulacs_circuit)
import qulacs
qulacs_state = qulacs.QuantumState(2)
qulacs_circuit.update_quantum_state(qulacs_state)
print(qulacs_state)
QURI Partsで作成した量子回路をQulacsで使用可能な形式に変換し、その回路をQulacsの量子状態に適用するものです。'quri_parts.[SDK].circuit.convert_circuit'、このSDKの部分を現在対応しているextrasに変更することで自動変換してくれます。
QURI Partsを使用すると、量子アルゴリズムの開発とテストがより効率的に行えるのではないかと思います。ドキュメントには様々なチュートリアルがあるので、量子コンピューティングの学習に興味がある方は、ぜひ挑戦してみてください!
最後に
\Rustエンジニア・数理最適化エンジニア募集中!/
株式会社Jijでは、数学や物理学のバックグラウンドを活かし、量子計算と数理最適化のフロンティアで活躍するRustエンジニア、数理最適化エンジニアを募集しています!
詳細は下記のリンクからご覧ください。皆さんのご応募をお待ちしております!
Rustエンジニア: https://open.talentio.com/r/1/c/j-ij.com/pages/51062
数理最適化エンジニア: https://open.talentio.com/r/1/c/j-ij.com/pages/75132
株式会社Jijではインターンを募集しています!
OpenJijやJijZeptの開発、アルゴリズム実装、企業課題のモデリング等、多彩なプロジェクトに触れる・挑戦する機会があります!
Discussion