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

使用CVXPY编写凸优化代码报DCP规则不匹配错误如何解决

CVXPY DCP报错解决方案

错误原因

你遇到的Problem does not follow DCP rules报错,核心原因是二次型表达式写法不符合CVXPY的凸性识别规范:
即使A为半正定矩阵,CVXPY也无法自动识别手动拼接的cp.matmul(z.T,cp.matmul(A, z))的凸性,必须使用CVXPY内置的二次型构造函数cp.quad_form(),它会自动根据参数矩阵的正定性判断表达式的凸凹性,符合DCP规则要求。

修正后的代码

只需要修改目标函数中的二次型部分即可,完整可运行代码如下:

import numpy as np
import cvxpy as cp

d = 10

# 生成半正定矩阵,你的构造方法正确
A = np.random.rand(d, d)  
A = np.dot(A.transpose(),A)

lmbd = 0.1
z = cp.Variable(d)
s = np.random.randn(d)

# 仅修改二次型写法为cp.quad_form
objective = cp.Minimize(lmbd**2 * cp.quad_form(z, A) - lmbd*cp.matmul(z.T, s))

constraint = [cp.sum(z) == 1, z >= 0]
prob = cp.Problem(objective, constraint)

print("Optimal value", prob.solve())
print("Optimal var", z.value)

补充说明

  • cp.quad_form(x, P)是CVXPY专门用来构造x^T P x表达式的API,当P为半正定时,该表达式会被识别为凸函数,满足极小化问题的DCP要求
  • 你当前构造半正定矩阵A的方法是正确的,不需要额外修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:48:04