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

Matlab中CVX工具变量相乘优化问题求解咨询

含乘积项的凹目标函数优化问题解决方法

问题背景

需要优化的目标函数为(以一维测试为例):
$$\max_{x,y\geq0} \log\left(1 + \frac{8xy}{4x+2y}\right)$$
N维一般形式为:
$$\max_{x_i,y_i\geq0} \sum_{i=1}^N \log\left(1 + \frac{g_i h_i x_i y_i}{g_i x_i + h_i y_i}\right)$$
直接使用CVX的默认模式或GP模式会触发错误:

  • GP模式错误:Illegal operation: {real constant} + {log-concave},因1 + 对数凹项不符合GP的运算规则;
  • 默认模式错误:Invalid quadratic form(s): not a square,因变量乘积导致二次形式不合法。

解决方案:表达式变形适配CVX规则

原目标函数可通过等价变形,转换为CVX可识别的凹函数形式:
将一维目标函数改写为:
$$\max_{x,y\geq0} -\log\left( \frac{4x+2y}{4x+2y+8xy} \right)$$
对于N维情况,对应变形为:
$$\max_{x_i,y_i\geq0} \sum_{i=1}^N -\log\left( \frac{g_i x_i + h_i y_i}{g_i x_i + h_i y_i + g_i h_i x_i y_i} \right)$$

一维测试CVX代码

cvx_begin
    variable xCVX nonnegative  
    variable yCVX nonnegative  
    expr numerator = 4*xCVX + 2*yCVX;
    expr denominator = numerator + 8*xCVX*yCVX;
    maximize( -log(numerator / denominator) )
cvx_end

N维通用CVX代码

cvx_begin
    variable x(N) nonnegative  
    variable y(N) nonnegative  
    % g、h为对应维度的正常数向量
    expr numerator = g.*x + h.*y;
    expr denominator = numerator + g.*h.*x.*y;
    maximize( sum( -log(numerator ./ denominator) ) )
cvx_end

原理说明

  1. 分式项$\frac{g_i x_i + h_i y_i}{g_i x_i + h_i y_i + g_i h_i x_i y_i} = \frac{1}{1 + \frac{g_i h_i x_i y_i}{g_i x_i + h_i y_i}}$,其中$\frac{g_i h_i x_i y_i}{g_i x_i + h_i y_i}$是关于$x_i,y_i$的凹函数;
  2. 凹函数加正常数仍为凹函数,其倒数(正数范围内)为凸函数;
  3. $\log(凸函数)$是凸函数,取负号后得到凹函数,符合CVX最大化凹函数的凸优化规则。

内容的提问来源于stack exchange,提问作者V.Ajall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:27:34