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?
It was a bug in the QPY serialization. qiskit 1.4.1
and qiskit 2.0.0
have fixes for it.