解説
特定の計算基底状態の確率振幅を増幅する量子アルゴリズムとして グローバーのアルゴリズム や 振幅増幅 (Amplitude amplification) が知られています。これらのアルゴリズムの所望の計算基底状態の観測確率はイテレーション数に対する 周期関数として表され 、観測確率を に近い値まで増幅することはできますが、ちょうど にすることは一般にできません。
これに対し、fixed-point amplitude amplification と呼ばれるアルゴリズムは所望の計算基底状態の確率振幅をイテレーション数に対して単調に増加させることができます。すなわち、十分なイテレーション数に対して観測確率が に収束します。
よって、本問は fixed-point amplitude amplification によって解くことができます。
次に fixed-point amplitude amplification の概要を説明します。 様々な手法が提案されていますが、ここでは、Grover の phase-shift 法 を考えます。
はじめに、増幅前の初期状態を 1、増幅後の所望の状態を と定義します。 phase-shift 法 では何らかのユニタリ操作 2 に対し、次式で再帰的に定義される演算子 を初期状態 に作用させることで振幅増幅を行います。
ただし、 はエルミート転置を表し、選択的位相シフト演算子 は次式で定義されます。
なお、オラクル には 問題 B4 で実装したものを利用できます 3。
アルゴリズムの詳細や背景については解答例や文献 [1], [2], [3] を参照してください。
次に誤差解析を行います。
状態 から所望の計算基底状態のいづれかを観測する確率を とすることで、初期誤差 を定義します。本問においては、 を「アダマールゲートをすべての量子ビットに作用させる操作 ()」とすると、問題 C1 と同様に 番目までの量子ビットに を作用させることで、 が保証されます 4 。
このとき、 と の誤差は で表されます 5 。
よって、誤差を 未満にするために必要な再帰深さ は次式を解くことで求めることができます。
式の解は と表されます。したがって、 とすることで問題の制約内で十分に誤差を小さくできます。
解答例
解答例は以下の通りです。
from qiskit import QuantumCircuit
from qiskit.circuit.library import PhaseGate
import math
def Rt(n: int, L: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
for i in range(n):
if not (L >> i) & 1:
continue
for j in range(i + 1, n):
if not (L >> j) & 1:
qc.x(j)
qc.x(i)
if i == n - 1:
qc.p(math.pi / 3, i)
else:
qc.append(PhaseGate(math.pi / 3).control(n - i - 1), range(i, n))
qc.x(i)
for j in range(i + 1, n):
if not (L >> j) & 1:
qc.x(j)
return qc
def Rs(n: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
qc.x(range(n))
if n == 1:
qc.p(math.pi / 3, 0)
else:
qc.append(PhaseGate(math.pi / 3).control(n - 1), range(n))
qc.x(range(n))
return qc
def U(m: int, n: int, L: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
if m == 0:
qc.h(range(n))
return qc
u = U(m - 1, n, L)
qc.compose(u, inplace=True)
qc.compose(Rt(n, L), inplace=True)
qc.compose(u.inverse(), inplace=True)
qc.compose(Rs(n), inplace=True)
qc.compose(u, inplace=True)
return qc
def solve(n: int, L: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
k = math.ceil(math.log2(L))
if k == 0:
return qc
m = 2
qc.compose(U(m, k, L), inplace=True)
return qc
References
- [1] L. K. Grover et al., “Quantum algorithms with fixed points: The case of database search,” arXiv:quant-ph/0603132, Mar. 2006.
- [2] G. Brassard et al., “Quantum amplitude amplification and estimation,” arXiv:quant-ph/0005055, vol. 305, pp. 53–74, 2002.
- [3] L. K. Grover, “Fixed-point quantum search,” Physical Review Letters, vol. 95, no. 15, p. 150501, Oct. 2005.
Footnotes
-
本問においては、増幅前の初期状態 はゼロ状態と考えられます。 ↩
-
状態 から所望の計算基底状態のいづれかを観測できる任意のユニタリ操作を として利用できます。詳しくは後述の誤差解析を参照してください。ここでは、 を「アダマールゲートをすべての量子ビットに作用させる操作 ()」と解釈して問題ありません。 ↩
-
正確には B4 問題のオラクルは 式を満たさず、以下の条件を満たす演算子 として定義できます。
証明は省きますが、以上の定義の場合にも fixed-point amplitude amplification は動作することが示せます。
※ こちらの部分は PSL さんにご指摘いただきました。ありがとうございます。 ↩ -
をすべての量子ビットに作用させると、初期誤差 が増大し、より大きい再帰深さ が必要になります。テストケースによっては制約の回路の深さをクリアすることができません。 ↩
-
当初 となっていましたが、 に修正しました。
※ こちらの部分は PSL さんにご指摘いただきました。ありがとうございます。 ↩