ADAM/COBYLA优化器minimize方法参数报错求助
问题解决方法
错误原因分析
你遇到的两个错误都是因为对Qiskit优化器的minimize()方法参数和返回值理解有误:
- 第一个错误:Qiskit的ADAM/COBYLA优化器没有
initial_point这个参数,初始点需要通过位置参数x0传入。 - 第二个错误:
minimize()方法返回的是一个OptimizerResult对象,而非三个独立返回值,直接解包会报错。
修正后的代码示例
第一步:修正初始点传入方式
替换错误的initial_point参数,改用x0传递初始参数:
optimizer = ADAM(maxiter=100) # 正确调用:objective函数在前,初始点x0在后 result = optimizer.minimize(objective, x0=agent.params) new_params = result.x
第二步:完整修正后的循环代码
针对你调整后的代码,修改minimize()的调用和结果获取逻辑:
while True: action = int(agent.choose_action(state)) new_state, reward, done = env.step(action) # Quantum reinforcement learning update def objective(params): q_circ = q_circuit(params, state + action) q_circ_transpiled = transpile(q_circ, agent.backend) q_job = assemble(q_circ_transpiled, shots=1000) job_result = agent.backend.run(q_job).result() counts = job_result.get_counts(q_circ_transpiled) return -counts.get(str(action), 0) print("agent.params: ", agent.params) # 调用minimize,获取OptimizerResult对象 opt_result = optimizer.minimize(objective, x0=agent.params, jac=None, bounds=None) # 从结果对象中提取优化后的参数 new_params = opt_result.x # 可选:查看优化后的目标函数值 # print("Optimized objective value: ", opt_result.fun)
额外说明
- 如果使用的是其他库的优化器(而非Qiskit),需要对应查看该库的官方文档确认
minimize()方法的参数和返回值格式。 - 建议将
objective函数定义移出循环,避免每次循环都重新定义函数,提升效率。
内容的提问来源于stack exchange,提问作者monir zaman
相关产品推荐
相关产品推荐

