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

使用cvxpy求解带非负约束类Lasso问题出现DCPError如何解决

非标准约束Lasso问题CVXPY报错解决方法

报错原因

你遇到的DCPError是因为CVXPY要求优化问题必须符合 disciplined convex programming 规则才能求解,你写的目标函数中两个子表达式的写法无法被CVXPY的凸性校验器识别:

  • 平方损失项(A@(v-v0)).T@(A@(v-v0)):两个仿射表达式的乘积形式不会被自动判定为凸的平方和结构
  • L1正则项cp.abs(v).T @ iota:内积形式的写法不会被自动识别为合法的凸正则项

修复方案

把目标函数的两个部分替换为CVXPY内置的、已经标记好凸性属性的函数即可通过DCP校验:

  • 平方损失用cp.sum_squares()实现,和原表达式计算结果完全等价
  • L1正则项用cp.norm1()或者cp.sum(cp.abs(v))实现,和原cp.abs(v).T @ iota计算结果完全等价

修改后的完整代码如下:

import cvxpy as cp
import numpy as np

A = np.random.rand(5000,1000)
v0 = np.random.rand(1000,1)
v = cp.Variable(v0.shape)

lam = 1

# 替换为符合DCP规则的写法
objective = cp.Minimize( cp.sum_squares(A @ (v - v0)) + lam * cp.norm1(v) )
constraints = [v >= 0]

prob = cp.Problem(objective, constraints)
res = prob.solve()

# 可打印结果验证
print("最优目标值:", res)
print("最优v:", v.value)

额外优化提示:因为你已经添加了v >= 0的约束,cp.abs(v)和v完全等价,正则项也可以简化为cp.sum(v),运行效率会略高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:39:03