OpenQASM 3.0 を使用した特定の量子ビットの測定
Amazon Braket が提供するローカル状態ベクトルシミュレーターとローカル密度マトリックスシミュレーターは、回路の量子ビットのサブセットを選択的に測定できる OpenQASM プログラムを送信することができます。この機能は部分測定とも呼ばれ、よりターゲットを絞った効率的な量子計算を可能にします。例えば、次のコードスニペットでは、2 量子ビットの回路を作成し、2 番目の量子ビットを測定せずに最初の量子ビットのみを測定できます。
partial_measure_qasm = """ OPENQASM 3.0; bit[1] b; qubit[2] q; h q[0]; cnot q[0], q[1]; b[0] = measure q[0]; """
この例には q[0] と q[1] の 2 つの量子ビットを持つ量子回路がありますが、ここでは最初の量子ビットの状態のみを測定するとします。これは、qubit[0] の状態を測定し、その結果を古典ビット b[0] に保存する b[0] = measure q[0] の行によって実現されます。この部分測定のシナリオを実行するには、Amazon Braket が提供するローカル状態ベクトルシミュレーターで次のコードを実行します。
from braket.devices import LocalSimulator local_sim = LocalSimulator() partial_measure_local_sim_task = local_sim.run(OpenQASMProgram(source=partial_measure_qasm), shots = 10) partial_measure_local_sim_result = partial_measure_local_sim_task.result() print(partial_measure_local_sim_result.measurement_counts) print("Measured qubits: ", partial_measure_local_sim_result.measured_qubits)
デバイスで部分測定がサポートされているかどうかは、[requiresAllQubitsMeasurement] フィールドの action のプロパティを調べることで確認できます。そのプロパティが False の場合は、部分測定がサポートされています。
from braket.devices import Devices AwsDevice(Devices.Rigetti.Ankaa3).properties.action['braket.ir.openqasm.program'].requiresAllQubitsMeasurement
この場合、 requiresAllQubitsMeasurement は False です。これは、必ずしもすべての量子ビットを測定する必要がないことを示しています。