Шаг 1 Вот код Qiskit. Я инициализировал четыре кубита.
qr1 = QuantumRegister(4)
mea = ClassicalRegister(2)
circuit = QuantumCircuit(qr1,mea)
initial=[[1,0],[0,1]]
circuit.initialize(initial[1], 0)
circuit.initialize(initial[1], 1)
# Uc
circuit.x(qr1[1])
circuit.ccx(qr1[0],qr1[1],qr1[2])
circuit.x(qr1[0])
circuit.x(qr1[1])
circuit.ccx(qr1[0],qr1[1],qr1[3])
circuit.x(qr1[0])
Его схема:
Шаг 2 IBM Qunatum Composer: Здесь нет такого инструмента для инициализации кубиса. Пожалуйста, помогите мне, как инициализировать здесь?
Язык OpenQASM является стандартом для схем обмена среди нескольких инструментов квантовых вычислений. Вы можете использовать для переноса схемы Qiskit в IBM Quantum Composer.
print(circuit.qasm())
OPENQASM 2.0;
include "qelib1.inc";
gate multiplex1_reverse_dg q0 { ry(pi) q0; }
...
Вы можете взять вывод и вставить его в поле OpenQASM 2.0 в IBM Quantum Composer.
Примечание. На данный момент в Qiskit есть проблема, заключающаяся в том, что QASM-экспортирует схему с инструкциями по инициализации как «гейты». Для вашего конкретного случая вам нужно сначала сделать decompose
:
print(circuit.decompose().qasm())
Подробное объяснение initialize
: Инициализация Qiskit — это сброс с последующей подготовкой состояния. Возьмем следующий пример:
circuit = QuantumCircuit(1)
circuit.initialize([0,1], 0)
print(circuit.decompose().qasm())
OPENQASM 2.0;
include "qelib1.inc";
gate multiplex1_reverse_dg q0 { ry(pi) q0; } #3
gate disentangler_dg q0 { multiplex1_reverse_dg q0; }
gate state_preparation(param0,param1) q0 { disentangler_dg q0; }
qreg q[1];
reset q[0]; #1
state_preparation(0,1) q[0]; #2
В #1
, reset
, а затем state_preparation
в #2
. После некоторого вложенного вызова вызывается стандартный ry
в #3
. В этом случае circuit.initialize([0,1], 0)
эквивалентно reset q0[0]; ry(pi) q0[0]
.
Потому что разные инструменты поддерживают разные наборы инструкций. И Qiskit, и IBM Quantum composer поддерживают расширенный набор инструкций OpenQASM 2.0. Оба могут переписать свои операции с точки зрения OpenQASM 2.0 и использовать это для общения друг с другом. Взаимодействие между инструментами затруднено.
Но я немного сбит с толку тем, что это одно и то же, то есть инициализация в Qiskit или в QASM. Можете ли вы немного объяснить это. ?
Qiskit initialize
— это reset
с последующей подготовкой состояния (см. qiskit.org/documentation/stubs/…). Это инструкция, состоящая из этих двух операций, как подпрограмма, вызывающая другие подпрограммы в обычном процедурном программировании. Я добавил объяснение OpenQASM2, чтобы проиллюстрировать это. Вы можете реализовать свой собственный initialize
для этого случая в IBM Quantum Experience с помощью reset q0[0]; x q0[0]
.
Но почему в IBM Composer нет символа инициализации