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

如何在CVXPY中编写可被识别为拟凸的二次分式规划?

在CVXPY中正确识别拟凸比值函数的方法

直接用除法运算符f / h时,CVXPY无法自动识别该函数的拟凸性,这是因为CVXPY的DQCP规则要求必须使用专门的原子来构造符合条件的拟凸/拟凹函数,而非直接通过运算符组合。

根据DQCP文档里的Ratio原子定义,非负凸函数与正凹函数的比值是拟凸的,完全匹配你的场景(f是凸且非负,h是凹且满足h(x)>0),因此需要用cp.ratio()显式构造该函数,替代直接除法。

修改后的代码

# Import packages
import cvxpy as cp
import numpy as np

# parameters
A1 = np.matrix([[2,1],[1,3]])
A2 = np.matrix([[1,1],[1,4]])

# create model
x = cp.Variable(2)
f = cp.quad_form(x,A1,assume_PSD=True)
h = -cp.quad_form(x,A2,assume_PSD=True) + 10
# 使用cp.ratio代替直接除法
quadFrac = cp.ratio(f, h)

# check the function type
print("f is convex: ",f.is_convex())
print("h is concave: ",h.is_concave())
print("f/h is quasiconvex: ",quadFrac.is_quasiconvex())
print("f/h is ",quadFrac.curvature)

关键说明

  • cp.ratio(f, h)会严格按照DQCP规则验证输入:第一个参数必须是非负凸函数,第二个参数必须是正凹函数,满足条件后会被正确识别为拟凸函数。
  • 修改后运行代码,quadFrac.is_quasiconvex()会返回True,曲率也会被标记为QUASICONVEX,后续可基于该函数构建拟凸优化问题并正常求解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:27:16