Квантовые схемы и сфера Блоха
Ранее я рассказывал о построении простых квантовых схем и мышлении квантовых вентилей как матричных операторов. Также с помощью суперпозиции кубитов мы научились создавать запутанные состояния. Если вы вдруг окажетесь здесь, в этом посте, не прочитав два предыдущих поста, вам может быть немного сложно следить за ним. Прежде чем углубиться в важную концепцию, известную как фазовый откат, в этом посте я опишу различные квантовые схемы и то, как развить интуицию, чтобы начать работу с несколькими кубитами и квантовыми вентилями. Поскольку сфера Блоха часто используется для визуализации квантовых состояний, мы также научимся визуализировать и понимать квантовые состояния. Вступаем!!
1-й контур:
В последнем посте я описал, как создать запутанное состояние, используя один вентиль Адамара и один вентиль CNOT (CX). Сначала мы создаем состояние суперпозиции, применяя вентиль Адамара, затем применяем вентиль CX. Вместо того, чтобы использовать один вентиль Адамара, что произойдет, если мы применим 2 вентиля Адамара? Давайте сначала построим схему -
import qiskit as q import matplotlib.pyplot as plt qr = q.QuantumRegister(2) cr = q.ClassicalRegister(2) circuit = q.QuantumCircuit(qr, cr) circuit.h(qr[0]) # apply hadamard gate on first qubit. circuit.h(qr[1]) # apply hadamard gate on second qubit. # apply cnot gate. circuit.cx(qr[0], qr[1]) display(circuit.draw())
Применяя два вентиля Адамара, а затем вентиль CX с битом управления на первом кубите, мы можем получить следующую принципиальную схему:
Чего мы ожидаем на данном этапе? Начальные этапы кубитов всегда равны нулю, если они не инициализированы в другое состояние. Таким образом, вентиль H, действующий на стадии |0⟩, даст нам |+⟩. Поскольку на этапе |0⟩ действует 2 H вентиля, мы получим на выходе тензорное произведение |+⟩ ⊗ |+⟩. |+⟩ ⊗ |+⟩ = (|00⟩ + |01⟩ + |10⟩ + |11⟩), и работа вентиля CX на этом этапе ничего не изменит. Таким образом, если мы смоделируем эту схему на нашей рабочей станции, мы запустим все 4 этапа с почти равной вероятностью.
circuit.measure(qr, cr) simulator = q.Aer.get_backend(name=’qasm_simulator’) results = q.execute(circuit, backend=simulator, ).result() q.visualization.plot_histogram(results.get_counts(circuit))
Мы также можем построить векторы состояния для отдельных кубитов. Давайте сделаем это с помощью следующего блока кода:
statevec = q.Aer.get_backend(‘statevector_simulator’) final_state = q.execute(circuit,statevec).result().get_statevector() q.visualization.plot_bloch_multivector(final_state)
Как мы обсуждали непосредственно перед измерением, применяющим вентили Адамара к обоим кубитам, они переключились на базис X из Z (|0⟩, |1⟩), и вентиль CNOT не изменяет это состояние. Это может объяснить сюжет ниже —
Давайте немного изменим эту схему, чтобы лучше понять.
2-й контур:
Теперь давайте добавим ворота X перед одними воротами Адамара, как показано ниже:
Как мы узнали ранее, X-гейт меняет состояние с |0⟩ на |1⟩. Теперь один вентиль H действует в состоянии |0⟩, а другой действует в состоянии |1⟩. Теперь вы можете подумать о результате по сравнению с предыдущей схемой. Тензорное произведение между состоянием |+⟩ (результатом H|0⟩) и |-⟩ (результатом H|1⟩) будет (|+⟩ ⊗ |-⟩ = |00⟩ -|01⟩+|10⟩ -|11⟩). Применение вентиля CX к этому этапу изменит этап |00⟩ -|01⟩-|10⟩+|11⟩, что эквивалентно |-⟩ ⊗ |-⟩. Измерение вероятности даст нам тот же результат, что и раньше, но мы сможем заметить разницу, если нанесем векторы состояния. На сфере Блоха векторы состояния будут такими, как показано ниже:
3-й контур:
Чтобы понять представление сферы Блоха и схемы с несколькими кубитами еще более подробно, давайте немного изменим схему 2. Вместо применения вентиля X к 1-му кубиту мы применим его к 0-му кубиту. Давайте построим цепь
qr2 = q.QuantumRegister(2) cr2 = q.ClassicalRegister(2) circuit2 = q.QuantumCircuit(qr2, cr2) circuit2.x(qr2[0]) # X-gate applied to 0th qubit circuit2.h(qr2[0]) circuit2.h(qr2[1]) circuit2.cx(qr2[0], qr2[1]) circuit2.draw()
Как мы видим здесь, по сравнению с предыдущей схемой (схема 2), ворота X поменялись местами. Вентиль H, действующий в состоянии |0⟩ и |1⟩, даст тот же результат. Но тензорное произведение будет другим |-⟩ ⊗ |+⟩ = |-+⟩ = (|00⟩ + |01⟩ -|10⟩-|11⟩). Здесь мы применяем вентиль CX, и он ни на что не повлияет. Построение блоховской сферы векторов состояния после выполнения схемы должно привести к тому, что кубит 0 окажется в состоянии |-⟩, а кубит 1 — в состоянии |+⟩. Посмотрим -
Моделирование схемы на нашей рабочей станции приведет к тому, что показано на рис. 2, где все 4 состояния присутствуют с равной вероятностью.
4-й контур:
Давайте добавим еще несколько ворот, чтобы лучше понять наше понимание. По сравнению с 1-й схемой мы добавим еще один вентиль Адамара после вентиля CX, как показано ниже:
qr3 = q.QuantumRegister(2) cr3 = q.ClassicalRegister(2) circuit3 = q.QuantumCircuit(qr3, cr3) circuit3.h(qr3[0]) circuit3.h(qr3[1]) circuit3.cx(qr3[0], qr3[1]) ## till this is first circuit. Now we add one more H gate. circuit3.h(qr3[0]) circuit3.draw()
Можете ли вы угадать/рассчитать конечное состояние кубитов? Мы уже видели ответ до ворот CX раньше. Ворота CX применялись к состоянию |++⟩, и состояние системы оставалось неизменным. Теперь мы добавили еще один H-гейт. Этот вентиль H добавляется к 0-му кубиту. H|++⟩ = |+0⟩ , потому что применение вентиля H к состоянию |+⟩ вернет его обратно в |0⟩. Еще раз мы можем увидеть это, построив векторы конечного состояния.
Тензорное произведение |+⟩ ⊗ |0⟩ даст нам |00⟩ + |10⟩, и это также можно проверить, смоделировав схему на нашем локальном компьютере и построив график распределения, как мы сделали для схемы 1.
5-й контур:
Наконец, мы заканчиваем еще одним вариантом предыдущей схемы. Вместо добавления последнего вентиля Адамара к 0-му кубиту мы добавляем его к 1-му кубиту. Таким образом, схема будет выглядеть так, как показано ниже:
По сравнению с предыдущей схемой тензорное произведение будет таким, как показано ниже — |0+⟩, и мы можем видеть, что с помощью визуализации сферы Блоха
Конечные состояния при моделировании на локальном компьютере дадут вероятность 50% для каждого из состояний |00⟩ и |01⟩.
Вывод:
Таким образом, чтобы улучшить наше понимание простых схем с несколькими кубитами, мы обсудили различные схемы и проверили наше понимание, смоделировав эти схемы на нашем локальном компьютере и визуализировав векторы состояния в сфере Блоха. В предыдущих двух постах мы рассмотрели строительные блоки квантовых схем — матричные представления квантовых вентилей, запутанность, состояние Белла и т. д. Обсуждаемые здесь схемы являются расширением предыдущих и будут важны позже для создания необходимой концепции. называемый Phase Kickback, который обеспечит основу для понимания многих основных алгоритмов, например: алгоритма Шора, алгоритма Дойча и т. д.
Блокнот Python, используемый здесь, доступен на моем GitHub.
Держись, Ура!!