Come aggiungere diversi parametri nel circuito qiskit?
Sep 02 2020
Voglio costruire un circuito ansatz in Qiskit, quindi ho bisogno di alcuni parametri per agire sui gate (es. RX(a), RY(b)). Nei tutorial di Qiskit trovo un modo per implementare un parametro:
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()
C'è solo un parametro, theta. Voglio più parametri in un certo intervallo. Come posso ottenerlo?
Risposte
2 Cryoris Sep 02 2020 at 16:03
Puoi creare un numero arbitrario di parametri nel tuo circuito usando la qiskit.circuit.Parameterclasse. Ecco un breve esempio
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)]
Per comodità c'è anche la ParameterVectorclasse per costruire più parametri contemporaneamente. Anche l'esempio sopra può sembrare
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})