Случайная квадратная схема для квантового объёма
Создайте random_square_circuit(n), которая принимает целое n и возвращает случайную QuantumCircuit ширины и глубины n, пригодную для опыта по квантовому объёму. Можно использовать приведённый в этом условии исходный код генерации случайного слоя.
Ширина — число кубитов, глубина модели — число слоёв. Каждый слой сначала случайно переставляет метки кубитов, затем применяет случайные двухкубитные унитарные операции к непересекающимся парам. При нечётном числе кубитов один в слое не действует. random_unitary(4) даёт матрицу 4×4 для двух кубитов. Исходный пример и рисунок показывают один слой на пяти кубитах.
Полная исходная программа:
qubit_list = [0,1,2,3,4]
# width == depth (we'll call it 'SIZE')
SIZE = len(qubit_list)
from qiskit.quantum_info import random_unitary
random_unitary(4)
from qiskit import QuantumCircuit
qv_layer = QuantumCircuit(SIZE)
for pair in range(SIZE//2): # number of pairs is SIZE/2
qubit_indices = qubit_list[pair*2:pair*2+2]
gate = random_unitary(4)
qv_layer.append(gate, qubit_indices)
qv_layer.draw()
from random import shuffle
shuffle(qubit_list)
qubit_list