¿Cómo agregar varios parámetros en el circuito qiskit?
Sep 02 2020
Quiero construir un circuito ansatz en Qiskit, por lo que necesito algunos parámetros para actuar en las puertas (por ejemplo, RX(a), RY(b)). En los tutoriales de Qiskit encuentro una manera de implementar un parámetro:
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()
Solo hay un parámetro, theta. Quiero más parámetros en algún rango. ¿Cómo puedo lograr eso?
Respuestas
2 Cryoris Sep 02 2020 at 16:03
Puede crear un número arbitrario de parámetros en su circuito utilizando la qiskit.circuit.Parameterclase. Aquí hay un breve ejemplo
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)]
Para mayor comodidad, también existe la ParameterVectorclase para construir múltiples parámetros a la vez. El ejemplo anterior también puede verse como
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})