解説
解法(1): グローバーのアルゴリズムと phase shift 法を組み合わせる
QPC001 C2 問題 と同様に、今回のような任意の量子状態の準備には固定点振幅増幅 (fixed-point amplitude amplification) と呼ばれる量子アルゴリズムを利用できます。
固定点振幅増幅の一種であるグローバーの phase shift 法は「所望の計算基底状態の確率振幅をイテレーション数に対して単調に増加させる」という理想的な性質をもちますが、同じく振幅増幅を行うグローバーのアルゴリズムと比較して問合せ計算量1の観点で非効率(古典計算と同等)であることが知られています。 phase shift 法の詳細については、QPC001 C2 問題の解説 を参照してください。
今回の問題では、グローバーのアルゴリズムと phase shift 法をうまく組み合わせることで、効率的に状態 を生成できます。
以下、実数 の値で場合分けして考えます。
の場合( phase shift 法のみを使う)
phase shift 法を 回再帰することを考えます。
このとき、誤り確率の最大値 () と必要な ゲートの数は次のように整理されます。
0 | 1 | 2 | 3 | 4 | |
の数 | 0 | 1 | 4 | 13 | 40 |
誤り確率の最大値 | 0.94 | 0.83 | 0.57 | 0.19 | 0.0067 |
よって、 回再帰すれば誤差を十分に小さくできます。
の場合は必要な ゲートの数が 回となり、制約を満たしません。
の場合(グローバーのアルゴリズムと phase shift 法を組み合わせる)
グローバーのアルゴリズムを使うことを考えます。以下、, , を次のように定義します。
とし、 とおくと、以下が成り立ちます。
また、グローバーの振幅増幅を 回行ったベクトルを とすると、以下が成り立ちます。
これを解くと、 は次のように表されます。
よって、 が成り立ちます。
ここで、 は十分に小さいので、 より、次の不等式が近似的に成り立ちます。
以上をもとに としてグローバーのアルゴリズムを適用します。
また、 より、 回以下の振幅増幅をすることで誤り確率を 以下にできます。
最後に、, として再帰的に phase shift 法を適用します。
このとき、誤り確率の最大値 () と必要な ゲートの数は次のように整理されます。
0 | 1 | 2 | |
, の数 | 9 | 28 | 85 |
誤り確率の最大値 | 0.5 | 0.125 | 0.002 |
よって、 ゲートの適用回数は 回以下で正答できます。
解答例
解答例は以下の通りです。
import math
from qiskit import QuantumCircuit
MAX_R_COUNT = 100
def R_0(n: int, theta: float) -> QuantumCircuit:
qc = QuantumCircuit(n)
qc.x(range(n))
if n == 1:
qc.p(theta, 0)
else:
qc.mcp(theta, list(range(n - 1)), n - 1)
qc.x(range(n))
return qc
def Grover(n: int, P: float, U, R) -> QuantumCircuit:
qc = QuantumCircuit(n)
cnt = int(math.pi / (4 * (4 * P) ** 0.5))
qc.compose(U(), inplace=True)
for _ in range(cnt):
qc.compose(R(math.pi), inplace=True)
qc.compose(U().inverse(), inplace=True)
qc.compose(R_0(n, math.pi), inplace=True)
qc.compose(U(), inplace=True)
return qc, cnt
def PhaseShift(n: int, U_s, R) -> QuantumCircuit:
qc = QuantumCircuit(n)
qc.compose(U_s, inplace=True)
qc.compose(R(math.pi / 3), inplace=True)
qc.compose(U_s.inverse(), inplace=True)
qc.compose(R_0(n, math.pi / 3), inplace=True)
qc.compose(U_s, inplace=True)
return qc
def solve(n: int, P: float, U, R) -> QuantumCircuit:
U_s, cnt_R = Grover(n, P, U, R)
while 3 * cnt_R + 1 <= MAX_R_COUNT:
U_s = PhaseShift(n, U_s, R)
cnt_R = 3 * cnt_R + 1
return U_s
解法(2): Fixed-point quantum search with an optimal number of queries [1]
解法(1) で述べたように、グローバーの phase shift 法はグローバーのアルゴリズムと比較して問合せ計算量の観点で非効率であるため、単に phase shift 法を適用するだけではこの問題は解けません。 しかし、2014年にグローバーのアルゴリズムと同等の効率性を持ちながら、固定点振幅増幅を実現するアルゴリズムが提案されています [1]。
よって、このアルゴリズムを適用することでこの問題を解くことができます。
必要な ゲートの適用回数は 回以下になり、 phase shift 法で必要な 回の平方根に抑えることができます。
詳細は Writer 解説 (pdf) を参照して下さい。
解答例
解答例は以下の通りです。
import math
from qiskit import QuantumCircuit
from scipy.special import eval_chebyt
def R_0(n: int, theta: float) -> QuantumCircuit:
qc = QuantumCircuit(n)
qc.x(range(n))
if n == 1:
qc.p(theta, 0)
else:
qc.mcp(theta, list(range(n - 1)), n - 1)
qc.x(range(n))
return qc
# Calculate the minimum number of query L
def calculate_L(delta: float, lambda_: float) -> int:
L = int(math.ceil(math.log(2 / delta) / math.sqrt(lambda_)))
# Check if L is odd
if L % 2 == 0:
L += 1
return L
def calculate_gamma(L: int, delta: float) -> float:
# Calculate the Chebyshev polynomial T_{1/L}(1/δ)
chebyshev_value = eval_chebyt(1 / L, 1 / delta)
# γ is the inverse of the Chebyshev value
return 1 / chebyshev_value
# Define the fixed-point Grover's algorithm
def fixed_point_grover(n: int, delta: float, lambda_: float, U, R) -> QuantumCircuit:
L = calculate_L(delta, lambda_)
# Calculate the angles for Grover's iteration
gamma = calculate_gamma(L, delta)
angles = [
-2 * math.atan(1 / (math.tan(2 * math.pi * j / L) * math.sqrt(1 - gamma**2)))
for j in range(1, L // 2 + 1)
]
qc = QuantumCircuit(n)
qc.compose(U(), inplace=True)
for alpha, beta in zip(angles, reversed(angles)):
qc.compose(R(beta), inplace=True)
qc.compose(U().inverse(), inplace=True)
qc.compose(R_0(n, alpha), inplace=True)
qc.compose(U(), inplace=True)
return qc
def solve(n: int, P: float, U, R) -> QuantumCircuit:
delta = 0.01
lambda_ = P
return fixed_point_grover(n, delta, lambda_, U, R)
References
- [1] T. J. Yoder, G. H. Low, and I. L. Chuang, “Fixed-point quantum search with an optimal number of queries,” Physical Review Letters, vol. 113, no. 21, p. 210501, 2014.
Footnotes
-
今回の問題では問合せ計算量は の作用回数を指します。 ↩