Comment ajouter plusieurs paramètres dans le circuit qiskit?
Sep 02 2020
Je veux construire un circuit ansatz dans Qiskit, j'ai donc besoin de quelques paramètres pour agir sur les portes (par exemple RX (a), RY (b)). Dans les didacticiels Qiskit, je trouve un moyen d'implémenter un paramètre:
import numpy as np
theta_range = np.linspace(0, 2 * np.pi, 128)
circuits = [qc.bind_parameters({theta: theta_val})
for theta_val in theta_range]
circuits[-1].draw()
Il n'y a qu'un seul paramètre, theta. Je veux plus de paramètres dans une certaine plage. Comment puis-je y parvenir?
Réponses
2 Cryoris Sep 02 2020 at 16:03
Vous pouvez créer un nombre arbitraire de paramètres dans votre circuit en utilisant la qiskit.circuit.Parameterclasse. Voici un bref exemple
from qiskit.circuit import Parameter, QuantumCircuit
# define your parameters
a, b, c = Parameter('a'), Parameter('b'), Parameter('c')
circuit = QuantumCircuit(2)
circuit.rx(a, 0) # RX(a) on qubit 0
circuit.ry(b, 0) # RY(b) on qubit 1
circuit.crz(c, 0, 1) # CRZ(c) controlled on qubit 0, acting on qubit 1
# bind the values
bound_circuit = circuit.bind_parameters({a: 0, b: 1, c: 2})
# or if you have a list of values
a_vals = [0, 1, 2, 3]
b_vals = [1, 2, 3, 4]
c_vals = [2, 3, 4, 5]
bound_circuits = [circuit.bind_parameters(
{a: a_val, b: b_val, c: c_val})
for (a_val, b_val, c_val) in zip(a_vals, b_vals, c_vals)]
Pour plus de commodité, il existe également la ParameterVectorclasse pour construire plusieurs paramètres à la fois. L'exemple ci-dessus peut également ressembler à
from qiskit.circuit import ParameterVector, QuantumCircuit
# define your parameters
p = ParameterVector('p', 3)
circuit = QuantumCircuit(2)
circuit.rx(p[0], 0) # RX(p[0]) on qubit 0
circuit.ry(p[1], 0) # RY(p[1]) on qubit 1
circuit.crz(p[2], 0, 1) # CRZ(p[2]) controlled on qubit 0, acting on qubit 1
# bind the values
bound_circuit = circuit.bind_parameters({p: [0, 1, 2]})
# or for a list of values
values = [ [0, 1, 2], [1, 2, 3], [2, 3, 4] ]
bounds_circuits = [circuit.bind_parameters({p: val} for val in values})