Japanese
言語
English
Japanese
Spanish

Primitiveにおけるパラメーター付き回路

パラメーター付き回路は、量子アルゴリズム設計のために一般的に使用されるツールです。 backend.run() はパラメーター付き回路を受け付けないため、アルゴリズムワークフローにパラメーター結合ステップを組み込む必要がありました。Primitive はパラメーター結合を内部で行うことができ、アルゴリズム側のロジックを簡略化することができます。

以下の例では、パラメーター付き回路を管理するための新しいワークフローをまとめています。

パラメーター付き回路を定義しましょう。

from qiskit.circuit import QuantumCircuit, ParameterVector

n = 3
thetas = ParameterVector('θ',n)

qc = QuantumCircuit(n, 1)
qc.h(0)

for i in range(n-1):
    qc.cx(i, i+1)

for i,t in enumerate(thetas):
    qc.rz(t, i)

for i in reversed(range(n-1)):
    qc.cx(i, i+1)

qc.h(0)
qc.measure(0, 0)

qc.draw()

回路に次のパラメーターの値を割り当てます:

import numpy as np
theta_values = [np.pi/2, np.pi/2, np.pi/2]

これまで

以前は、パラメーターの値は backend.run() を呼び出す前にそれぞれの回路のパラメーターにバインドする必要がありました。

from qiskit import Aer

bound_circuit = qc.bind_parameters(theta_values)
bound_circuit.draw()

backend = Aer.get_backend('aer_simulator')
job = backend.run(bound_circuit)
counts = job.result().get_counts()
print(counts)

Primitives

現在、Primitiveはパラメーター付き回路をパラメーターの値とともに直接取り込み、primitiveのサーバー側でパラメーター割り当て操作をより効率的に行うことができるようになりました。

この機能は、繰り返しアルゴリズムを扱う場合に特に興味深いもので、パラメーターの値が変化しても、パラメーター付き回路は呼び出す間に変化しないためです。Primitiveは、一度トランスパイルしてから、バインドされていない回路をキャッシュすることができ、古典的なリソースをより効率的に使用することができます。さらに、更新されたパラメーターのみがクラウドに転送され、追加の帯域幅を節約することができます。

from qiskit.primitives import Sampler

sampler = Sampler()
job = sampler.run(qc, theta_values)
result = job.result().quasi_dists
print(result)