Qiskit devresine birkaç parametre nasıl eklenir?

Sep 02 2020

Qiskit'te bir ansatz devresi inşa etmek istiyorum, bu yüzden kapılar üzerinde hareket etmek için bazı parametrelere ihtiyacım var (örneğin, RX (a), RY (b)). Qiskit öğreticilerinde bir parametre uygulamanın bir yolunu buluyorum:

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()

Yalnızca bir parametre vardır theta. Bazı aralıkta daha fazla parametre istiyorum. Bunu nasıl başarabilirim?

Yanıtlar

2 Cryoris Sep 02 2020 at 16:03

qiskit.circuit.ParameterSınıfı kullanarak devrenizde rastgele sayıda parametre oluşturabilirsiniz . İşte kısa bir örnek

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)]

Kolaylık sağlamak için aynı ParameterVectoranda birden fazla parametre oluşturacak sınıf da vardır . Yukarıdaki örnek şu şekilde de görünebilir:

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})