pythonoptimizationscipyquantum-computingqiskit

Qiskit: AttributeError: 'ParameterExpression' object has no attribute 'name' when running Estimator with minimize (Scipy) on IBM Quantum hardware


I am trying to optimize a quantum circuit using scipy.optimize.minimize and Qiskit Runtime's Estimator, running on an IBM Quantum real device. However, I am encountering the following error:

AttributeError: 'ParameterExpression' object has no attribute 'name'

The error occurs inside the minimize function call, specifically when `estimator.run() is executed in cost_func_estimator.

Here is the relevant code:

from scipy.optimize import minimize
from qiskit_ibm_runtime import Estimator, Session

objective_func_vals = []

with Session(backend=backend) as session:
    estimator = Estimator(mode=session)
    estimator.options.default_shots = 1000

    estimator.options.dynamical_decoupling.enable = True
    estimator.options.dynamical_decoupling.sequence_type = "XY4"
    estimator.options.twirling.enable_gates = True
    estimator.options.twirling.num_randomizations = "auto"

    result = minimize(
        cost_func_estimator,
        init_params,
        args=(candidate_circuit, qubitOp, estimator),
        method="COBYLA",
        tol=1e-2,
        callback=callback,
    )

    save_progress(result.x, objective_func_vals, name_saved_file)
    print(result)

The cost_func_estimator function is called within minimize and runs a job in the estimator:

def cost_func_estimator(params, ansatz, hamiltonian, estimator):
    isa_hamiltonian = hamiltonian.apply_layout(ansatz.layout)
    pub = (ansatz, isa_hamiltonian, params)

    job = estimator.run([pub])  # The error occurs here

    results = job.result()[0]
    cost = results.data.evs
    return cost

I expected scipy.optimize.minimize to optimize the parameters of my quantum circuit using Qiskit Runtime’s Estimator on an IBM Quantum real device.

I tried:

- Ensuring `init_params` contains only numerical values, not `ParameterExpression`.
- Using `bind_parameters()` to assign values before optimization.
- Updating `qiskit` and `qiskit-ibm-runtime` to the latest version.

Despite these attempts, the error persists. I expected estimator.run() to execute without issues, but it fails with AttributeError: 'ParameterExpression' object has no attribute 'name'.

How can I resolve this issue?


Solution

  • It was a bug in the QPY serialization. qiskit 1.4.1 and qiskit 2.0.0 have fixes for it.