№ 2082Квантовые вычисленияУровень 4

Квантовый поиск через моделирование

Решите поисковую задачу с одним решением среди 32 состояний, рассматривая её как квантовое моделирование. Начальное $|\psi\rangle$ — равномерная суперпозиция пяти кубитов; $|x\rangle$ — единственное решение. Оракул полностью определён данной схемой: Toffoli с пятью управляющими кубитами 0,…,4 и целью на вспомогательном q5. При фазовом вспомогательном состоянии − он отмечает решение отрицательной фазой.

1. Постройте приближение к эволюции $H=|x\rangle\langle x|+|\psi\rangle\langle\psi|$.
A. Дополните H1(delt,n=5), реализующий $e^{-i\Delta t|\psi\rangle\langle\psi|}$.
B. Дополните H2(delt,n=5), реализующий $e^{-i\Delta t|x\rangle\langle x|}$.
C. Создайте sim_h, используя H1 и H2. Автор задаёт произведение $e^{-i\pi|x\rangle\langle x|}e^{-i\pi|\psi\rangle\langle\psi|}$, как приближённую эволюцию за Δt=π.
2. Проверьте заявленную автором эквивалентность такого шага и алгоритма Гровера.
A. Создайте данную grover с Oracle и диффузором Amp.
B. Выполните предоставленное сравнение состояний grover и sim_h; автор утверждает совпадение до глобальной фазы.
C. Найдите нужное число итераций R для данного оракула.
D. Дополните qc_sim для поиска R повторениями шага; выполните qc_grover и qc_sim и сравните решения.
3. В конце автор даёт готовый иллюстративный пример с Δt=π/2.1 и R=6, названный примером вероятности точно 1; его исходный код также сохранён ниже. Это не добавленный новый опыт или новое требование задачи.

Порядок двух множителей, глобальную фазу и утверждение о точной вероятности нужно проверять: исходные выражения сохранены, готовые сравнения помещены в разбор.

Исходные определения и заготовки (код сохранён без исполнения):

from qiskit import *
from qiskit.quantum_info import Statevector, partial_trace
from qiskit.visualization import plot_state_qsphere, plot_histogram

import numpy as np
import matplotlib.pyplot as plt
import scipy.linalg as la

sim = Aer.get_backend('qasm_simulator')

n = 5
qc = QuantumCircuit(n+1, name='Oracle')
qc.mct(list(range(n)), n)

Oracle = qc.to_gate()

test = QuantumCircuit(n+1)
test.x(n)
test.h(range(n+1))
test.append(Oracle, range(n+1))
test.h(n)

test.draw()

def H1(delt, n=5):
    
    h1 = QuantumCircuit(n+1, name='H1')

    #### Your code goes here ######

    



    
    ###############################
    
    return h1.to_gate()

def H2(delt, n=5):
    
    h2 = QuantumCircuit(n+1, name='H2')

    #### Your code goes here ######

    
    
    
    
    
    
    
    ###############################
    
    return h2.to_gate()

#### Your code goes here ####








############

sim_h.draw()

qc = QuantumCircuit(n+1, name='Amp')
qc.h(range(n))
qc.x(range(n))
qc.mct(list(range(n)), n)
qc.x(range(n))
qc.h(range(n))

Amp = qc.to_gate()

grover = QuantumCircuit(n+1)
grover.x(n)
grover.h(range(n+1))
grover.append(Oracle, range(n+1))
grover.append(Amp, range(n+1))
grover.h(n)
grover.x(n)

grover.draw()

st_simh = Statevector.from_instruction(sim_h)
st_grover = Statevector.from_instruction(grover)
print('grover circuit and sim_h circuit genrate the same output state: ' ,st_simh == st_grover)

#### your code goes here ####




######
print(R)

## The circuit to solve the search problem through Grover's algorithm. 
n = 5 

qc_grover = QuantumCircuit(n+1, n)
qc_grover.x(n)
qc_grover.h(range(n+1))
for _ in range(int(R)):
    qc_grover.append(Oracle, range(n+1))
    qc_grover.append(Amp, range(n+1))

qc_grover.h(n)
qc_grover.x(n)
qc_grover.barrier()
qc_grover.measure(range(n), range(n))


qc_grover.draw()

qc_sim = QuantumCircuit(n+1, n)
qc_sim.h(range(n))

#### Your code goes here ####








counts = execute([qc_grover, qc_sim], sim).result().get_counts()
plot_histogram(counts, legend=['Grover', 'Hamiltonian'])

n = 5

qc = QuantumCircuit(n+1, n)
qc.h(range(n))

delt, R = np.pi/2.1, 6

for _ in range(int(R)):
    qc.append(H1(delt), range(n+1))
    qc.append(H2(delt), range(n+1))

qc.measure(range(n) ,range(n))    
qc.draw()

count = execute(qc, sim).result().get_counts()
plot_histogram(count)

Сообщить об ошибке

Войти, чтобы отправить материал.