초기 상태를 만들 수 없습니다 |Ψ0⟩ 과 |b⟩IBM 16 qubits 버전에서. 반면 에, IBM 칩에 의해 구현 된 게이트가 이러한 가능성을 제공함에 따라 임의로 낮은 오류 1 로이 를 근사화 할 수 있습니다.
여기 당신은 두 가지 양자 상태를 요구합니다 :
- |b⟩전혀 제한되지 않습니다. 상태|b⟩ 의 벡터로 표현된다 N (벡터가 단일 규범을 갖는 한) 모든 것이 될 수있는 복소수.
- |Ψ0⟩ 특별한 경우로 볼 수 있습니다 |b⟩여기서 계수 bi 더 제한적입니다.
이 분석을 통해 생성에 사용할 수있는 모든 방법 |b⟩ 또한 만들 수 있습니다 |Ψ0⟩. 반면에|Ψ0⟩ 더 제한적이며 더 효율적인 알고리즘이 생성되기를 바랍니다. |Ψ0⟩.
에 유용한 |b⟩ 과 |Ψ0⟩: 양자 논리 회로의 합성에 기초하여 (Shende, Bullock & Markov, 2006) QISKit Python SDK는 임의의 양자 상태를 초기화하는 일반적인 방법을 구현합니다.
에 유용한 |Ψ0⟩: 효율적으로 통합 가능한 확률 분포에 해당하는 중첩을 생성하면 (Grover & Rudolph, 2002) 진폭이 일부 제약 조건에 대한 확률 분포를 나타내는 상태를 초기화하는 알고리즘을 신속하게 제시합니다. 이러한 제약은|Ψ0⟩선형 방정식 시스템을 풀기위한 Quantum 알고리즘 에 따르면 (Harrow, Hassidim & Lloyd, 2009) , 마지막 페이지 5 행.
QISKit에서의 구현을 위해 주어진 양자 상태를 초기화하는 샘플이 있습니다 :
import qiskit
statevector_backend = qiskit.get_backend('local_statevector_simulator')
###############################################################
# Make a quantum program for state initialization.
###############################################################
qubit_number = 5
Q_SPECS = {
"name": "StatePreparation",
"circuits": [
{
"name": "initializerCirc",
"quantum_registers": [{
"name": "qr",
"size": qubit_number
}],
"classical_registers": [{
"name": "cr",
"size": qubit_number
}]},
],
}
Q_program = qiskit.QuantumProgram(specs=Q_SPECS)
## State preparation
import numpy as np
from qiskit.extensions.quantum_initializer import _initializer
def psi_0_coefficients(qubit_number: int):
T = 2**qubit_number
tau = np.arange(T)
return np.sqrt(2 / T) * np.sin(np.pi * (tau + 1/2) / T)
def get_coeffs(qubit_number: int):
# Can be changed to anything, the initialize function will take
# care of the initialisation.
return np.ones((2**qubit_number,)) / np.sqrt(2**qubit_number)
#return psi_0_coefficients(qubit_number)
circuit_prep = Q_program.get_circuit("initializerCirc")
qr = Q_program.get_quantum_register("qr")
cr = Q_program.get_classical_register('cr')
coeffs = get_coeffs(qubit_number)
_initializer.initialize(circuit_prep, coeffs, [qr[i] for i in range(len(qr))])
res = qiskit.execute(circuit_prep, statevector_backend).result()
statevector = res.get_statevector("initializerCirc")
print(statevector)
(1) 여기서 "오류"는 완벽한 양자 컴퓨터 다루는 이상적인 상태와 근사값과의 오차 (즉 결 어긋남 없음 없음 게이트 오차)를 지칭한다.