ブログ
5
9月
,
2024
Tamuz Danzig

量子回路の連結

記事をシェア
ライブラリ

Classiqの合成エンジンは、量子回路の生成を大幅に改善します。例えば、機能的なモデルから始めることで、浅い回路を生成することができたり、ハードウェアでの実行が難しい2量子ビットゲートをなるべく使わない回路を作成することができます。 

 

2つの量子回路を連結することは、どちらか1つの回路が非常に大きい場合に有益です。最適化された回路の合成には時間がかかりますが、実施は一度で済みます。二つ目の回路は小さく、合成プロセスは繰り返され、より速く処理されます。

 

これを行うため、大きな回路と小さな回路を別々に合成します。


from classiq import *
big_qprog = synthesize(big_qmod)
small_qprog = synthesize(small_qmod)

 

両回路の量子ビット数が異なる場合、右側のレジスタで回路を接続します。このレジスタを「res」と呼ぶことにします。まず、合成後にこのレジスタを次のように見つけます:


classiq_big_circuit = QuantumProgram.from_qprog(big_qprog)classiq_small_circuit = 
QuantumProgram.from_qprog(small_qprog)output_registers_big_circuit = 
classiq_big_circuit.data.qubit_mapping.physical_outputsres_register = 
list(output_registers_big_circuit["res"])

 

同様に、小さな回路にも同じ操作を行います。この場合、小さな回路には「res」レジスタのみが含まれていると仮定します。 

その後、回路のqasmファイルを取得し、Qiskitを使用して回路を接続します:


big_qasm = classiq_big_circuit.qasmsmall_qasm = classiq_small_circuit.qasmfrom qiskit import 
QuantumCircuitqc = QuantumCircuit(classiq_big_circuit.data.width)
# The first part of qc is the small circuit connected to the “res” qubits.qc = 
qc.compose(QuantumCircuit.from_qasm_str(small_qasm), res_register)qc = 
qc.compose(QuantumCircuit.from_qasm_str(big_qasm))

 

これで量子回路(qc) は小さな回路と大きな回路で接続されました。この回路を実行するには、そのqasmファイルを保存し、Classiq IDEにアップロードします。 

 

具体的な例として、HHLアルゴリズムは、与えられたAとbに対して、Ax=b のxを求めます。アルゴリズムの難しい部分はAに関するもので、簡単なブロックはbのための状態準備のみを扱います。bが反復的に変化する問題では、状態準備ブロックを反復的に合成し、Aを扱う回路はそのまま使用し続けることができます。このような問題は、工学や物理システムでよく見られます 

 

 

このシミュレーションは、ヒューレット・パッカード・エンタープライズ(Hewlett Packard Enterprise)と共同で実演されました。

 

参照:

https://arxiv.org/abs/2312.04933

https://www.computer.org/csdl/proceedings-article/qce/2023/432302a117/1SuQSLYiTT2 

 

Classiqの合成エンジンは、量子回路の生成を大幅に改善します。例えば、機能的なモデルから始めることで、浅い回路を生成することができたり、ハードウェアでの実行が難しい2量子ビットゲートをなるべく使わない回路を作成することができます。 

 

2つの量子回路を連結することは、どちらか1つの回路が非常に大きい場合に有益です。最適化された回路の合成には時間がかかりますが、実施は一度で済みます。二つ目の回路は小さく、合成プロセスは繰り返され、より速く処理されます。

 

これを行うため、大きな回路と小さな回路を別々に合成します。


from classiq import *
big_qprog = synthesize(big_qmod)
small_qprog = synthesize(small_qmod)

 

両回路の量子ビット数が異なる場合、右側のレジスタで回路を接続します。このレジスタを「res」と呼ぶことにします。まず、合成後にこのレジスタを次のように見つけます:


classiq_big_circuit = QuantumProgram.from_qprog(big_qprog)classiq_small_circuit = 
QuantumProgram.from_qprog(small_qprog)output_registers_big_circuit = 
classiq_big_circuit.data.qubit_mapping.physical_outputsres_register = 
list(output_registers_big_circuit["res"])

 

同様に、小さな回路にも同じ操作を行います。この場合、小さな回路には「res」レジスタのみが含まれていると仮定します。 

その後、回路のqasmファイルを取得し、Qiskitを使用して回路を接続します:


big_qasm = classiq_big_circuit.qasmsmall_qasm = classiq_small_circuit.qasmfrom qiskit import 
QuantumCircuitqc = QuantumCircuit(classiq_big_circuit.data.width)
# The first part of qc is the small circuit connected to the “res” qubits.qc = 
qc.compose(QuantumCircuit.from_qasm_str(small_qasm), res_register)qc = 
qc.compose(QuantumCircuit.from_qasm_str(big_qasm))

 

これで量子回路(qc) は小さな回路と大きな回路で接続されました。この回路を実行するには、そのqasmファイルを保存し、Classiq IDEにアップロードします。 

 

具体的な例として、HHLアルゴリズムは、与えられたAとbに対して、Ax=b のxを求めます。アルゴリズムの難しい部分はAに関するもので、簡単なブロックはbのための状態準備のみを扱います。bが反復的に変化する問題では、状態準備ブロックを反復的に合成し、Aを扱う回路はそのまま使用し続けることができます。このような問題は、工学や物理システムでよく見られます 

 

 

このシミュレーションは、ヒューレット・パッカード・エンタープライズ(Hewlett Packard Enterprise)と共同で実演されました。

 

参照:

https://arxiv.org/abs/2312.04933

https://www.computer.org/csdl/proceedings-article/qce/2023/432302a117/1SuQSLYiTT2 

 

"Qubit Guyのポッドキャスト "について

The Qubit Guy(弊社最高マーケティング責任者ユヴァル・ボーガー)がホストを務めるこのポッドキャストは、量子コンピューティングのオピニオンリーダーをゲストに迎え、量子コンピューティングのエコシステムに影響を与えるビジネスや技術的な疑問について議論します。ゲストは、量子コンピュータのソフトウェアやアルゴリズム、量子コンピュータのハードウェア、量子コンピューティングの主要なアプリケーション、量子産業の市場調査などについて興味深いインサイトを提供します。

ポッドキャストへのゲスト推薦をご希望の方は、こちらまでご連絡ください

さらに見る

見つかりませんでした。

量子ソフトウェア開発を開始

お問い合わせ