LoginSignup
1
1

【Qulacs】量子フーリエ変換を書いてみた。【量子コンピュータ】

Posted at

皆さん、こんにちは!
2回目の投稿になります。
今回は量子フーリエ変換(Quantum transformatio, QFT)を実装していきます。詳しい解説はQuantum Native DojoやNielsen & Chuangなどの書籍を参照してください。

1. 必要なライブラリをインポート

import numpy as np
from qulacs import QuantumState, QuantumCircuit
from qulacs.gate import Z, H, S, T, DenseMatrix, to_matrix_gate

今回使うライブラリに絞って、インポートしました。

2 制御Rnゲートの実装

def control_R(j, target, control):
    if j == 1:
        gate = to_matrix_gate(Z(target))
    if j == 2:
        gate = to_matrix_gate(S(target))
    if j == 3:
        gate = to_matrix_gate(T(target))
    else:
        gate = DenseMatrix(target, [[1 , 0], [0, np.exp(1j * 2.0*np.pi / 2.0**j)]])
    gate.add_control_qubit(control, 1)
    return gate

Sympy(にはあるのか知らないが、)と違って、Qlacsには、DenseMatrixが実装されているので、これで、$R_4$以降のゲートの演算子を与える事ができる。

3 量子フーリエ変換の回路

回路図(参考リンク参照)に従って実装、再帰的に書かれているので、
割とコンパクトに書ける。

def qft_circuit(n):
    circuit = QuantumCircuit(n)
    for target in range(n):
        circuit.add_gate(H(target))
        for control in range(target+1, n):
            j = control + 1
            circuit.add_gate(control_R(j, target, control))
    return circuit

4. Qubitの用意

Quantum native Dojoのやり方に従って4Qubitを用意してみる。4QubitならDenseMatrixも使うので、n=3の場合の拡張になっている。

n = 4
state = QuantumState(n)
state.set_computational_basis(0)
buffer = QuantumState(n)
for i in range(1, 2**n):
    buffer.set_computational_basis(i)
    state.add_state(buffer)

state.multiply_coef(1 / np.sqrt(2**n))
print("実行前: " , state)

結果

実行前:   *** Quantum State ***
 * Qubit Count : 4
 * Dimension   : 16
 * State vector : 
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)
(0.25,0)

5 回路を作用させる

circuit = qft_circuit(n)
circuit.update_quantum_state(state)
print("実行後: ", state)

結果

実行後:   *** Quantum State ***
 * Qubit Count : 4
 * Dimension   : 16
 * State vector : 
(1,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)
(0,0)

n=3の場合の結果と一致している。

6 感想

Sympyの方がビジュアル的にはわかりやすいが、慣れれば色々な機能があるので、Qulacsの方が応用範囲は広そうだ。今後もたくさん練習していろいろ書けるようになりたい。

7 参考文献

  1. Quantum Native Dojo!
    https://dojo.qulacs.org/ja/latest/
  2. Qulacs使ってみた報告
    https://zenn.dev/2201/articles/8c773e3ba29200
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1