You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ADAM/COBYLA优化器minimize方法参数报错求助

问题解决方法

错误原因分析

你遇到的两个错误都是因为对Qiskit优化器的minimize()方法参数和返回值理解有误:

  1. 第一个错误:Qiskit的ADAM/COBYLA优化器没有initial_point这个参数,初始点需要通过位置参数x0传入。
  2. 第二个错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:44:59