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

调用cvxopt的solve_qp函数报数组维度匹配ValueError如何解决

问题原因

该报错是quadprog求解器内部拼接约束向量时维度不匹配导致的,根源是传入的向量维度格式不符合求解器要求,同时存在冗余无效约束。

解决方案

按以下步骤修改代码即可:

1. 统一所有向量为一维numpy数组

求解器要求目标函数项q、等式约束项b、上下界lb/ub均为一维数组,原定义的都是二维列向量,需要做展平处理:

# 目标函数C展平为一维
C = np.asarray(np.bmat([[b*np.ones(24),b*np.ones(24),0*np.ones(24),ppp]])).flatten()

# 等式约束beq展平为一维
beq = np.asarray(np.bmat([[M],[np.zeros((24,1))]])).flatten()

# 上下界展平为一维
lb = np.asarray(np.bmat([[0*np.ones(24),0*np.ones(24),[0.1],0.1*np.ones(22), 
    [0.1],100*np.ones(24)]])).flatten()

ub = np.asarray(np.bmat([[max_pch*np.ones(24),max_pdch*np.ones(24),[0.1],0.9*np.ones(22), 
    [0.9],500*np.ones(24)]])).flatten()

2. 删除冗余等式约束

原Aeq中最后48行全为0,对应beq最后48行全为0,属于0x=0的无效约束,直接删除避免求解器处理异常:

Aeq = np.asarray(np.bmat([[-I,I,Z,I], [-gamma1*I, gamma2*I,MM,Z]]))

3. 修正solve_qp调用参数

不需要将numpy数组转换为cvxopt的matrix类型,直接传入原生numpy数组即可:

x = solve_qp(P=Q, q=C,
             G=None, h=None, 
             A=Aeq, b=beq, 
             lb=lb, ub=ub,
             solver='quadprog')

4. 维度校验(可选)

修改完成后可以先打印各参数维度确认匹配:

  • Q.shape == (96, 96)
  • C.shape == (96,)
  • Aeq.shape == (48, 96)
  • beq.shape == (48,)
  • lb.shape == ub.shape == (96,)

内容的提问来源于stack exchange,提问作者sajad parvizi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:48:03