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

如何在CVXPY中实现带循环的二次规划及形式适配疑问

CVXPY二次规划扩展与循环构建方法

CVXPY并非仅支持cp.Minimize(cp.sum_squares(A @ x - b))这类形式的二次规划,它兼容所有符合DCP规则的凸二次目标与约束,包括各类求和形式的表达式。

用循环构建求和式目标函数

完全可以像PULP那样通过嵌套for循环定义目标函数与约束,无需特殊API,直接结合Python原生循环与CVXPY表达式语法即可实现。以下是具体示例:

假设目标为求和形式的二次函数(对应你提供的图片形式):
$$\text{minimize} \quad \sum_{i=1}^N \sum_{j=1}^M \left( Q_{ij} x_i x_j + c_{ij} x_i \right)$$

代码实现:

import cvxpy as cp

# 定义变量(支持连续/整数变量)
N = 5
M = 3
x = cp.Variable(N, integer=False)  # 整数变量设integer=True

# 初始化目标,循环累加项
objective = cp.Minimize(0)
Q = [[1.0]*M for _ in range(N)]  # 示例系数矩阵
c = [[0.5]*M for _ in range(N)]

for i in range(N):
    for j in range(M):
        quad_term = Q[i][j] * x[i] * x[j]
        linear_term = c[i][j] * x[i]
        objective += quad_term + linear_term

若为单维度求和(如$\sum_{i=1}^N (a_i x_i^2 + b_i x_i)$),单循环即可:

objective = cp.Minimize(0)
a = [2.0]*N
b = [1.0]*N
for i in range(N):
    objective += a[i] * cp.square(x[i]) + b[i] * x[i]

用循环批量添加约束

约束同样可通过循环批量定义:

constraints = []
# 添加变量非负约束
for i in range(N):
    constraints.append(x[i] >= 0)
# 添加线性等式约束
d = [5.0]*M
for j in range(M):
    constraints.append(cp.sum(x) == d[j])

混合整数二次规划的循环实现

涉及混合整数变量时,仅需在定义变量时指定integer=True,循环逻辑保持一致:

x_int = cp.Variable(N, integer=True)
x_cont = cp.Variable(M)

# 构建混合整数目标
objective = cp.Minimize(0)
for i in range(N):
    objective += cp.square(x_int[i])
for j in range(M):
    objective += x_cont[j] * x_int[0]

# 添加约束
constraints = [x_int[i] <= 10 for i in range(N)]
constraints += [x_cont[j] >= 0 for j in range(M)]

只要最终表达式符合DCP规则,CVXPY即可正常调用求解器完成求解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:55:10