无法创建初始状态 |Ψ0⟩ 和 |b⟩在IBM 16 qubits版本上。另一方面,由于IBM芯片实现的门提供了这种可能性,因此可以用任意低的误差1近似它们。
在这里,您要求2种不同的量子态:
- |b⟩完全不受限制。状态|b⟩ 由一个向量表示 N 复数可以是任何数(只要向量具有unit范数)。
- |Ψ0⟩ 可以看作是 |b⟩,其中系数 bi 更受约束。
通过此分析,可以使用任何创建方法 |b⟩ 也可以用来创建 |Ψ0⟩。另一方面,|Ψ0⟩ 更受限制,我们可以希望存在更有效的算法来产生 |Ψ0⟩。
对...有用 |b⟩ 和 |Ψ0⟩:基于量子逻辑电路的综合(Shende,Bullock和Markov,2006年),QISKit Python SDK实现了一种初始化任意量子状态的通用方法。
对...有用 |Ψ0⟩:创建与有效可积概率分布相对应的叠加(Grover&Rudolph,2002),提出了一种算法来快速初始化状态,该状态的振幅表示遵守某些约束的概率分布。这些约束得到尊重|Ψ0⟩根据解决方程组线性系统的量子算法(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这里的“误差”是指在处理理想的量子计算机时理想状态与近似值之间的误差(即无退相干,无门误差)。